zblogphp如何使用模板引擎Template类如何使用

Template类的构造函数没有任何参数,所有的功能都是通过调用其成员函数实现的。

$template = new Template();
// 设置模板标签.zblog内置的模板变量和sidebar都在该函数绑定
$template->MakeTemplateTags();
// 设置主题(主题id,也是主题的目录名)
$template->theme = 'theme_id';

/*
* 设置模板名称
* 如 'index' 将渲染设定主题的根目录下的 `template/index.php` 模板文件
* 如 'list/category' 将渲染theme_id主题的根目录下的 `template/list/category.php` 模板文件
*/ 
if ($template->hasTemplate($templateName)) {
    $template->SetTemplate($templateName);
} else {
    $template->SetTemplate('index');
}

// 还可以指定主题下模板文件的存放路径(默认template)
// 将渲染设定主题的根目录下的 `custom_dir/` 子目录下的文件
$template->template_dirname = 'custom_dir';

/*
* 设置编译输出目录
* 该成员必须调用,且应该在为`$template->theme`赋值后再调用
* 如果不传参或参数为空,将设置编译目录为相对服务器根目录的:
* 'zblog/zb_users/cache/compiled/{$theme}/'
* 如果自定义了成员template_dirname(不为空或'template'),目录为:
* 'zblog/zb_users/cache/compiled/$theme__$template_dirname/'
* 除非插件/主题有一套与前台模板无关的页面需要使用模板引擎渲染并展示(比如用作管理后台/用户中心),否则实在是没有理由改动它
*/
$template->SetPath();

// 还可以结合pagebar使用
$pagebar = new Pagebar($route);
$template->SetTags('pagebar', $pagebar);

// 最后输出即可(如果想要使用系统变量 必须先调用MakeTemplateTags())
$template->Display();

除了基本的使用,还有模板的判断、获取、编译等函数

// 返回当前要调用的已经编译好的模板文件的路径
function GetTemplate($name) {}
// 设置当前要调用的已经编译好的模板文件的名称(不存在直接报错)
function SetTemplate($templatename) {}
// 判断编译模板文件是否存在 ,若调用SetTemplate应该先调用它
function HasTemplate($name) {}

/*
* 编译模板有以下函数,无需关心内部逻辑
* 以上配置完成后,调用'LoadTemplates() && BuildTemplate()'可以清空已编译的模板,并重新编译
* 
*/
LoadTemplates()
BuildTemplate()
addNonexistentTags()
CompileFiles()
CompileFile($content)

实际上我们还需要判断模板是否更新,并自动更新编译缓存。
这些逻辑在ZBlogPHP类中都已经实现了,实现方法为'CheckTemplate()',它在其Load()函数内被调用,会判断更新并决定是否重新编译。
我们要做的不是新建一个Template对象。而是在给ZBlogPHP对象设置theme成员后且调用Load()之前就操作其template成员变量(最晚挂载到'Filter_Plugin_Zbp_Load'),这样就能实现模板的自动更新啦。
当然了,如果模板相关操作不得不在ZBlogPHP对象设置theme成员之前或调用Load()之后,或者不能挂载到任何钩子处,那就再调用一次CheckTemplate()函数吧。

posted @ 2022-11-19 21:09  钰琪  阅读(204)  评论(0编辑  收藏  举报