建站幫助

誠信合作, 高質專業!

織夢DedeCMS自定義調用父級欄目ID和頂級欄目信息的方法

2019-08-07 14:51:14 瀏覽 我要評論

最近一個DedeCMS項目涉及一些二次開發和數據調用,使用過程中避免與Phpcms v9相比較,于是難免一頓吐槽:Dede的模板數據調用沒有Phpcms的調用方便、標簽不夠靈活、IF判斷太費勁,還有就是Dede模塊化沒有章法等等,今天CMSYOU在這里與大家分享織夢DedeCMS自定義調用父級欄目ID和頂級欄目ID的方法,對比下DedeCMS和Phpcms在欄目Catid上的差別。

我們先來了解下DedeCMS和Phpcms存放欄目信息的數據表,DedeCMS的欄目表是dede_arctype,Phpcms的欄目表為v9_category:

織夢DedeCMS自定義調用父級欄目ID和頂級欄目ID的方法

可以看出,Phpcms保存了catid、type、modelid、parentid、arrparentid、child、arrchildid,關于上下級關系列舉得很清楚、并將所有的父級和所有的子欄目集都列出來了。而DedeCMS的數據表關于父級子欄目這塊只有id(欄目ID)、reid(父級欄目ID)、topid(頂級欄目ID)。相對來說,Phpcms的數據調用便利性可見一斑。

繼續回歸主題:講解織夢DedeCMS自定義調用父級欄目ID和頂級欄目ID的方法。

在DedeCMS欄目列表頁,調用上級欄目ID:

{dede:field.reid/}

調用頂級欄目ID也有內置的方法:

{dede:field.typeid function='GetTopid(@me)'/}

涉及的GetTopid函數具體文件在include/helpers/channelunit.helper.php文件里邊。

但是如果要調用頂級欄目的名稱、鏈接等信息,則需要自定義函數了,具體方法:洗IU改include/helpers/extend.helper.php文件,在最后加入gettoptype函數:

/**

* 獲取一個類目的頂級欄目

* @param string $tid 欄目ID

* @action string $action 調用動作

* @return string

*/

if(!function_exists('gettoptype')){

function gettoptype($tid,$action){

global $dsql,$cfg_Cs;

if(!is_array($cfg_Cs)){

require_once(DEDEDATA."/cache/inc_catalog_base.inc");

}

if(!isset($cfg_Cs[$tid][0]) || $cfg_Cs[$tid][0]==0){

$topid = $tid;

}else{

$topid = GetTopid($cfg_Cs[$tid][0]);

}

$row = $dsql->GetOne("SELECT * FROM `#@__arctype` WHERE id=$topid");

$toptypename = $row['typename'];

$toptypeurl = $topid;

if($action=='id') return $topid;

if($action=='name') return $toptypename;

if($action=='link') return GetOneTypeUrlA($row);

}

}

函數定義后,就可以使用自定義的函數調用了:

DedeCMS調用頂級欄目ID:

{dede:field.typeid function="gettoptype(@me,id)"/}

DedeCMS調用頂級欄目名稱:

{dede:field.typeid function="gettoptype(@me,name)"/}

DedeCMS調用頂級欄目鏈接:

{dede:field.typeid function="gettoptype(@me,link)"/}

最后,感謝大家不時關注與督促,CMSYOU會堅持研究分享CMS自定義方法新的,一起加油!

我要收藏
點個贊吧

相關閱讀

本月熱門

精選推薦

在線客服

掃一掃,關注我們

掃一掃,關注我們
还原删除的微信朋友圈