hananils / 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节点。一旦您登录,您可以通过在URL后附加?data
来查看任何页面的数据。使用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
attributes
对象允许从 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
对象具有以下选项
page: attributes: - id - url title: true path: true languages: true content: true files: true children: false
attributes
对象允许从页面方法创建节点属性。属性名必须与方法名匹配,请参阅 Kirby 文档。title
对象可以通过设置true
或false
来切换开或关。path
对象有助于根据 URL 应用不同的模板,可以通过设置true
或false
来切换开或关。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
filename
可以通过设置true
或false
来切换开或关。meta
对象等于页面的content
对象,请参阅以上内容。thumbs
对象允许您设置图片缩略图。它接受带有可选设置(宽度、高度和裁剪位置)的缩略图列表。如果您的裁剪位置存储在一个字段中,您可以使用语法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
如果您像示例中那样使用 doctype-system="about:legacy-compat"
,则插件将自动缩短默认的 doctype 输出 <!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 许可证 下免费提供。
我们为数字和模拟媒体创建视觉设计。