html5/template

内联模板组件

1.1.0 2017-07-20 10:50 UTC

This package is auto-updated.

Last update: 2024-09-06 08:48:58 UTC


README

Downloads this Month Latest Stable Version

Html5 Template - 模板渲染

为PHP7提供类似AngularJS的内联模板。

计划作为PHPTAL的替代品 - 虽然PHPTAL相当不错,但不够可扩展以用于集群/平台使用。

Gismo模板不会预编译任何代码。它将页面实时生成。

功能

  • 支持HTML5和XHTML(推荐XHTML)
  • IDE支持的模板开发
  • 从一个文件生成HTML、纯文本或结构化数据
  • 支持宏
  • 从虚拟存储(云就绪)导入其他模板
  • 详细且有用的错误消息,包括行号和xpath
  • 安全且强大的表达式引擎(Symfony组件也被Twig使用)

示例

模板

<div go-if="showHeader==true">Welcome {{ user.name }}</div>
<div go-foreach="products as curProduct">
    <span go-bind="curProduct.name"></span>
</div>

解析器

$template = new HtmlTemplate();
echo $template->render("template.xhtml", ["showHeader" => true, "producs"=> [ new Product("prod1"), new Product("Product2)" ]]);

使用Composer安装

composer require html5/template

属性

  • go-if:条件
  • go-foreach:循环
  • go-repeat:循环
  • go-continue:循环重新开始
  • go-break:退出循环
  • go-bind:注入字符串数据
  • go-html:注入HTML数据

条件

<div go-if="name == 'Matthias'">
    Hello {{ name }}
<div>

循环

<div go-foreach="products as product">
    Product Title: {{product.title}} 
</div>
<div go-foreach="data as curKey => curVal">
    Key: {{curKey}} Value: {{curVal}}
</div>

重复循环

<div go-repeat="100 indexBy myIndex">
    Line {{ myIndex }}: Hello
</div>

中断/继续循环

您可以使用条件来中断或继续循环

<div go-loop="100 indexBy index">
    <go-break go-if="! count(productList) < index"/>
    ...
</div>

或使用continue跳过元素

<div go-foreach="products as product">
    <go-continue go-if="product.isHidden == true"/>
    ...
</div>

绑定转义值

<span go-bind="user.name">Name to show if user.name is null</span>

数据将由htmlspecialchars()转义

绑定HTML代码

<div go-html="page.htmlCode">Show <b>this</b> if page.htmlCode is null</div>

动态添加CSS类

<div go-class="{cssClassName: name=='Matthes', otherClassName: highlight==true}">..</div>

显示/隐藏元素

<div go-show="showIt==true"></div>
<div go-hide="hideIt==true"></div>

如果隐藏,则添加CSS类ng-hide(也被AngularJS使用)

元素

  • go-text:注入文本
  • go-define:在作用域中定义变量
  • go-dump:转储变量或作用域
  • go-macro:定义宏
  • go-callmacro:调用宏
  • go-struct:返回由go-section定义的数组数据部分
  • go-section:定义或覆盖结构化数据

拦截器

宏可用于在多个位置创建输出。要定义宏,请使用go-macro元素

<go-macro name="printDemoTable(headers, data)">
    <table>
        <thead>
            <tr>
                <td go-foreach="headers as curHeader">{{ curHeader }}</td>
            </tr>
        </thead>
        <tbody>
            ...
        </tbody>
    </table>
</go-macro>

使用go-callmacro元素生成您的表格

<body>
    <go-callmacro name="printDemoTable(shoppingCart.headers, shoppingCart.items)"/>
</body>

基准测试

上面的简单示例

Parsing + Rendering: <0.01s

带有约2000行模板代码的大演示

Template-Parsing: <10ms
Rendering: <15ms

在Ubuntu 16.04上安装V8JS

由于没有v8js的apt包,您必须手动安装

sudo add-apt-repository ppa:pinepain/libv8-5.2
sudo apt-get update
sudo apt-get install libv8-dev  g++ cpp php-pear php7.0-dev
sudo pecl install v8js

sudo bash
echo "extension=v8js.so" > /etc/php/7.0/apache2/conf.d/20-v8js.ini
echo "extension=v8js.so">/etc/php/7.0/cli/conf.d/20-v8js.ini

service apache2 restart

作者

由Matthias Leuffen于2016年编写 http://leuffen.de