jinnguyen / puja-template
Puja-Template is a lightweight, flexible and easy PHP template engine. Inspired in django, Puja also support validate template syntax!
Requires
Requires (Dev)
None
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is not auto-updated.
Last update: 2026-09-17 06:09:15 UTC
README
Puja is a lightweight, flexible and easy PHP template engine. Inspired in django, Puja also support validate template syntax!
Install:
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 '<style src="' . $arg . '" />';
}
public function javascriptTag($arg)
{
return '<style src="' . $arg . '" />';
}
}
$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.
Validate syntax:
Puja support validate syntax before the parser run compiler. This will helpfull for you to write template syntax.
Bug list: https://github.com/jinnguyen/puja/issues?page=1&state=open
Example: file template: index.tpl:
{% extends master.tpl %}
{% block body %}
Hello, {{ a }
Welcome you go to Puja template examples
{% endblock %}
The result will be:
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
Hello {{ username }},
Welcome you go to the very first exmplate of Puja template.
- php file: index.php
$data = array( 'username'=>'Jin Nguyen', ); $tpl->parse($template_file = 'index.tpl', $data);
The result will show:
Hello Jin Nguyen, Welcome you go to the very first exmplate of Puja template.
See User's guide for full information.
Template Inheritance:
- master.tpl:
==== Start Master ===
{% block body %}Master Body{% endblock body %}
{% block javascript %}Master javascript{% endblock javascript %}
==== End Master ====
- index.tpl
{% block javascript %}Index javascript [{{ block.supper }}]{% endblock %}
{% block body %}Index Body{% endblock %}
And the result will be:
==== Start Master === Index Body [Master Body] Index javascript ==== End Master ====