可按Ctrl+D收藏 蚂蚁资源网

蚂蚁资源网

帝国CMS专题调用标签eshowzt不支持标签模板使用程序代码的解决方法

  • 时间:2020-11-27 14:45 编辑:张卫平 来源:蚂蚁资源网 阅读:218
  • 扫一扫,手机访问
摘要:本文围绕帝国CMS   专题   解决方法  讲述关于帝国CMS专题调用标签eshowzt不支持标签模板使用程序代码的解决方法的相关知识,精彩详情内容请仔细阅读以下内容。感谢支持!
大家好,今小编要介绍的是关于帝国CMS专题调用标签eshowzt不支持标签模板使用程序代码的解决方法的相关内容,多方面分析说明,感兴趣朋友的可以参考学习。

关键词:帝国CMS   专题   解决方法  

本文讲述了帝国CMS专题调用标签eshowzt不支持标签模板使用程序代码的解决方法。涉及针对帝国CMS源码的修改。分享给大家供大家参考,具体如下:

一、问题:

在项目开发中需要在首页调用专题,且专题增加了“专题自定义字段”:副标题(ftitle),需要在栏目名调用出比较简短的副标题。

使用【专题调用标签】eshowzt并设置对应的标签模板,在标签模板的list.var部分勾选【使用程序代码】,编写代码如下:

复制代码代码如下:$listtemp='
<li><a href="[!--classurl--]">'.ReturnZtAddField('[!--classid--]','ftitle').'</a></li>
';

专题调用标签写好后刷新首页,发现勾选【使用程序代码】无效,就是说使用【专题调用标签】eshowzt的时候list.var部分无法使用程序代码。

二、分析:

查看帝国CMS源码,找到专题调用标签eshowzt对应的函数:sys_ShowZtData(位于e/class/t_functions.php约1860行)

析源码找到如下代码:

复制代码代码如下://取得模板
$tr=sys_ReturnBqTemp($tempid);

此处获取模板ID号对应的模板相关变量,包括:模板名(tempname),页面模板内容(temptext)、列表内容模板(list.var)(listvar)以及是否使用程序代码(docode)等。

注意:此处的关键就在于是否使用程序代码(docode)字段!

再找到

复制代码代码如下://替换列表变量
$repvar=ReplaceShowClassVars($no,$listvar,$r,$num,1,$subnews);

分析函数ReplaceShowClassVars可以发现该函数并未接受与处理【使用程序代码】字段docode,至此就明白了为什么【专题调用标签】eshowzt在标签模板勾选【使用程序代码】的情况下并未作出代码解析的原因!

三、解决方法:

步骤1. 新增【使用程序代码】字段,在e/class/t_functions.php页面下找到函数function sys_ShowZtData,并在“取得模板”部分添加$docode字段:

复制代码代码如下://取得模板
$tr=sys_ReturnBqTemp($tempid);
$docode=$tr[docode];//新增项,判断标签模板是否使用程序代码

如下图所示:

该步骤可获取是否使用程序代码的标志信息。

步骤2. 还是在步骤1中e/class/t_functions.php页面的函数function sys_ShowZtData中,修改“替换列表变量”部分为自定义函数user_ReplaceShowClassVars,代码如下:

复制代码代码如下://替换列表变量
//$repvar=ReplaceShowClassVars($no,$listvar,$r,$num,1,$subnews);
$repvar=user_ReplaceShowClassVars($no,$listvar,$r,$num,1,$subnews,$docode);

如下图所示:

PS:仔细对比就能看出,此处的自定义函数比原先的函数多了一个针对$docode的接收处理。

步骤3. 在e/class/t_functions.php页面底部添加自定义函数user_ReplaceShowClassVars:

具体代码如下:

复制代码代码如下:////**************自定义替换栏目导航标签********************//
function user_ReplaceShowClassVars($no,$listtemp,$r,$num,$ecms=0,$subnews=0,$docode){
global $public_r,$class_r;
//栏目链接
if($ecms==1)
{
$classurl=sys_ReturnBqZtname($r);
$r['classname']=$r['ztname'];
$r['classid']=$r['ztid'];
$r['classimg']=$r['ztimg'];
}
else
{
$classurl=sys_ReturnBqClassname($r,9);
}
if($subnews)
{
$r[intro]=sub($r[intro],0,$subnews,false);
}
$listtemp=str_replace("[!--classurl--]",$classurl,$listtemp);
//栏目名称
$listtemp=str_replace("[!--classname--]",$r[classname],$listtemp);
//栏目id
$listtemp=str_replace("[!--classid--]",$r[classid],$listtemp);
//栏目图片
if(empty($r[classimg]))
{
$r[classimg]=$public_r[newsurl]."e/data/images/notimg.gif";
}
$listtemp=str_replace("[!--classimg--]",$r[classimg],$listtemp);
//栏目简介
$listtemp=str_replace("[!--intro--]",nl2br($r[intro]),$listtemp);
//记录数
$listtemp=str_replace("[!--num--]",$num,$listtemp);
//序号
$listtemp=str_replace("[!--no--]",$no,$listtemp);
//针对docode=1(执行程序代码)的情况statr
if($docode==1)
{
$listtemp=stripSlashes($listtemp);
eval($listtemp);
}
//针对docode=1(执行程序代码)的情况end
return $listtemp;
}

经过上述三步,问题解决!

PS:这里主要修改的代码就是针对$docode的判断与执行代码,如果将ReplaceShowClassVars函数也添加对应的$docode处理:

复制代码代码如下:if($docode==1)
{
$listtemp=stripSlashes($listtemp);
eval($listtemp);
}

也能解决问题,但考虑到还有其他页面调用该函数的情况,因此使用自定义函数user_ReplaceShowClassVars相对来说不会影响其他程序的运行。


以上就是帝国CMS专题调用标签eshowzt不支持标签模板使用程序代码的解决方法的全部内容,希望可以帮助到您。感谢对蚂蚁资源网的支持。
(责任编辑:张卫平

版权声明:文章内容是蚂蚁资源网小编精心整合原创的,素材来源于互联网,如无意侵犯到您的权益,请联系网站客服核实版权信息,以便及时删除。
  • 全部评论(0)
最新发布的资讯信息
【简历/资料|内地女明星】 殷茹基本资料( YR个人简历介绍)(2020-12-06 15:19)
【简历/资料|内地女明星】 曹菁基本资料( CJ个人简历介绍)(2020-12-06 15:18)
【简历/资料|内地女明星】 王安妮基本资料( WAN个人简历介绍)(2020-12-06 15:18)
【简历/资料|内地女明星】 白琼基本资料( BQ个人简历介绍)(2020-12-06 15:17)
【简历/资料|内地女明星】 王世霞基本资料( WSX个人简历介绍)(2020-12-06 15:17)
【简历/资料|内地女明星】 宋煜基本资料( SY个人简历介绍)(2020-12-06 15:16)
【简历/资料|内地女明星】 钱增基本资料( QZ个人简历介绍)(2020-12-06 15:16)
【简历/资料|内地女明星】 胡晓黎基本资料( HXL个人简历介绍)(2020-12-06 15:15)
【简历/资料|内地女明星】 李佳慧基本资料( LJH个人简历介绍)(2020-12-06 15:15)
【简历/资料|内地女明星】 张洛嘉基本资料( ZLJ个人简历介绍)(2020-12-06 15:14)
联系客服
网站客服 联系客服
手机版

扫一扫进手机版
返回顶部