hananils / kirby-xslt

此包已被废弃,不再维护。未建议替代包。

Kirby的XSLT

安装: 4

依赖: 0

建议者: 0

安全性: 0

星星: 7

关注者: 5

分支: 2

开放问题: 3

类型:kirby-plugin

3.0.0 2023-01-16 11:46 UTC

This package is auto-updated.

Last update: 2023-12-16 14:00:10 UTC


README

Kirby XSLT

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')
    ];
};

已知类型包括:

包含的元素

为了自定义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文档
  • 可以通过设置truefalse来开启或关闭title对象。
  • 可以通过设置truefalse来开启或关闭path对象,它有助于根据URL应用不同的模板。
  • 在多语言安装中,languages对象提供了所有语言的链接,可以通过设置truefalse来开启或关闭。
  • content子集接受您希望包含的字段数组,例如content: title, description, tags
  • files对象可以通过设置truefalse来开启或关闭。它还接受以下额外的设置。
  • children对象可以通过设置truefalse来开启或关闭。它还接受来自pages对象的额外设置,请参阅以下内容。

如果您想向特定字段传递选项,您仍然可以使用通配符包含所有其他字段

content:
    *: true
    description: markdown

文本区域字段

文本区域字段提供了额外的设置来定义应用于字段内容的格式化程序。默认情况下,Kirbytext应用于所有文本区域

content: title, description, tags

要获取未格式化的源文本,必须在页面定义中将字段设置为unformatted

content:
    title: true
    description: unformatted
    tags: true

要获取格式化的输出,字段必须设置为markdownkirbytext

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
  • 可以通过设置truefalse来开启或关闭filename
  • meta对象等于页面的content对象,请参阅以上内容。
  • thumbs对象允许您设置图像缩略图。它接受一个带有可选设置widthheightcrop位置的缩略图列表。如果您的裁剪位置存储在字段中,您可以使用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]

模板

模板定义在默认的 templatessnippets 文件夹中。如果您使用的是 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 GestaltungMIT 许可证 下免费提供。
我们为数字和模拟媒体创建视觉设计。