Skin,一个PHP模板引擎

dev-stable 2016-08-19 09:37 UTC

This package is auto-updated.

Last update: 2024-09-06 09:06:55 UTC


README

Skin是一个具有(X)HTML渲染功能的PHP模板引擎。它管理循环、条件、变量,并使用非常简单的语法。

Skin模板的文件扩展名为.skln

管理输出

您不必将输出设置为HTML5;它可以是XHTML或Skin可以处理的任何HTML版本。

当然,您不必修改骨架模板的单行代码来更改输出类型。

缓存

Skin使用缓存来提高性能,通过减少执行时间并避免无用地解析已解析的模板。

如果您修改了模板,只需记住强制缓存过期即可。

HTML验证

Skin始终输出W3C有效的HTML。如果您编写了不存在的内容,例如标签或属性,它将被调整为有效结果。

解析异常处理程序

Skin包括一个异常处理程序,它将抛出错误并显示问题发生的行。

继承与包含

扩展

使用Skin,您可以使用另一个主模板扩展您的模板。例如,如果您在当前模板中写入@extends main,它将扩展“main.skln”模板。

如果您需要从一个目录访问模板,可以使用斜杠或反斜杠: @extends main/main将在您的视图目录中查找模板main.skln,然后在“main”目录中查找。

然后您需要在父模板中希望显示扩展模板的位置编写@content

包含

您还可以包含部分视图,例如导航视图。

要这样做,请在当前模板中您想要包含部分视图“nav.skln”的位置编写@partial nav

与扩展一样,您可以使用斜杠或反斜杠从另一个目录获取部分内容。

标签与缩进

在您的模板中,您不必使用标签编写(X)HTML,只需键入HTML元素名称。请注意,您必须缩进并添加新行以创建元素之间的关系。

例如

div id(myDiv)
  h1 class(myHeaders)
    Hello, I'm a header.
    span
      Hi, I'm a span in the header.

将渲染

<div id="myDiv">
  <h1 class="myHeaders">
    Hello, I'm a header.
    <span>
      Hi, I'm a span in the header.
    </span>
  </h1>
</div>

元素语法

在Skin模板中,一个元素由标签名称和潜在属性组成。

属性由名称、开括号、值然后闭括号组成。这里是完整元素语法

div id(myId) class(classOne; classTwo) contenteditable(true)

/!\ HTML布尔属性如"checked"、"readonly"等在Skin模板中需要值。

/!\ 如果您需要写入文本并确保它不会被解析,只需将"plaintext"作为标签,并在下面放置您的文本。

特殊属性的快捷键

Skin、id和class属性有快捷键,您可以在骨架中更快地编写代码。

  • # : id
  • . : class
  • % : skloop
  • ? : skif
  • : : skelse
  • $ : sksample

在使用快捷键时,您不必输入完整的属性语法;您可以通过省略括号来避免使用,如下所示: div #myId .classOne;class-two

/!\ 请记住,如果您在属性中有多个值,不要使用空格,否则解析将失败。

布尔属性和比较

布尔属性如"checked"、"selected"(...)常用于循环中。为了确定循环中哪些项可以获取此属性,您可以使用Skin的布尔属性,通过在布尔属性后添加"is"(布尔属性由输出版本定义)来确定。

首先需要定义一个带有值的变量。注意变量名,它将在比较时被获取。

例如

$data['vars'] = [
    ['value' => 0],
    ['value' => 1],
    ['value' => 2]
];

SkinTemplate\SkinCompare::set('var.value', 1);
select skloop(vars=>var)
    option value({{ var.value }}) isSelected(var.value)

然后选择值为1的数据。

变量

需要显示变量内容吗?像许多其他模板引擎一样,变量是通过使用花括号来显示的

{{ variable }}

您可以使用处理函数来修改这些变量,如下所示

{{ variable | function1, function2(arg1; arg2) }}

如果数据是对象或关联数组,您也可以显示属性

{{ object.property }}

/!\ 变量内容将自动转义。如果您想显示一些代码或HTML标签,只需在函数槽中键入 "unescape"。

/!\ 您可以通过在第一个开括号后添加一个美元符号来转义变量块:${{ escaped }}。

翻译

要显示翻译字符串,它使用花括号和等号

{= INDEX =}

它将在当前语言的翻译数组中查找 "INDEX" 索引。

如果您需要在该字符串中显示数据,只需这样做

{= INDEX | variable, object.property =}

/!\ 您可以通过在第一个开括号后添加一个美元符号来转义翻译块:${= ESCAPED =}。

注册语言

SkinLanguages 中所有现有的语言默认情况下都是禁用的。您必须使用 "registerLanguage" 方法或 "registerAll" 来启用它们。

默认语言是法语。

翻译文件

数据文件只是一个返回字段数组的PHP文件。

您可以通过在翻译器的 "setDataCallback" 方法中添加另一个数据源来覆盖此功能。

这样做,您可以从JSON、YAML等任何PHP可以处理的数据中获取数据。

循环

设置循环

循环用于集合或数字数组。您可以通过使用别名与属性名连接来访问每个项目的属性。

要设置循环,您需要使用元素中的 skloop 属性,如下所示

ul skloop(myItems=>item)
  li
    {{ item.property }}

其中 "myItems" 是数据索引,"item" 是其别名,就像在 foreach 循环中一样。

循环的特殊属性

循环有一些特殊属性,例如长度或当前项的数字索引。

您可以像这样显示它们

{{ item.$ }} 用于数组长度

{{ item.# }} 用于当前项索引。

{{ item._ }} 用于当前项值(值必须是字符串,否则不会显示)。

/!\ 不要忘记,您无法在循环上下文之外访问项索引。

动态变量和翻译

您可以使用两对方括号来在变量中显示变量。例如,您有三个名为 "myTest"、"myFoo"、"myBar" 的变量。

添加一个包含以下值的数组:"Test"、"Foo"、"Bar",然后创建一个循环

div skloop(vars=>var)
    {{ my[[var._]] }}

相同的逻辑也可以用于翻译。

条件

条件是通过 "skif" 和 "skelse" 属性创建的。

例如,假设我们有一个名为 "test" 的数据索引和以下代码示例

section skif(test)
  If test is "true", display me !

section skelse(test)
  Else, display me !

示例

示例或模板的简短片段,您将在客户端代码中重复使用。

例如,您想要动态地追加一个列表项,但不需要在代码中重写HTML

ul %items=>item
  li sksample(listItem)
    {{item.key}} - {{item.value}}

它将保留您编写属性的节点及其所有子节点 ...

Samples.listItem = '
li
  {{item.key}} - {{item.value}}
';

... 作为示例。

示例文件将命名为 "'TEMPLATENAME'Sample.json",并包含所有示例作为JavaScript对象。