jinnguyen / puja-template
Puja-Template is a lightweight, flexible and easy PHP template engine. Inspired in django, Puja also support validate template syntax!
Requires
This package is not auto-updated.
Last update: 2025-02-19 22:34:24 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 ====