dede type调用子栏目,参数如何正确配置?

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

使用 {dede:sonchannel} 标签 (最推荐、最简单)

这是 DedeCMS 专门为调用当前栏目的直接子栏目设计的标签,也是实现此功能最直接、最简单的方法。

适用场景:只需要调用当前栏下的第一级子栏目。

基本语法

{dede:sonchannel}
    <a href="[field:typelink/]">[field:typename/]</a>
{/dede:sonchannel}

标签参数说明

  • row='数字':获取子栏目的数量,默认为 8
  • typeid='栏目ID':指定要获取子栏目的父栏目ID,如果省略,则默认为当前栏目。
  • noself='yes':是否不包含当前栏目本身,在调用子栏目时,通常需要设置为 yes,避免混淆。

示例:在一个栏目页调用其所有子栏目

假设你的栏目页模板是 list_article.htm,你希望在这个页面的某个位置显示它所有的子栏目。

<!-- 在 list_article.htm 模板中 -->
<div class="sub-channel-list">
    <h3>子栏目</h3>
    <ul>
        {dede:sonchannel row='10' noself='yes'}
            <li>
                <a href="[field:typelink/]">[field:typename/]</a>
            </li>
        {dede:sonchannel}
    </ul>
</div>

代码解释

  • {dede:sonchannel}:开始调用子栏目。
  • row='10':最多调用10个子栏目。
  • noself='yes':不包含当前栏目本身。
  • [field:typelink/]:子栏目的链接地址。
  • [field:typename/]:子栏目的名称。

使用 {dede:channel} 标签 (灵活,可指定任意父栏目)

{dede:channel} 标签主要用于获取栏目列表,通过指定 typeid 参数,可以调用任意指定栏目的子栏目。

适用场景

  1. 在非栏目页(如首页、文章页)调用某个特定栏目的子栏目。
  2. 功能上与方法一类似,但更通用。

基本语法

{dede:channel type='son' typeid='父栏目ID'}
    <a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}

标签参数说明

  • type='son':指定获取类型为“子栏目”,这是关键参数。
  • typeid='父栏目ID'必须指定,你想获取哪个栏目的子栏目,就把它的ID写在这里,想在首页调用ID为 5 的栏目的子栏目,就写 typeid='5'
  • row='数字':获取数量。
  • currentstyle='':当前样式,与方法一的 {dede:sonchannel} 不同,{dede:channel}currentstyle 用于高亮显示当前所在的栏目。

示例:在首页调用指定栏目(ID=5)的子栏目

假设你想在网站首页的侧边栏,调用“产品中心”栏目(假设其ID为 5)的所有子栏目。

<!-- 在首页 index.htm 模板中 -->
<div class="product-categories">
    <h3>产品分类</h3>
    <ul>
        {dede:channel type='son' typeid='5' row='20'}
            <li>
                <a href="[field:typelink/]">[field:typename/]</a>
            </li>
        {dede:channel}
    </ul>
</div>

嵌套使用 {dede:type}{dede:sonchannel} (用于复杂结构)

如果你需要在循环子栏目时,获取每个子栏目自身的更多属性(如栏目图片、描述等),就需要结合 {dede:type} 标签一起使用。

适用场景:在调用子栏目列表的同时,需要显示每个子栏目的更多信息,如缩略图、简介等。

基本思路

  1. {dede:sonchannel} 循环出所有子栏目的 typeid
  2. 在循环内部,再用 {dede:type} 根据这个 typeid 获取该子栏目的详细信息。

示例:调用子栏目并显示其图片和描述

<div class="sub-channel-detail-list">
    {dede:sonchannel}
        <!-- 循环开始,[field:id] 就是当前子栏目的ID -->
        {dede:type typeid='[field:id]'}
            <div class="channel-item">
                <a href="[field:typelink/]">
                    <!-- [field:typedir/] 是栏目目录,[field:litpic/] 是缩略图 -->
                    <img src="[field:litpic/]" alt="[field:typename/]">
                    <h4>[field:typename/]</h4>
                    <p>[field:description function='cn_substr(@me, 100)'/]</p> <!-- 截取100字描述 -->
                </a>
            </div>
        {/dede:type}
    {/dede:sonchannel}
</div>

代码解释

  1. {dede:sonchannel}:遍历当前栏目的所有子栏目。
  2. [field:id]:在 {dede:sonchannel} 循环中,这个变量代表当前子栏目的ID。
  3. {dede:type typeid='[field:id]'}:在循环内部,我们使用 {dede:type} 标签,并将它的 typeid 参数设置为子栏目的ID,这样就能获取到该子栏目的完整信息。
  4. [field:litpic/]:子栏目的缩略图。
  5. [field:description/]:子栏目的描述,这里用 function='cn_substr(@me, 100)' 来截取前100个字符。

总结与对比

方法 标签组合 优点 缺点 适用场景
方法一 {dede:sonchannel} 最简单、最直接、代码少、性能好。 只能调用当前栏目的直接子栏目。 在栏目页调用其下一级子栏目,是最常见的需求。
方法二 {dede:channel} 非常灵活,可以在任何页面调用任意指定栏目的子栏目。 语法稍复杂,需要手动指定 typeid 在首页、文章页等非栏目页调用其他栏目的子栏目。
方法三 {dede:sonchannel} + {dede:type} 功能最强大,可以获取子栏目的任何自定义字段(如图片、描述等)。 代码嵌套,相对复杂。 需要在调用子栏目列表的同时,展示每个子栏目的详细信息。

推荐首选:在绝大多数情况下,直接使用 方法一 ({dede:sonchannel}) 是最佳选择,因为它最简洁、高效,只有当方法一无法满足需求时,再考虑方法二和方法三。

-- 展开阅读全文 --
头像
dede tag 标签加链接
« 上一篇 01-28
C语言控制面板如何运行C语言程序?
下一篇 » 01-28

相关文章

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

目录[+]