织梦如何调用当前顶级栏目名称?

99ANYc3cd6
预计阅读时长 14 分钟
位置: 首页 织梦建站 正文

下面我将为你提供几种最常用、最可靠的方法,并附上详细的代码示例和解释。

织梦调用当前顶级栏目
(图片来源网络,侵删)

页(article_article.htm)中调用

这是最常见的情况,用户正在浏览一篇文章,你需要获取这篇文章所属的顶级栏目信息。

方法1:使用 GetTopid() 函数(最推荐、最简单)

织梦内置了一个非常强大的函数 GetTopid(),可以直接获取当前内容所属的顶级栏目ID,这是最简洁、最不容易出错的方法。

获取顶级栏目ID

{dede:field.id function="GetTopid(@me)"/}
  • @me:这是织梦模板中的特殊变量,代表当前标签的原始值。{dede:field.id} 的原始值就是当前文章的栏目ID。
  • function="GetTopid(@me)":对原始值(即当前栏目ID)执行 GetTopid() 函数,函数会返回这个ID所属的顶级栏目ID。

获取顶级栏目名称

织梦调用当前顶级栏目
(图片来源网络,侵删)

获取到顶级栏目ID后,我们可以使用 getTopTypename() 函数(自定义函数)来直接获取名称,或者通过查询栏目表来获取。

方案A:使用 getTopTypename() 自定义函数(推荐)

你需要在你的网站程序中确保这个函数存在,它通常位于 /include/common.func.php 文件里,如果你的文件里没有,可以手动添加进去:

// /include/common.func.php 文件末尾添加以下代码
/**
 * 获取指定栏目ID的顶级栏目名称
 * @param int $typeid 栏目ID
 * @return string 顶级栏目名称
 */
function getTopTypename($typeid)
{
    global $dsql;
    $row = $dsql->GetOne("SELECT typename,topid FROM `#@__arctype` WHERE id='$typeid'");
    if ($row['topid'] == '0') {
        return $row['typename'];
    } else {
        $topRow = $dsql->GetOne("SELECT typename FROM `#@__arctype` WHERE id='" . $row['topid'] . "'");
        return $topRow['typename'];
    }
}

添加后,在模板中就可以这样调用了:

织梦调用当前顶级栏目
(图片来源网络,侵删)
顶级栏目名称:{dede:field.id function="getTopTypename(@me)"/}

方案B:通过 channel 标签查询(通用方法)

如果你不想修改PHP文件,可以直接在模板中使用 channel 标签进行二次查询。

{dede:field.id function="GetTopid(@me)"/}  <!-- 先获取顶级ID -->
{dede:channel ArtList='0' typeid=''}
    <a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}
  • typeid='':这里留空,因为我们是在循环内部使用,需要手动指定。
  • function="GetTopid(@me)" 的结果会作为 typeid 的值。
  • ArtList='0':表示查询所有栏目。

综合示例:面包屑导航

一个典型的面包屑导航可以这样写:

<div class="breadcrumb">
    <a href="{dede:global.cfg_cmsurl/}/">首页</a>
    {dede:field.typeid function="GetTopid(@me)"/}
    {dede:channel type='top' currentstyle="<a href='~typelink~' class='thisclass'>~typename~</a> > "}
        <a href='[field:typelink/]'>[field:typename/]</a> >
    {/dede:channel}
    <a href="{dede:field name='arcurl'/}">{dede:field.title/}</a>
</div>
  • function="GetTopid(@me)"/:将顶级栏目ID传递给 {dede:channel}
  • type='top'channel 标签只显示顶级栏目。
  • currentstyle:为当前顶级栏目添加高亮样式。

在栏目列表页(category_*.htm)中调用

在栏目列表页,当前栏目ID可以直接通过 {dede:field.id/} 获取,如果当前栏目本身就是顶级栏目,那么它自己就是顶级栏目,如果不是,则需要向上查找。

方法1:使用 GetTopid() 函数(同样适用)

在列表页,{dede:field.id} 代表当前栏目的ID,使用 GetTopid() 函数同样可以获取其顶级ID。

当前顶级栏目ID:{dede:field.id function="GetTopid(@me)"/}

方法2:结合 channel 标签(推荐)

在列表页,使用 channel 标签是最直观的方式。

获取顶级栏目名称

{dede:channel type='top' currentstyle="<span>[field:typename/]</span>"}
    <span>[field:typename/]</span>
{/dede:channel}
  • type='top':只显示顶级栏目。
  • currentstyle:为当前所在的顶级栏目添加特殊样式,直接输出名称。

获取顶级栏目ID

如果你需要获取ID,可以在 currentstyle 里使用 [field:id/]

顶级栏目ID:{dede:channel type='top' currentstyle="[field:id/]" /}

总结与对比

场景 目标 推荐方法 代码示例
文章页 获取顶级栏目ID GetTopid() 函数 {dede:field.id function="GetTopid(@me)"/}
文章页 获取顶级栏目名称 getTopTypename() 自定义函数 {dede:field.id function="getTopTypename(@me)"/}
文章页 获取顶级栏目名称(不修改PHP) channel 标签查询 见上文综合示例
栏目页 获取顶级栏目ID GetTopid() 函数 {dede:field.id function="GetTopid(@me)"/}
栏目页 获取顶级栏目名称/ID channel {dede:channel type='top' currentstyle="[field:typename/]" /}

核心要点:

  1. GetTopid() 是获取顶级ID的利器,在内容页和栏目页都适用。
  2. getTopTypename() 是获取顶级名称的利器,但需要提前在 /include/common.func.php 中定义好。
  3. {dede:channel type='top'} 是在模板中直接操作顶级栏目的强大标签,非常适合制作面包屑和当前栏目高亮。

对于大多数开发者来说,方法1(GetTopid())+ 方法2(getTopTypename() 的组合是效率最高、代码最简洁的解决方案。

-- 展开阅读全文 --
头像
dede数据库密码存在哪?如何查看?
« 上一篇 03-05
dede老李仿站教程网,如何快速学会仿站?
下一篇 » 03-05

相关文章

取消
微信二维码
支付宝二维码