hananils / kirby-xslt
Kirby的XSLT
Requires
README
XSLT是Kirby 3的模板组件,使您的模板能够支持XSLT。它允许您指定每个蓝图所需的数据,然后作为XML在前端提供。
安装
下载
下载并将此存储库复制到/site/plugins/xslt
。
Git子模块
git submodule add https://github.com/hananils/kirby-xslt.git site/plugins/xslt
Composer
composer require hananils/kirby-xslt
数据
默认情况下,该插件为$kirby
、$site
、$pages
和$page
对象提供XML节点。一旦您登录,您可以通过将?data
附加到URL来查看任何页面的数据。使用Plainkit未设置附加设置的基本输出看起来如下:
<?xml version="1.0" encoding="UTF-8"?> <data> <kirby content-extension="txt" version="3.1.0"> <urls> <index host="localhost" path="" port="8888" scheme="http">https://:8888</index> <base host="localhost" path="" port="8888" scheme="http">https://:8888</base> <current host="localhost" path="" port="8888" scheme="http">https://:8888</current> <assets host="localhost" path="/assets" port="8888" scheme="http">https://:8888/assets</assets> <api host="localhost" path="/api" port="8888" scheme="http">https://:8888/api</api> <media host="localhost" path="/media" port="8888" scheme="http">https://:8888/media</media> <panel host="localhost" path="/panel" port="8888" scheme="http">https://:8888/panel</panel> </urls> <request> <path/> <params/> <get/> <post/> </request> <session> <csrf>912ec803b2ce49e4a541068d495ab570912ec803b2ce49e4a541068d495ab570</csrf> <user-id>dac9630a</user-id> </session> <user id="dac9630a" language="de" role="admin"> <username>Nils Hörrmann</username> <email alias="buero" domain="hananils.de" hash="9f8e362eca81e9723d9e699a45caf841">buero@hananils.de</email> <avatar/> <content/> </user> </kirby> <page id="home" slug="home" status="unlisted" template="default" uid="home" url="https://:8888"> <title>Home</title> </page> <pages> <page id="error" url="https://:8888/error"> <title>Error</title> <path url="error"> <param template="default" title="Error">error</param> </path> <content> <text/> </content> </page> <page id="home" url="https://:8888"> <title>Home</title> <path url="home"> <param template="default" title="Home">home</param> </path> <content> <text/> </content> </page> </pages> <site url="https://:8888"> <title>hana+nils · Büro für Gestaltung</title> </site> </data>
控制器中定义的任何对象都将添加到XML输出中,例如。
<?php return function ($kirby) { return [ 'projects' => $kirby->collection('projects') ]; };
已知类型包括:
Kirby\Cms\App
,请参阅Kirby文档Kirby\Cms\Site
,请参阅Kirby文档Kirby\Cms\Pages
,请参阅Kirby文档Kirby\Cms\Page
,请参阅Kirby文档Kirby\Cms\Files
,请参阅Kirby文档Kirby\Cms\File
,请参阅Kirby文档Kirby\Cms\Users
,请参阅Kirby文档Kirby\Cms\User
,请参阅Kirby文档DomDocument
,请参阅PHP文档DomElement
,请参阅PHP文档
包含的元素
为了自定义XML输出,您需要在您的site
文件夹中创建一个名为definitions
的新文件夹。类似于您的蓝图,您可以针对每个模板创建定义文件。例如,default.yml
可能如下所示:
kirby: true site: true page: true pages: false
键等于对象名称,可以是默认的$kirby
、$site
、$pages
或$page
对象,或者是一个返回project
对象的自定义控制器。将对象设置为true
将显示全部内容,将对象设置为false
将排除其内容。
不同类型有不同的选项
Kirby
kirby
对象有以下选项,可以打开或关闭节点:
kirby: attributes: - content-extension - language - multilang - version' urls: true request: true languages: false session: true user: true
属性对象允许从Kirby方法创建节点属性。属性名称必须与方法名称匹配,请参阅Kirby文档。
如果您正在使用多语言安装,将提供语言设置
<languages> <language code="de" direction="ltr" locale="de_DE.uft-8" url="https://:8888/de" default="true" current="true">Deutsch</language> <language code="en" direction="ltr" locale="en_US.uft-8" url="https://:8888/en">Englisch</language> </languages>
站点和页面
页面对象有以下选项
page: attributes: - id - url title: true path: true languages: true content: true files: true children: false
- 属性对象允许从页面方法创建节点属性。属性名称必须与方法名称匹配,请参阅Kirby文档。
- 可以通过设置
true
或false
来开启或关闭title
对象。 - 可以通过设置
true
或false
来开启或关闭path
对象,它有助于根据URL应用不同的模板。 - 在多语言安装中,
languages
对象提供了所有语言的链接,可以通过设置true
或false
来开启或关闭。 content
子集接受您希望包含的字段数组,例如content: title, description, tags
。files
对象可以通过设置true
或false
来开启或关闭。它还接受以下额外的设置。children
对象可以通过设置true
或false
来开启或关闭。它还接受来自pages
对象的额外设置,请参阅以下内容。
如果您想向特定字段传递选项,您仍然可以使用通配符包含所有其他字段
content: *: true description: markdown
文本区域字段
文本区域字段提供了额外的设置来定义应用于字段内容的格式化程序。默认情况下,Kirbytext应用于所有文本区域
content: title, description, tags
要获取未格式化的源文本,必须在页面定义中将字段设置为unformatted
content: title: true description: unformatted tags: true
要获取格式化的输出,字段必须设置为markdown
或kirbytext
content: title: true description: markdown tags: true
要应用多个格式化程序(如Kirbytext和SmartyPants),字段也接受方法列表
content: title: true description: - kirbytext - smartypants tags: true
方法从上到下应用。可以使用任何现有的字段方法,例如也可以应用lower
方法
content: title: true description: - kirbytext - lower tags: true
电话字段
当使用Composer设置时,您可以安装可选的libphonenumber库。这将向XML输出添加额外的电话号码格式(E164、国家、国际和RFC3966)。
页面
pages
对象返回子页面的集合。它采用与page
对象相同的设置,这些设置应用于所有子项。
文件
files
对象返回按文件模板分组的文件集合
filename: true meta: description, credits, focus thumbs: - width: 600 height: 400 crop: left - width: 1200 crop: file.focus - width: 1800
- 可以通过设置
true
或false
来开启或关闭filename
。 meta
对象等于页面的content
对象,请参阅以上内容。thumbs
对象允许您设置图像缩略图。它接受一个带有可选设置width
、height
和crop
位置的缩略图列表。如果您的裁剪位置存储在字段中,您可以使用file.fieldname
语法来引用它。
扩展包含的元素
您可以创建子文件夹来存放文件和页面,例如 /site/definitions/files
和 /site/definitions/pages
,以便创建您希望在定义文件中重复使用的设置的子集。这与蓝图中的工作方式类似。
扩展默认定义
extends: default
扩展文件定义
/site/defintions/files/image.yml
filename: true meta: description, credits, focus thumbs: - width: 600 height: 400 crop: left - width: 1200 crop: fields.focus - width: 1800
/site/definitions/project.yml
page: title: true content: title, description, url, date, tags files: image: extends: files/image
扩展页面定义
/site/definitions/pages/default.yml
title: true path: true
/site/definitions/project.yml
page: extends: default
辅助对象
插件打包了两个辅助对象,供您在控制器中使用
<?php return function ($kirby) { return [ 'datetime' => $kirby->collection('datetime'), 'assets' => $kirby->collection('assets') ]; };
日期和时间
该对象返回当前日期和时间信息以及本地化的月份和星期名称
<datetime> <today day="14" iso="2019-02-14T20:24:38+00:00" month="2" offset="+0000" time="20:24" timestamp="1550175878" weekday="4" year="2019">2019-02-14</today> <languages> <language id="en" locale="en_ca"> <months> <month abbr="Jan" id="1">January</month> <month abbr="Feb" id="2">February</month> <month abbr="Mar" id="3">March</month> <month abbr="Apr" id="4">April</month> <month abbr="May" id="5">May</month> <month abbr="Jun" id="6">June</month> <month abbr="Jul" id="7">July</month> <month abbr="Aug" id="8">August</month> <month abbr="Sep" id="9">September</month> <month abbr="Oct" id="10">October</month> <month abbr="Nov" id="11">November</month> <month abbr="Dec" id="12">December</month> </months> <weekdays> <weekday abbr="Sun" id="1">Sunday</weekday> <weekday abbr="Mon" id="2">Monday</weekday> <weekday abbr="Tue" id="3">Tuesday</weekday> <weekday abbr="Wed" id="4">Wednesday</weekday> <weekday abbr="Thu" id="5">Thursday</weekday> <weekday abbr="Fri" id="6">Friday</weekday> <weekday abbr="Sat" id="7">Saturday</weekday> </weekdays> </language> </languages> </datetime>
可以在配置中设置使用的区域设置
<?php return [ 'locale' => 'en_CA.utf-8' ];
如果您正在处理一个多语言网站,所有您设置的都将可用。
还可以在定义文件中设置包含的节点
datetime: today: true languages: false
资产
该对象返回关于 /asset
文件夹内所有文件和文件夹的信息
<assets> <images> <file extension="png" mime="image/png" modified="1544107969">apple-touch-icon.png</file> </images> <scripts> <file extension="js" mime="text/plain" modified="1549887572">app.js</file> </scripts> <styles> <file extension="css" mime="text/plain" modified="1544531895">app.globals.css</file> <file extension="css" mime="text/plain" modified="1549887572">app.layouts.css</file> </styles> </assets>
这些信息可用于自动生成脚本和样式的链接
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="data"> <html> <head> <xsl:apply-templates select="assets/styles/file[@extension = 'css']" /> </head> <body> <h1>Hello!></h1> </body> </html> </xsl:template> <xsl:template match="assets/styles/file[@extension = 'css']"> <link rel="stylesheet" type="text/css" href="{$assets}/{@modified}/{name(..)}/{.}" /> </xsl:template> </xsl:stylesheet>
还可以使用 modified
属性来创建带时间戳的链接
# in your .htaccess
RewriteRule ^assets/([0-9]+)/(.*)$ ./assets/$2 [L,NC]
模板
模板定义在默认的 templates
和 snippets
文件夹中。如果您使用的是 Kirby Starterkit 或 Plainkit,请删除默认的 PHP 模板并添加一个新的 default.xsl
文件。这是一个很好的起点
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" omit-xml-declaration="yes" media-type="text/html" encoding="utf-8" doctype-system="about:legacy-compat" /> <xsl:template match="data"> <html> <head> <title> <xsl:value-of select="page/title" /> </title> </head> <body> <h1> <xsl:value-of select="page/title" /> </h1> </body> </html> </xsl:template> </xsl:stylesheet>
模板命名约定遵循默认的 Kirby 方案,请参阅 https://getkirby.com/docs/guide/templates/basics#naming-your-templates。
文档类型
如果您使用如上例中的 doctype-system="about:legacy-compat"
,则插件将自动缩短默认的文档类型输出 <!DOCTYPE html SYSTEM "about:legacy-compat">
为 <!DOCTYPE html>
。
内容表示和电子邮件
从版本 3.0 开始,XSL 模板默认只对 HTML 和 XML 内容启用。对于任何其他内容表示和电子邮件,使用原生模板。您可以在配置中设置 XSLT 渲染的允许类型
return [ 'hananils.kirby-xslt.types' => ['rss'] ];
禁用 XSL 模板
从版本 3.0 开始,您可以在配置中禁用 XSL 模板
return [ 'hananils.kirby-xslt.enabled' => false ];
不足之处
该插件仍在开发中。我们根据自身需求对其进行扩展
- 字段支持仅限于核心字段和少数我们自己使用的附加字段。
欢迎贡献。
许可
此插件由 hana+nils · Büro für Gestaltung 在 MIT 许可证 下免费提供。
我们为数字和模拟媒体创建视觉设计。