Puja v1.1
Puja is a lightweight, flexible and easy PHP template engine. Inspired in django, Puja also support validate template syntax!, (*1)
Install:
, (*2)
composer require jinnguyen/puja-template
require '/path/to/vendor/autoload.php';
class CustomFilter extends \Puja\Template\Lexer\Filter\FilterAbstract
{
public function dateFilter($var, $args) {
return abs($var);
}
}
class CustomTag extends \Puja\Template\Lexer\Tag\TagAbstract
{
public function cssTag($arg)
{
return '';
}
public function javascriptTag($arg)
{
return '';
}
}
$puja = new \Puja\Template\Template(array(
/**
* Folders that contain template files and the last folder is higher priority
* Ex: templateDirs = ['/path/to/template/Default', '/path/to/template/2017'] and file test.tpl is in both /path/to/template/Default and /path/to/template/2017.
* Then /path/to/template/2017/test.tpl (the last folder) will be used
*/
'templateDirs' => [
__DIR__ . '/templates/Default',
__DIR__ . '/templates/2017'
],
/**
* Cached folder contains generated-files by Puja-Template
*/
'cacheDir' => __DIR__ . '/cache/',
/** Cache level, current we just support 3 levels
* 0: no cache, (Puja-Template will re-generate every time)
* 1: smart cache, (Puja-Template generate in the first time and ONLY re-genertate when file template (.tpl) has changed
* 2: hard cache ( Puja-Template never re-generate files until genereted file has been deleted.)
*/
'cacheLevel' => 0,
/**
* customTag class, default: NULL
*/
'customTag' => 'CustomTag',
/**
* customFilter class, default: NULL
*/
'customFilter' => 'CustomFilter',
/**
* On/off mode debug
*/
'debug' => true,
));
Some of Puja-Template's features:
* VALIDATE TEMPLATE SYNTAX
* it is extremely fast
* no template parsing overhead, only compiles once.
* it is smart about recompiling only the template files that have changed.
* unlimited nesting of sections, conditionals, etc.
* built-in caching of template output.
* Smart access variable value, ex: {{ a.b }} will access like $a->b if $a is a obj, and $a['b'] if $a is array., (*3)
Validate syntax:
Puja support validate syntax before the parser run compiler. This will helpfull for you to write template syntax., (*4)
Bug list:
https://github.com/jinnguyen/puja/issues?page=1&state=open, (*5)
Example:
file template: index.tpl:, (*6)
{% extends master.tpl %}
{% block body %}
Hello, {{ a }
Welcome you go to Puja template examples
{% endblock %}
The result will be:, (*7)

Puja only run debug when mode debug is enabled
** We recommend you should only enable mode debug when your app is in develop. And disable it when your app go to production. It will save a lot time to template engine parser.
Basic API Usage:
- template file: index.tpl, (*8)
Hello {{ username }},
Welcome you go to the very first exmplate of Puja template.
$data = array(
'username'=>'Jin Nguyen',
);
$tpl->parse($template_file = 'index.tpl', $data);
The result will show:, (*9)
Hello Jin Nguyen,
Welcome you go to the very first exmplate of Puja template.
See User's guide for full information.
, (*10)
Template Inheritance:
- master.tpl:, (*11)
==== Start Master ===
{% block body %}Master Body{% endblock body %}
{% block javascript %}Master javascript{% endblock javascript %}
==== End Master ====
{% block javascript %}Index javascript [{{ block.supper }}]{% endblock %}
{% block body %}Index Body{% endblock %}
And the result will be:, (*12)
==== Start Master ===
Index Body [Master Body]
Index javascript
==== End Master ====
more detail >> , (*13)