4.添加解析自己的模板的行为类(这个和thinkphp3.0默认的ParseTemplateBehavior.class.php类似)
class ParseContentBehavior extends Behavior {
protected $options = array(
// 布局设置
'TMPL_ENGINE_TYPE' => 'Ey', // 默认模板引擎 以下设置仅对使用Ey模板引擎有效
'TMPL_CACHFILE_SUFFIX' => '.php', // 默认模板缓存后缀
'TMPL_DENY_FUNC_LIST' => 'echo,exit', // 模板引擎禁用函数
'TMPL_DENY_PHP' =>false, // 默认模板引擎是否禁用PHP原生代码
'TMPL_L_DELIM' => '{', // 模板引擎普通标签开始标记
'TMPL_R_DELIM' => '}', // 模板引擎普通标签结束标记
'TMPL_VAR_IDENTIFY' => 'array', // 模板变量识别。留空自动判断,参数为'obj'则表示对象
'TMPL_STRIP_SPACE' => true, // 是否去除模板文件里面的html空格与换行
'TMPL_CACHE_ON' => true, // 是否开启模板编译缓存,设为false则每次都会重新编译
'TMPL_CACHE_TIME' => 0, // 模板缓存有效期 0 为永久,(以数字为值,单位:秒)
'TMPL_LAYOUT_ITEM' => '{__CONTENT__}', // 布局模板的内容替换标识
'LAYOUT_ON' => false, // 是否启用布局
'LAYOUT_NAME' => 'layout', // 当前布局名称 默认为layout
// Think模板引擎标签库相关设定
'TAGLIB_BEGIN' => '<', // 标签库标签开始标记
'TAGLIB_END' => '>', // 标签库标签结束标记
'TAGLIB_LOAD' => true, // 是否使用内置标签库之外的其它标签库,默认自动检测
'TAGLIB_BUILD_IN' => 'cx', // 内置标签库名称(标签使用不必指定标签库名称),以逗号分隔 注意解析顺序
'TAGLIB_PRE_LOAD' => '', // 需要额外加载的标签库(须指定标签库名称),多个以逗号分隔
);
public function run(&$_data){
$engine = strtolower(C('TMPL_ENGINE_TYPE'));
//这个地方要判断是否存在文件
if('think'==$engine){
if($this->checkCache($_data['file'])) { // 缓存有效
// 分解变量并载入模板缓存
extract($_data['var'], EXTR_OVERWRITE);
//载入模版缓存文件
include C('CACHE_PATH').md5($_data['file']).C('TMPL_CACHFILE_SUFFIX');
}else{
$tpl = Think::instance('ThinkTemplate');
// 编译并加载模板文件
$tpl->fetch($_data['file'],$_data['var']);
}
} else if('ey' == $engine) {
if( !$_data['cacheFlag'] ){
$class = 'Template'.ucwords($engine);
if(is_file(CORE_PATH.'Driver/Template/'.$class.'.class.php')) {
// 内置驱动
$path = CORE_PATH;
} else {
// 扩展驱动
$path = EXTEND_PATH;
}
if(require_cache($path.'Driver/Template/'.$class.'.class.php')) {
$tpl = new $class;
$tpl->fetch('',$_data['content'],$_data['var']);
} else { // 类没有定义
throw_exception(L('_NOT_SUPPERT_').': ' . $class);
}
}else{
//操作
$cache_flag = true;
if(isset($_data['content'])){ //如果指定内容
if ($_data['file']){ //指定缓存KEY
$_data['file'] = 'custom_' . $_data['file'];
} else { //未指定缓存KEY,则不缓存
$cache_flag = false;
}
} else {
if (is_file($_data['file'])){ //如果指定文件存在
$_data['content'] = file_get_contents($_data['file']);
} else {
throw_exception(L('_TEMPLATE_NOT_EXIST_').'['.$_data['file'].']');
}
}
//这里文件和内容一定有一个存在,否则在之前就会有异常了
if($cache_flag && $this->checkCache($_data['file'],$_data['content']) ) { // 缓存有效
// 分解变量并载入模板缓存
extract($_data['var'], EXTR_OVERWRITE);
//载入模版缓存文件
include C('CACHE_PATH').md5($_data['file']).C('TMPL_CACHFILE_SUFFIX');
} else {
$class = 'Template'.ucwords($engine);
if(is_file(CORE_PATH.'Driver/Template/'.$class.'.class.php')) {
// 内置驱动
$path = CORE_PATH;
} else {
// 扩展驱动
$path = EXTEND_PATH;
}
if(require_cache($path.'Driver/Template/'.$class.'.class.php')) {
$tpl = new $class;
$tpl->fetch($_data['file'],$_data['content'],$_data['var']);
} else { // 类没有定义
throw_exception(L('_NOT_SUPPERT_').': ' . $class);
}
}
}
} else {
//调用第三方模板引擎解析和输出
$class = 'Template'.ucwords($engine);
if(is_file(CORE_PATH.'Driver/Template/'.$class.'.class.php')) {
// 内置驱动
$path = CORE_PATH;
}else{ // 扩展驱动
$path = EXTEND_PATH;
}
if(require_cache($path.'Driver/Template/'.$class.'.class.php')) {
$tpl = new $class;
$tpl->fetch($_data['file'],$_data['var']);
}else { // 类没有定义
throw_exception(L('_NOT_SUPPERT_').': ' . $class);
}
}
}
protected function checkCache($tmplTemplateFile = '',$tmplTemplateContent='') {
if (!C('TMPL_CACHE_ON'))// 优先对配置设定检测
return false;
//缓存文件名
$tmplCacheFile = C('CACHE_PATH').md5($tmplTemplateFile).C('TMPL_CACHFILE_SUFFIX');
if(!is_file($tmplCacheFile)){
return false;
}elseif (filemtime($tmplTemplateFile) > filemtime($tmplCacheFile)) {
// 模板文件如果有更新则缓存需要更新
return false;
}elseif (C('TMPL_CACHE_TIME') != 0 && time() > filemtime($tmplCacheFile)+C('TMPL_CACHE_TIME')) {
// 缓存是否在有效期
return false;
}
// 开启布局模板
if(C('LAYOUT_ON')) {
$layoutFile = THEME_PATH.C('LAYOUT_NAME').C('TMPL_TEMPLATE_SUFFIX');
if(filemtime($layoutFile) > filemtime($tmplCacheFile)) {
return false;
}
}
// 缓存有效
return true;
}
}
pbootcms模板自动生成当前页面二维码二维码生成标签 {pboot:qrcode string=***} 使用说明: 用于生成对应文本的二维码图片,可用于产品列表页或详情页为每个
pbootcms模板中那些url怎么调用1、当前站点网址: {pboot:httpurl} 使用说明: 自适应获取当前访问网址,主要用于需要使用网站路径前缀的情况,如输
PbootCMS设置当前站点模板,模板子目录,黑白名单,敏感词过滤后台操作更换模板路径: 【基础内容】-【站点信息】-【站点模板】 配置后台模板子目录 【全局配置】-【配置参数
pbootcms公共标签调用1、模板文件嵌套引用 {include file=***.html} 使用说明: 文章来源:html5模板网 html5code.net 来源:html5模板网 html5code.net 可
PHP 使用二进制保存用户状态的实例下面小编就为大家分享一篇PHP 使用二进制保存用户状态的实例,具有很好的参考价值,希望对大家有所帮助。一起跟
Laravel框架之blade模板新手入门教程及小技巧Blade 是 laravel 提供的一个简单强大的模板引擎。下面这篇文章主要给大家介绍了关于Laravel框架之blade模板新手的入门