dede如何调用当前栏目的二级栏目名称?

99ANYc3cd6
预计阅读时长 15 分钟
位置: 首页 DEDE建站 正文

下面我将为你提供几种常用场景的实现方法,并附上详细解释。

dede调用当前栏目的二级栏目名称
(图片来源网络,侵删)

在当前栏目页(如 list_article_list.htm)调用其所有二级栏目

这是最常见的需求,比如在列表页的侧边栏显示当前栏目下的所有子栏目。

适用场景:

  • 当前是“产品中心”栏目,想在列表页显示其所有子栏目,如“产品A”、“产品B”、“产品C”。

核心标签:{dede:channelartlist}

示例代码:

dede调用当前栏目的二级栏目名称
(图片来源网络,侵删)
{dede:channelartlist typeid='top' currentstyle='active'}
    <div class="sub-category">
        <h3>{dede:field name='typename'/}</h3>
        <ul>
            {dede:channel type='son' noself='yes'}
            <li>
                <a href="[field:typelink/]">[field:typename/]</a>
            </li>
            {/dede:channel}
        </ul>
    </div>
{/dede:channelartlist}

代码详解:

  1. {dede:channelartlist typeid='top' currentstyle='active'}

    • typeid='top':这个参数非常重要,它告诉织梦从顶级栏目开始匹配,并找到当前栏目所在的顶级栏目及其所有子栏目,这样即使你在一个三级栏目下,也能正确显示其顶级父栏目下的所有二级栏目。
    • currentstyle='active':可以给当前所在的栏目项添加一个特定的样式(class="active"),方便进行样式控制,这个样式会应用到 <a> 标签上。
  2. {dede:field name='typename'/}

    • 这行代码会输出顶级父栏目的名称,如果当前栏目是“产品A”,那么这里输出的是“产品中心”。
  3. {dede:channel type='son' noself='yes'}

    dede调用当前栏目的二级栏目名称
    (图片来源网络,侵删)
    • 这个标签是在 channelartlist 的循环内部使用的,用于获取当前顶级父栏目下的所有子栏目(也就是二级栏目)。
    • type='son':指定调用类型为“子栏目”。
    • noself='yes':排除掉顶级父栏目本身,只显示它的子栏目。

页(如 article_article.htm)调用当前栏目的二级栏目

在文章页的面包屑导航或者侧边栏,你可能也想展示该文章所在栏目的同级(兄弟)栏目。

适用场景:

  • 当前文章属于“产品A”栏目,想在文章页显示“产品中心”下的所有子栏目,即“产品A”、“产品B”、“产品C”。

核心思路: 在文章页,我们无法直接通过 channelartlist 获取父栏目信息,我们需要先获取当前栏目的顶级父栏目ID,然后再用这个ID去查找它的所有子栏目。

示例代码:

{dede:field name='typeid' function='GetTopid(@me)'/}

这行代码需要配合一个自定义函数来实现。

完整实现步骤:

第一步:在 /include/common.func.php 文件中添加自定义函数

打开 /include/common.func.php 文件,在文件末尾 ?> 之前,添加如下函数:

/**
 * 获取当前栏目的顶级栏目ID
 * @param int $typeid 当前栏目ID
 * @return int 顶级栏目ID
 */
function GetTopid($typeid)
{
    global $dsql;
    $row = $dsql->GetOne("SELECT reid FROM `dede_arctype` WHERE id = $typeid");
    if ($row['reid'] == 0) {
        // 如果已经是顶级栏目
        return $typeid;
    } else {
        // 递归查找顶级栏目
        return GetTopid($row['reid']);
    }
}

第二步:在文章模板文件 (article_article.htm) 中调用

现在你可以在文章模板中使用这个函数了。

{dede:field name='typeid' function='GetTopid(@me)'/}

这行代码会输出当前文章所在栏目的顶级父栏目ID,假设“产品中心”的ID是 5,那么这行代码就会输出 5

第三步:使用获取到的顶级栏目ID调用其子栏目

将上一步得到的ID,通过 channelartlist 调用其子栏目。

{dede:channelartlist typeid='[field:typeid function="GetTopid(@me)"/]'}
    <div class="related-category">
        <h3>相关栏目</h3>
        <ul>
            {dede:channel type='son' noself='yes'}
            <li>
                <a href="[field:typelink/]">[field:typename/]</a>
            </li>
            {/dede:channel}
        </ul>
    </div>
{/dede:channelartlist}

这里我们使用了 typeid='[field:typeid function="GetTopid(@me)"/]' 的方式,直接在模板中完成函数调用和ID传递。


调用指定栏目的二级栏目

如果你想在任何地方(比如首页)调用某个特定栏目的所有二级栏目。

适用场景:

  • 在网站首页的页脚,显示“关于我们”栏目的所有子栏目。

核心标签:{dede:channelartlist} + 指定 typeid

示例代码:

假设“关于我们”栏目的ID是 2

{dede:channelartlist typeid='2'}
    <h3>关于我们</h3>
    <ul>
        {dede:channel type='son' noself='yes'}
        <li><a href="[field:typelink/]">[field:typename/]</a></li>
        {/dede:channel}
    </ul>
{/dede:channelartlist}

这个方法和方法一类似,只是直接指定了 typeid 为目标栏目的ID,而不是让系统自动匹配。

需求场景 推荐方法 核心标签/代码
在当前栏目页调用其二级栏目 方法一 {dede:channelartlist typeid='top'} + {dede:channel type='son'}
调用当前栏目的二级栏目 方法二 common.func.php 中添加 GetTopid() 函数,然后在模板中使用 {dede:channelartlist typeid='[field:typeid function="GetTopid(@me)"/]'}
在任意位置调用指定栏目的二级栏目 方法三 {dede:channelartlist typeid='目标栏目ID'} + {dede:channel type='son'}

对于绝大多数情况,方法一已经足够解决你的问题,请根据你的具体页面和需求选择合适的方案。

-- 展开阅读全文 --
头像
dede登录不提示用户名不存在,问题出在哪?
« 上一篇 2025-12-13
蔡培兴C语言视频教程哪里能看?
下一篇 » 2025-12-13

相关文章

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

目录[+]