DedeCMS织梦栏目页/文章详情页获取顶级栏目名称及链接url方法

我们使用 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);
}
}

织梦顶级栏目链接,名称及 id 调用代码:

{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)'/}

相关文章

文章浏览阅读483次。dedecms织梦频道模板中调用栏目分类并排...
文章浏览阅读284次。我们在用织梦建站的过程中,难免会遇到各...
文章浏览阅读152次。seo专题是seo优化必不可少的一环,对于网...
文章浏览阅读142次。在Dedecms中,在列表页调用文章摘要的方...
文章浏览阅读234次。织梦DedeCMS文章内容发布时可以选择“头...
文章浏览阅读701次。虽然织梦DedeCMS因为安全问题被人所诟病...