skinengine / skin
Requires
- php: >=5.3.3
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对象。