日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文講述了帝國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];//新增項,判斷標簽模板是否使用程序代碼

 

如下圖所示:

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

該步驟可獲取是否使用程序代碼的標志信息。

步驟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);

 

如下圖所示:

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

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
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定