织梦DedeCMS自定义调用父级栏目ID和顶级栏目信息的方法

瓦窑源码   2020-06-27   收藏本文
织梦DedeCMS自定义调用父级栏目ID和顶级栏目信息怎么弄?最近一个DedeCMS项目涉及一些二次开发和数据调用,使用过程中避免与Phpcms v9相比较,于是难免一顿吐槽:Dede的模板数据调用没有Phpcms的调用方便、标签不够灵活、IF判断太费劲,还有就是Dede模块化没有章法等等。

今天在这里与大家分享织梦DedeCMS自定义调用父级栏目ID和顶级栏目信息的方法,对比下DedeCMS和Phpcms在栏目Catid上的差别。

我们先来了解下DedeCMS和Phpcms存放栏目信息的数据表,DedeCMS的栏目表是dede_arctype,Phpcms的栏目表为v9_category:

织梦DedeCMS自定义调用父级栏目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函数:

/**
*获取一个类目的顶级栏目
*paramstring$tid栏目ID
*actionstring$action调用动作
*returnstring
*/
if(!function_exists('gettoptype')){
functiongettoptype($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`WHEREid=$topid");
$toptypename=$row['typename'];
$toptypeurl=$topid;
if($action=='id')return$topid;
if($action=='name')return$toptypename;
if($action=='link')returnGetOneTypeUrlA($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)"/}

以上就是关于“织梦DedeCMS自定义调用父级栏目ID和顶级栏目信息的方法”所有内容,希望能够帮助到大家~

展开