本文講述了帝國(guó)CMS專題調(diào)用標(biāo)簽eshowzt不支持標(biāo)簽?zāi)0迨褂贸绦虼a的解決方法。涉及針對(duì)帝國(guó)CMS源碼的修改。分享給大家供大家參考,具體如下:
一、問(wèn)題:
在項(xiàng)目開(kāi)發(fā)中需要在首頁(yè)調(diào)用專題,且專題增加了“專題自定義字段”:副標(biāo)題(ftitle),需要在欄目名調(diào)用出比較簡(jiǎn)短的副標(biāo)題。
使用【專題調(diào)用標(biāo)簽】eshowzt并設(shè)置對(duì)應(yīng)的標(biāo)簽?zāi)0澹跇?biāo)簽?zāi)0宓膌ist.var部分勾選【使用程序代碼】,編寫(xiě)代碼如下:
<li><a href="[!--classurl--]">'.ReturnZtAddField('[!--classid--]','ftitle').'</a></li>
';
專題調(diào)用標(biāo)簽寫(xiě)好后刷新首頁(yè),發(fā)現(xiàn)勾選【使用程序代碼】無(wú)效,就是說(shuō)使用【專題調(diào)用標(biāo)簽】eshowzt的時(shí)候list.var部分無(wú)法使用程序代碼。
二、分析:
查看帝國(guó)CMS源碼,找到專題調(diào)用標(biāo)簽eshowzt對(duì)應(yīng)的函數(shù):sys_ShowZtData(位于e/class/t_functions.php約1860行)
分析源碼找到如下代碼:
$tr=sys_ReturnBqTemp($tempid);
此處獲取模板ID號(hào)對(duì)應(yīng)的模板相關(guān)變量,包括:模板名(tempname),頁(yè)面模板內(nèi)容(temptext)、列表內(nèi)容模板(list.var)(listvar)以及是否使用程序代碼(docode)等。
注意:此處的關(guān)鍵就在于是否使用程序代碼(docode)字段!
再找到
$repvar=ReplaceShowClassVars($no,$listvar,$r,$num,1,$subnews);
分析函數(shù)ReplaceShowClassVars可以發(fā)現(xiàn)該函數(shù)并未接受與處理【使用程序代碼】字段docode,至此就明白了為什么【專題調(diào)用標(biāo)簽】eshowzt在標(biāo)簽?zāi)0骞催x【使用程序代碼】的情況下并未作出代碼解析的原因!
三、解決方法:
步驟1. 新增【使用程序代碼】字段,在e/class/t_functions.php頁(yè)面下找到函數(shù)function sys_ShowZtData,并在“取得模板”部分添加$docode字段:
$tr=sys_ReturnBqTemp($tempid);
$docode=$tr[docode];//新增項(xiàng),判斷標(biāo)簽?zāi)0迨欠袷褂贸绦虼a
如下圖所示:
該步驟可獲取是否使用程序代碼的標(biāo)志信息。
步驟2. 還是在步驟1中e/class/t_functions.php頁(yè)面的函數(shù)function sys_ShowZtData中,修改“替換列表變量”部分為自定義函數(shù)user_ReplaceShowClassVars,代碼如下:
//$repvar=ReplaceShowClassVars($no,$listvar,$r,$num,1,$subnews);
$repvar=user_ReplaceShowClassVars($no,$listvar,$r,$num,1,$subnews,$docode);
如下圖所示:
PS:仔細(xì)對(duì)比就能看出,此處的自定義函數(shù)比原先的函數(shù)多了一個(gè)針對(duì)$docode的接收處理。
步驟3. 在e/class/t_functions.php頁(yè)面底部添加自定義函數(shù)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);
//欄目簡(jiǎn)介
$listtemp=str_replace("[!--intro--]",nl2br($r[intro]),$listtemp);
//記錄數(shù)
$listtemp=str_replace("[!--num--]",$num,$listtemp);
//序號(hào)
$listtemp=str_replace("[!--no--]",$no,$listtemp);
//針對(duì)docode=1(執(zhí)行程序代碼)的情況statr
if($docode==1)
{
$listtemp=stripSlashes($listtemp);
eval($listtemp);
}
//針對(duì)docode=1(執(zhí)行程序代碼)的情況end
return $listtemp;
}
經(jīng)過(guò)上述三步,問(wèn)題解決!