1、模板编译后缓存。
前期开发调试总是不会及时更新修改,参照网上的方法改了template,让框架根据配置来灵活判断是否生成缓存。
end.这方法毕竟不是框架的,不知道是不是长久之计,想问问tp5这方面是怎么解决的。
2、被继承的模板 {include file=“t1" /} ,t1中的{block}不会被解析。
这是tp3的include解析:
protected function parseInclude($content, $extend = true) {
// 解析继承
if($extend)
$content = $this->parseExtend($content);
……
}这是tp5的include解析:private function parseInclude(&$content)
{
$regex = $this->getRegex('include');
$func = function ($template) use (&$func, &$regex, &$content) {
if (preg_match_all($regex, $template, $matches, PREG_SET_ORDER)) {
foreach ($matches as $match) {
$array = $this->parseAttr($match[0]);
$file = $array['file'];
unset($array['file']);
// 分析模板文件名并读取内容
$parseStr = $this->parseTemplateName($file);
foreach ($array as $k => $v) {
// 以$开头字符串转换成模板变量
if (0 === strpos($v, '$')) {
$v = $this->get(substr($v, 1));
}
$parseStr = str_replace('[' . $k . ']', $v, $parseStr);
}
$content = str_replace($match[0], $parseStr, $content);
// 再次对包含文件进行模板分析
$func($parseStr);
}
unset($matches);
}
};
// 替换模板中的include标签
$func($content);
return;
}可以看到tp5这里是没有对include的内容进行block的解析的。不知道是不是tp5有意而为之,但是这样在功能上就有限制了。
关于这个问题在函数中加入$this->parseExtend($content);就可以解决。
private function parseInclude(&$content)
{
…………
// 再次对包含文件进行模板分析
$this->parseExtend($content);
$func($parseStr);
…………
}但是我觉得tp5做了这么久了,应该不会没有注意到这个问题,同样的,是特意这样做的吗?或者还想问问大家,是不是tp5在这个问题上有其他解决办法呢?
最佳答案