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

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

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

本文的重点是详细介绍ImperialCMS专用呼叫标签eshowzt与标签模板应用代码不兼容的解决方案。通过修改ImperialCMS源代码,解决字段名和字段码,完成特殊调用标签eshowzt,解决标签模板PHP编码的功能,提高程序流程的协调能力。有必要让你的朋友参考一下。

本文介绍了英制CMS专用呼叫标签eshowzt与标签模板应用代码不兼容的解决方案。它涉及到对帝国CMS源代码的修改。分享给大家参考。实际上是这样的:

一、困难:

在新项目的开发设计中,首页必须调用专题,专题已经升级为“专题自定义字段名”:subtitle(ftitle),频道名中必须调用一个简洁的副标题。

应用[主题呼叫标签]eshowzt并设置匹配的标签模板,并启用标签模板list.var部分中的[应用代码]。编写以下代码:

复制以下代码:$listtemp='
';

主题调用标签写入后,更新主页,发现启用的[应用代码]无效,即在应用了[主题调用标签]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的分析,可以发现涵洞并没有接受和解析【应用代码】的字段名,这样就可以理解为什么【主题调用标签】eshowzt即使标签模板已经启用了【应用代码】也没有进行编码分析了!

三。解决方案:[/s2/]

1.流程:添加【应用代码】的字段名,在e/class/t_functions.php的网页下查找函数sys_ShowZtData,在“获取模板”部分添加$docode的字段名:

复制代码代码如下://GetTemplate
$
$docode=$tr[docode];//增加一项区分标签模板是否为应用程序代码。

如下图所示:

该过程可以获得指示它是否是应用代码的信息内容。

2.在过程1中,在e/class/t_functions.php网页的函数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_replaceshowclassesvars:

实际编码以下:

复制代码编码以下:////**************自定更换频道导航栏标签********************//
functionuser_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;
}实际代码如下:

复制代码如下:///*************************/[/br/$subnews=0,$docode){
global$public_r,$class_r;
//通道连接
if($ecms==1)
{
$classURL=sys_returnbqztname($r);
$r['classname']=$r['ztname'];
$r['classid']=$r['ztid'];
$r['ztimg']=$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[newsul]。"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);
//no.
$listtemp=str_replace("[-no-]",$no,$listtemp);
//Statr
if($docode==1)fordocode=1
{
$listtemp=stripes($listtemp)的条件;
eval($listtemp);
}
/end
以docode=1(执行程序代码)为条件返回$listtemp
}

三步之后,解决问题!

PS:这里关键的编码变化是$docode的判别和编码。如果ReplaceShowClassVars函数也添加了匹配的$docode,则解决:

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

也能解决难点,但充分考虑到其他网页调用该函数的情况,所以应用自定义函数user_ReplaceShowClassVars相对不容易危及其他程序进程的运行。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/772756.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-03
下一篇 2022-05-03

发表评论

登录后才能评论

评论列表(0条)

保存