帝國CMS專題調(diào)用標簽eshowzt不支持標簽模板使用程序代碼的解決方法

本文講述了帝國CMS專題調(diào)用標簽eshowzt不支持標簽模板使用程序代碼的解決方法。涉及針對帝國CMS源碼的修改。分享給大家供大家參考,具體如下:
一、問題:
在項目開發(fā)中需要在首頁調(diào)用專題,且專題增加了“專題自定義字段”:副標題(ftitle),需要在欄目名調(diào)用出比較簡短的副標題。
使用【專題調(diào)用標簽】eshowzt并設置對應的標簽模板,在標簽模板的list.var部分勾選【使用程序代碼】,編寫代碼如下:
<li><a href="[!--classurl--]">'.ReturnZtAddField('[!--classid--]','ftitle').'</a></li>
';
專題調(diào)用標簽寫好后刷新首頁,發(fā)現(xiàn)勾選【使用程序代碼】無效,就是說使用【專題調(diào)用標簽】eshowzt的時候list.var部分無法使用程序代碼。
二、分析:
查看帝國CMS源碼,找到專題調(diào)用標簽eshowzt對應的函數(shù):sys_ShowZtData(位于e/class/t_functions.php約1860行)
分析源碼找到如下代碼:
$tr=sys_ReturnBqTemp($tempid);
此處獲取模板ID號對應的模板相關變量,包括:模板名(tempname),頁面模板內(nèi)容(temptext)、列表內(nèi)容模板(list.var)(listvar)以及是否使用程序代碼(docode)等。
注意:此處的關鍵就在于是否使用程序代碼(docode)字段!
再找到
$repvar=ReplaceShowClassVars($no,$listvar,$r,$num,1,$subnews);
分析函數(shù)ReplaceShowClassVars可以發(fā)現(xiàn)該函數(shù)并未接受與處理【使用程序代碼】字段docode,至此就明白了為什么【專題調(diào)用標簽】eshowzt在標簽模板勾選【使用程序代碼】的情況下并未作出代碼解析的原因!
三、解決方法:
步驟1. 新增【使用程序代碼】字段,在e/class/t_functions.php頁面下找到函數(shù)function sys_ShowZtData,并在“取得模板”部分添加$docode字段:
$tr=sys_ReturnBqTemp($tempid);
$docode=$tr[docode];//新增項,判斷標簽模板是否使用程序代碼
如下圖所示:
該步驟可獲取是否使用程序代碼的標志信息。
步驟2. 還是在步驟1中e/class/t_functions.php頁面的函數(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:仔細對比就能看出,此處的自定義函數(shù)比原先的函數(shù)多了一個針對$docode的接收處理。
步驟3. 在e/class/t_functions.php頁面底部添加自定義函數(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);
//欄目簡介
$listtemp=str_replace("[!--intro--]",nl2br($r[intro]),$listtemp);
//記錄數(shù)
$listtemp=str_replace("[!--num--]",$num,$listtemp);
//序號
$listtemp=str_replace("[!--no--]",$no,$listtemp);
//針對docode=1(執(zhí)行程序代碼)的情況statr
if($docode==1)
{
$listtemp=stripSlashes($listtemp);
eval($listtemp);
}
//針對docode=1(執(zhí)行程序代碼)的情況end
return $listtemp;
}
經(jīng)過上述三步,問題解決!
PS:這里主要修改的代碼就是針對$docode的判斷與執(zhí)行代碼,如果將ReplaceShowClassVars函數(shù)也添加對應的$docode處理:
{
$listtemp=stripSlashes($listtemp);
eval($listtemp);
}
也能解決問題,但考慮到還有其他頁面調(diào)用該函數(shù)的情況,因此使用自定義函數(shù)user_ReplaceShowClassVars相對來說不會影響其他程序的運行。
相關文章
- 這篇文章主要為大家介紹了帝國CMS列表頁中獲取當前信息所屬專題名稱的方法,通過SQL查詢與判斷再結(jié)合帝國CMS內(nèi)置的數(shù)組變量獲取到專題名稱,是非常實用的技巧,需要的朋友可以2014-12-01
帝國cms 7.0 調(diào)用本信息所屬專題,專題帶鏈接
帝國cms在7.0 以前 調(diào)用本信息所屬專題,系統(tǒng)本身是沒有這樣的功能,需要自己寫插件或者代碼2013-12-12- 使用帝國cms默認的調(diào)用不了推薦信息,就直接寫個sql來調(diào)用吧,這里分享下, 方便需要的朋友2013-12-12
帝國CMS結(jié)合項提示“您來自的鏈接不存在”的解決方法
這篇文章主要為大家介紹了帝國CMS結(jié)合項提示“您來自的鏈接不存在”的解決方法,涉及針對結(jié)合項相關代碼的修改與使用以及對應的注意事項,需要的朋友可以參考下2014-12-15帝國CMS單次只能上傳20個文件問題的解決方法(max_file_uploads)
最近在使用帝國CMS的時候,發(fā)現(xiàn)了一個問題:在上傳文件或圖片的時候,一次性上傳不能超過20個,如果超過20個也只能成功20個,其余的均失敗2014-07-23- 這篇文章主要為大家介紹了帝國CMS自動截取簡介出現(xiàn)亂碼的解決方法,需要的朋友可以參考下2014-07-09
- 這篇文章主要為大家介紹了帝國cms截圖出現(xiàn)黑邊的解決方法,需要的朋友可以參考下2014-07-03
帝國cms 從6.6升級到7.0 Multiple primary key defined解決方法
今天將帝國cms 從6.6升級到7.0 出現(xiàn)Multiple primary key defined錯誤,這里分享下解決方法2013-12-13帝國cms7.0 數(shù)據(jù)更新批量生成時出錯的解決方法
這篇文章主要為大家介紹下帝國cms7.0 數(shù)據(jù)更新批量生成時出錯的解決方法,需要的朋友可以參考下2013-12-13帝國cms升級到7.0 出現(xiàn)Unknown column 'checked' in 'field list' 錯誤
帝國cms從6.6升級到帝國cms7.0,一路正常,但是當我進入后臺點管理信息以后就出現(xiàn)了Unknown column 'checked' in 'field list' 錯誤,原來是7.0中已經(jīng)取消了checked字段,2013-12-13