我们使用 Dedecms 织梦开发网站时,经常会碰到需要调用当前顶级栏目名称,而织梦默认{dede:field name='typename' /} 只可以获取当前栏目的名称,而不是当前栏目顶级栏目名称。
方法一:
{dede:field.typeid runPHP='yes'} $ID = @me; $sql = SELECT * FROM `dede_arctype` WHERE id=$ID; $query = MysqL_query($sql);$row=MysqL_fetch_array($query); $relID = $row[reid]; $topID=$row[topid]; if($relID == 0) {@me = $row[typename];} else{$sql = SELECT `typename` FROM `dede_arctype` WHERE id=$topID; $query = MysqL_query($sql);$row=MysqL_fetch_array($query); @me = $row[typename];}{/dede:field.typeid}
方法二(推荐):
修改 include/helpers/extend.helper.PHP 结尾增加:
/** * 获取一个类目的顶级栏目 * @param string $tid 栏目 ID * @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 `dede_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); } }
{dede:field.typeid function=gettoptype(@me,id)/} //id {dede:field.typeid function=gettoptype(@me,name)/} //名称 {dede:field.typeid function=gettoptype(@me,link)/} //链接
方法三(推荐):
打开 include/helpers/extend.helper.PHP,添加一个函数:
/** * 获取指定栏目id的顶级栏目的名称 * @return string */ if ( ! function_exists('getTopChannelName')) { function getTopChannelName($id) { global $dsql; $typeinfo = $dsql->Getone(SELECT * FROM `dede_arctype` WHERE id='{$id}'); if($typeinfo['reid']==0) return $typeinfo['typename']; else return getTopChannelName($typeinfo['reid']); } }
在列表页这么使用:
{dede:field name='id' function='getTopChannelName(@me)'/}
在内容页这么使用:
{dede:field name='typeid' function='getTopChannelName(@me)'/}
附带获取顶级栏目的 url,打开 include/helpers/extend.helper.PHP,添加一个函数:
/** * 获取指定栏目id的顶级栏目的url * @return string */ if ( ! function_exists('getTopChannelUrl')) { function getTopChannelUrl($id) { global $dsql; $typeinfo = $dsql->Getone(SELECT * FROM `dede_arctype` WHERE id='{$id}'); if($typeinfo['reid']==0) return GetoneTypeUrlA($typeinfo); else return getTopChannelUrl($typeinfo['reid']); } }
在列表页这么使用:
{dede:field name='id' function='getTopChannelUrl (@me)'/}
在内容页这么使用:
{dede:field name='typeid' function='getTopChannelUrl(@me)'/}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。