建站技術網專注分享網站建設技術,網站建設教程,真正幫你學會做網站技術,輕松解決網站建設過程中遇到的常見問題,為廣大站長服務。 網站地圖 | 收藏本站 | 訂閱
域名投資,就來找米網,認準網址:www.zhaomi.cc 專業仿站,就到仿站網:www.fangzhan.org
  站內公告: ·帝國cms教程內容已更新,歡迎關注     ·建站技術網采用阿里云服務器,備案已通    
您當前的位置:建站技術網 > cms教程 > 帝國cms教程

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

時間:2019-04-30 23:54:30  來源:網絡收集  整理: 建站技術網 www.txwlqq.com     點擊:0次

本文講述了帝國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不支持標簽模板使用程序代碼的解決方法
文章網址:http://www.txwlqq.com/cmsJiaocheng/diguocms/10560.html
上一篇:帝國cms模板導入導出及模板組功能介紹
下一篇:帝國CMS中robots.txt文件用法
來頂一下
返回首頁
返回首頁
相關文章
    無相關信息
推薦資訊
如何通過SEO優化排名賺錢?SEO賺錢方法
如何通過SEO優化排名賺
seo優化教程:網站seo內容優化
seo優化教程:網站seo
SEO細節:企業SEO如何快速為新站做出效果
SEO細節:企業SEO如何
電商技術將如何發展?2018年有這五個大膽預測
電商技術將如何發展?
最新文章
欄目更新
欄目熱門
成人黄色