警惕dede模版文件导致无法正常解析标签的问题

有时候dede的模版文件可能导致模版标签被错误的认识,下面是我在文章模版中添加的php代码:

            {dede:php}
            global $dsql;
            $categoryname =  $this->Fields\['codecategory'\];
            echo "$categoryname";
......

我的目的是想在php代码中使用文章的某个字段的值,这种用法显然是错误的,但是我并没在意,最多得不到这个值嘛.

但是事情没这么简单,我发现发表文章的时候,无法生成静态页面了。经过跟踪代码发现问题出在\include\helpers\channelunit.helper.php的MakeOneTag方法中。

在MakeOneTag中,末尾的这几行代码出了问题:

if(in_array($tagname,$alltags))
{
    $filename = DEDEINC.'/taglib/'.$tagname.'.lib.php';
    include_once($filename);
    $funcname = 'lib_'.$tagname;
    $dtp->Assign($tagid,$funcname($ctag,$refObj));
}

其中$tagname打印出来的值是php,于是因为include_once找不到相应的文件而出现不能继续执行的情况。

一开始根本不知道是由于模版文件造成的。后来实在找不出原因,才尝试着将模版文件中的一些可疑用法去掉,结果在删掉$categoryname =  $``this``->Fields[``'codecategory'``];之后居然正常了。

这种问题真的不好排查,所以记录下来。