建站帮助

诚信合作, 高质专业!

织梦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自定义方法新的,一起加油!

我要收藏
点个赞吧

相关阅读

本月热门

精选推荐

在线客服

扫一扫,关注我们

扫一扫,关注我们