使用Smarty遇'unrecognized tag 'extends''语法错误求助
解决Smarty中"unrecognized tag 'extends'"语法错误的方案
嘿,我来帮你排查这个问题——遇到unrecognized tag 'extends'这个错误,大概率是版本或者写法的问题,咱们一步步来解决:
首先排查Smarty版本
{extends}和{block}这两个模板继承标签是Smarty 3及以上版本才引入的,如果你的项目用的是Smarty 2.x,那肯定会报这个错,因为Smarty 2根本不支持这个语法。
你可以在PHP代码里加一行打印版本的代码,确认一下:
require ("../../libs/Smarty/Smarty.class.php"); echo Smarty::SMARTY_VERSION; // 打印当前Smarty版本 $smarty = new Smarty(); // ... 其他配置
如果输出是2.x的话,有两个选择:
- 升级到Smarty 3或4(推荐,毕竟新版本功能更全,维护也更好)
- 改用Smarty 2的模板复用方式,比如用
{include}标签嵌套模板,替代继承逻辑
如果是Smarty 3+版本,检查模板写法
如果版本没问题,那大概率是模板的写法不符合要求:
{extends}必须放在模板的最开头:模板文件里不能有任何内容(包括空格、换行、HTML注释)在{extends}标签前面,比如你的chefsquad_rice.tpl应该是这样的:
{extends file="default_shirts.tpl"} {block name="chicken"} <!-- 这里写你要填充到父模板的内容 --> {/block}
要是前面有空格或者其他字符,Smarty会识别不了extends标签。
- 确认父模板路径正确:虽然错误提示是标签不识别,但有时候路径错误也可能导致奇怪的问题。你可以试试用绝对路径指定父模板,比如:
{extends file="../../templates/default_shirts.tpl"}
或者确保default_shirts.tpl确实在你设置的template_dir(也就是../../templates)目录下。
最后检查安全配置(概率较低)
如果你的Smarty开启了安全模式($smarty->security = true;),那可能是extends标签被禁用了。可以在配置里添加允许的标签:
$smarty->security = true; $smarty->security_settings['allowed_tags'][] = 'extends'; $smarty->security_settings['allowed_tags'][] = 'block';
按照上面的步骤排查,应该就能解决这个问题了。
内容的提问来源于stack exchange,提问作者Richard D
相关产品推荐
相关产品推荐

