dede四级栏目如何直接调用?

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

递归调用(最灵活、最推荐)

这是最常用也是最灵活的方法,通过设置 typeid 为顶级栏目的ID,并开启 reid='son',系统会自动递归查找并显示该顶级栏目下的所有层级的子栏目,直到四级。

dede四级栏目调用
(图片来源网络,侵删)

适用场景:

  • 当你想在网站的侧边栏、页脚等位置,一次性显示某个主栏目(如“产品中心”)下的所有层级的栏目结构时。
  • 栏目结构可能会变动,但希望调用代码保持不变。

标签代码:

{dede:channel type='son' typeid='1' row='100'}
    <li>
        <a href="[field:typelink/]">[field:typename/]</a>
        <!-- 开始调用三级栏目(即当前二级栏目的子栏目) -->
        {dede:channel type='son' typeid='field:id/' row='100'}
            <dl>
                <dt><a href="[field:typelink/]">[field:typename/]</a></dt>
                <!-- 开始调用四级栏目(即当前三级栏目的子栏目) -->
                {dede:channel type='son' typeid='field:id/' row='100'}
                    <dd>
                        <a href="[field:typelink/]">[field:typename/]</a>
                    </dd>
                {/dede:channel}
            </dl>
        {/dede:channel}
    </li>
{/dede:channel}

代码详解:

  1. {dede:channel type='son' typeid='1' row='100'}

    • typeid='1': 这是最关键的参数1 是你的顶级栏目的ID,你需要登录织梦后台,在“栏目管理”中找到你的顶级栏目,查看其ID并替换这里的 1
    • type='son': 表示调用指定栏目(typeid)的直接子栏目
    • row='100': 设置显示的最大栏目数量,防止数据过多。
  2. [field:typelink/][field:typename/]

    • [field:typename/]: 输出栏目的名称。
    • [field:typelink/]: 输出栏目的链接地址。
  3. typeid='field:id/'

    • 这是实现递归调用的核心技巧,在第一层循环中,[field:id/] 会获取到当前栏目的ID,当它被用在第二层 typeid 中时,第二层调用就会变成 typeid='当前二级栏目的ID',从而正确地调用出三级栏目,同理,第三层会调用出四级栏目。

完整示例(带CSS样式)

假设你的顶级栏目ID是 2(产品中心”),并且你想生成一个多级菜单。

dede四级栏目调用
(图片来源网络,侵删)
<!-- HTML 结构 -->
<div class="menu">
    <ul class="top-menu">
        {dede:channel type='son' typeid='2' row='100'}
            <li class="top-item">
                <a href="[field:typelink/]">[field:typename/]</a>
                <!-- 三级栏目 -->
                {dede:channel type='son' typeid='field:id/' row='100'}
                    <div class="sub-menu-2">
                        <dl>
                            <dt><a href="[field:typelink/]">[field:typename/]</a></dt>
                            <!-- 四级栏目 -->
                            {dede:channel type='son' typeid='field:id/' row='100'}
                                <dd>
                                    <a href="[field:typelink/]">[field:typename/]</a>
                                </dd>
                            {/dede:channel}
                        </dl>
                    </div>
                {/dede:channel}
            </li>
        {/dede:channel}
    </ul>
</div>
/* CSS 样式,用于展示效果 */
.menu .top-menu { list-style: none; padding: 0; }
.menu .top-item { position: relative; display: inline-block; margin-right: 20px; }
.menu .top-item a { display: block; padding: 10px; text-decoration: none; border: 1px solid #ccc; }
.menu .sub-menu-2 { display: none; position: absolute; top: 100%; left: 0; background: #f9f9f9; border: 1px solid #ccc; padding: 10px; }
.menu .top-item:hover .sub-menu-2 { display: block; }
.menu .sub-menu-2 dl { margin: 0; }
.menu .sub-menu-2 dt { font-weight: bold; margin-bottom: 5px; }
.menu .sub-menu-2 dd { margin: 2px 0; }
.menu .sub-menu-2 dd a { display: block; padding: 5px; text-decoration: none; color: #333; }
.menu .sub-menu-2 dd a:hover { background: #e0e0e0; }

指定层级调用(直接明确)

如果你非常清楚每个层级的栏目ID,并且不希望进行递归查找,可以直接为每一级指定 typeid

适用场景:

  • 栏目结构非常固定,且你知道每一级父栏目的确切ID。
  • 你只想调用某一个特定分支下的栏目,而不需要其他分支。

标签代码:

<!-- 假设:一级栏目ID=3, 其下的二级栏目ID=5, 三级栏目ID=8, 四级栏目ID=12 -->
<!-- 调用一级栏目(通常只有一个) -->
{dede:channel typeid='3'}
    <h2><a href="[field:typelink/]">[field:typename/]</a></h2>
    <!-- 调用二级栏目,指定其父级ID为3 -->
    {dede:channel type='son' typeid='3'}
        <h3><a href="[field:typelink/]">[field:typename/]</a></h3>
        <!-- 调用三级栏目,指定其父级ID为5 -->
        {dede:channel type='son' typeid='5'}
            <h4><a href="[field:typelink/]">[field:typename/]</a></h4>
            <!-- 调用四级栏目,指定其父级ID为8 -->
            {dede:channel type='son' typeid='8'}
                <p><a href="[field:typelink/]">[field:typename/]</a></p>
            {/dede:channel}
        {/dede:channel}
    {/dede:channel}
{/dede:channel}

代码详解:

这种方法非常直观,每一层都明确地告诉系统要调用哪个父栏目(typeid)下的子栏目(type='son'),缺点是当栏目ID变动时,你需要手动修改所有相关的模板文件。


使用 channelartlist 调用(带文章列表)

如果你不仅想调用栏目,还想在每个栏目下调用其文章列表,channelartlist 标签是更好的选择,它同样支持递归。

适用场景:

  • 制作产品展示列表页、新闻列表页等,需要“栏目名称 + 该栏目下的文章列表”的组合。

标签代码:

{dede:channelartlist typeid='2' row='10'}
    <div class="box">
        <h2><a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a></h2>
        <!-- 这里开始是二级栏目及其下的文章 -->
        {dede:channel type='son' typeid='field:id/' row='100'}
            <div class="sub-box">
                <h3><a href="[field:typelink/]">[field:typename/]</a></h3>
                <!-- 调用该三级栏目下的文章列表 -->
                {dede:arclist titlelen='40' row='5'}
                    <p><a href="[field:arcurl/]">[field:title/]</a></p>
                {/dede:arclist}
                <!-- 这里可以继续嵌套四级栏目调用,结构与方法一类似 -->
                {dede:channel type='son' typeid='field:id/' row='100'}
                    <ul>
                        <li>[field:typename/] - <a href="[field:typelink/]">进入四级栏目</a></li>
                    </ul>
                {/dede:channel}
            </div>
        {/dede:channel}
    </div>
{/dede:channelartlist}

代码详解:

  • {dede:channelartlist typeid='2'}: typeid='2' 同样指定顶级栏目,它会循环顶级栏目下的所有直接子栏目(二级栏目)。
  • {dede:field name='typeurl'/}{dede:field name='typename'/}: channelartlist 内部使用 field 标签来获取当前循环到的顶级栏目的信息。
  • 内部的 {dede:channel}{dede:arclist} 嵌套逻辑与方法一完全相同,用于处理更深层的栏目和文章。

总结与建议

方法 优点 缺点 适用场景
递归调用 代码灵活,适应栏目结构变化,只需修改顶级ID即可。 需要理解 typeid='field:id/' 的嵌套逻辑。 最常用,适用于侧边栏、页脚、主导航等需要展示完整栏目树的地方。
指定调用 逻辑最简单直接,一目了然。 不灵活,栏目ID变动时需要修改多处代码。 栏目结构极其固定,且明确知道每一级ID时使用。
channelartlist 能同时调用栏目和文章列表,功能强大。 标签结构相对复杂,主要用于列表页。 需要展示“栏目+其下文章”的组合时,如产品列表、新闻列表。

给你的建议:

对于绝大多数情况,请优先使用方法一(递归调用),它是最强大、最织梦化的解决方案,记住关键点:

  1. 找到你的顶级栏目ID
  2. 在最外层 {dede:channel} 中设置 typeid='你的顶级ID'
  3. 在内层调用中,使用 typeid='field:id/' 来逐级传递父栏目的ID。

希望这些详细的解释和示例能帮助你成功调用四级栏目!

-- 展开阅读全文 --
头像
2025织梦漏洞有哪些风险?如何快速修复?
« 上一篇 04-04
dede二次上传图片如何覆盖旧图?
下一篇 » 04-04
取消
微信二维码
支付宝二维码

目录[+]