jinnguyen/puja-template

Puja-Template 是一个轻量级、灵活且易于使用的 PHP 模板引擎。它受到 Django 的启发,Puja 还支持验证模板语法!

v1.0.2 2017-11-22 11:05 UTC

This package is not auto-updated.

Last update: 2024-09-18 20:24:52 UTC


README

Puja 是一个轻量级、灵活且易于使用的 PHP 模板引擎。它受到 Django 的启发,Puja 还支持验证模板语法!

安装

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,
));

Puja-Template 的部分功能:

  • 验证模板语法
  • 它非常快
  • 没有模板解析开销,只编译一次。
  • 它非常智能,只重新编译已更改的模板文件。
  • 无限嵌套部分、条件等。
  • 内置模板输出缓存。
  • 智能访问变量值,例如:{{ a.b }} 将像 $a->b 一样访问,如果 $a 是对象,如果是数组,则像 $a['b']。

验证语法
Puja 在解析器运行编译器之前支持验证语法。这有助于您编写模板语法。

错误列表:https://github.com/jinnguyen/puja/issues?page=1&state=open

示例:文件模板:index.tpl

{% extends master.tpl %}
{% block body %}
	Hello, {{ a }
	Welcome you go to Puja template examples
{% endblock %}

结果将是

Puja 仅在 debug 模式启用时运行调试
** 我们建议您只在应用程序处于开发阶段时启用 debug 模式。当您的应用程序进入生产阶段时,请禁用它。这将节省模板引擎解析器大量时间。

基本 API 使用方法:

  • 模板文件:index.tpl
Hello {{ username }},
Welcome you go to the very first exmplate of Puja template.
  • PHP 文件:index.php
  $data = array(
  	'username'=>'Jin Nguyen',
  );
  $tpl->parse($template_file = 'index.tpl', $data);

结果将显示

Hello Jin Nguyen,
Welcome you go to the very first exmplate of Puja template.

有关更多信息,请参阅 用户指南

模板继承:

  • 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 %}

结果将是

==== Start Master ===
Index Body [Master Body]
Index javascript
==== End Master ====

更多详情 >>