Pate is a PHP Attribute Template Engine inspired by PHPTAL but run much faster. It uses syntax like angular and vue, But renders on the server side. It's compatible with PHPTAL.
I use PHPTAL as our template engine in one of my Project. But is was TOO SLOW!!, and TOO COMPLICATED. So I decide to rewrite a similar Template Engine named PATE.
Here are some advantages:
- TREE times faster than PHPTAL. PHPTAL takes several seconds to render a big page(abount 150k), but PATE is more than 3 times faster.
- PATE is Extremely Extensible. PATE is designed for extensible, You can create your own Syntax to enhance PATE's feature.
- PATE is Extremely Easy. There are only 1/10 codes of PHPTAL, but much more powerful.
- PATE's compiled file is VERY READABLE. But PHPTAL's compiled file is complicated and very hard to read.
- PHPTAL is too strict with dom and variables, error occurs frequently. Pate is friendly.
To use Pate, you need
-
PHP >= 5.4.
-
With dom extension installed.
With composer
composer require softwarezhu/pate
Template file
<html>
<head>
</head>
<body>
<img tal:attributes="src data/src; alt data/title"/>
</body>
</html>
Do render(ie. This template is named 'template.html')
use Pate\PateTemplate;
$template = new PateTemplate();
$template->loadHtmlFile('template.html');
$content = $template->render(array(
'data' => array(
'src' => 'htttp://github.com/logo.jpg',
'title' => 'Github Logo'
)
));
echo $content;
The render result will be
<html>
<head>
</head>
<body>
<img src="htttp://github.com/logo.jpg" alt="Github Logo"/>
</body>
</html>
<img tal:attributes="src data/src; alt data/title"/>
The img src and alt attributes will be replaced by the data['src'] value and data['title'] value. The multiple attributes use ";" to separate.
<span tal:content="data/title">This content will be replaced after rendered. </span>
<tr tal:repeat="product products" tal:content="product/title">This content will be replaced by product/title after rendered. </tr>
If the count of products is N, there will be N tr lines.
<div tal:condition="product/isPromote" tal:content="product/discount">If product/isPromote is false, this block will be removed from the dom. </div>
tal:condition
likes if
in php.
<div tal:replace="123">This entire DIV will be replaced with '123'(not the inner text). </div>