html5 / template
内联模板组件
1.1.0
2017-07-20 10:50 UTC
Requires
- php: >=7.0
- gismo/expression-language: ^3.1
- html5/htmlreader: ^1.1
- symfony/yaml: *
Requires (Dev)
- phpunit/phpunit: ^6.2
This package is auto-updated.
Last update: 2024-09-06 08:48:58 UTC
README
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