dede channel标签son参数如何正确使用?

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

{dede:channel} 是一个功能强大的栏目列表标签,主要用于获取和显示网站的所有栏目或指定层级的栏目,通过使用它的 son 属性,我们可以精确地控制只显示当前栏目的直接子栏目。

dede channel标签 son
(图片来源网络,侵删)

{dede:channel} 标签基础

我们来看一下这个标签的基本语法和常用属性。

基本语法

{dede:channel type='top' row='8'}
    <a href='[field:typelink/]'>[field:typename/]</a>
{/dede:channel}

核心属性

  1. typeid (栏目ID)

    • 作用: 指定要调用的栏目。
    • 用法: typeid='栏目ID',如果省略,则默认从当前栏目开始。
    • 重要: 当使用 son 属性时,typeid 通常指定的是父栏目的ID。
  2. type (栏目类型)

    • 作用: 定义调用栏目的范围。
    • 常用值:
      • top: 仅调用顶级栏目,这是最常用的值之一,常用于网站主导航。
      • son: 仅调用指定栏目(typeid)下的子栏目,这是实现“子栏目”调用的关键属性。
      • self: 调用指定栏目(typeid)及其所有下级栏目(包括多级子栏目)。
      • grandson: 调用指定栏目(typeid)下的所有二级子栏目
  3. row (调用数量)

    dede channel标签 son
    (图片来源网络,侵删)
    • 作用: 设置要显示的栏目数量。
    • 用法: row='10',表示显示10个栏目。
  4. currentstyle (当前栏目样式)

    • 作用: 为当前所在的栏目设置一个高亮样式。
    • 用法: currentstyle='<li class="active"><a href~</a></li>',当用户访问某个栏目时,该栏目链接会自动应用 currentstyle 中定义的HTML结构。

使用 son 属性调用子栏目

son 属性的核心功能是:在指定父栏目(typeid)下,只调用其直接子栏目(一级子栏目),不调用更深层次的栏目。

场景举例

假设你的网站栏目结构如下:

  • 顶级栏目 (ID=1)
    • 产品中心 (ID=2) -> 父栏目
      • 产品分类一 (ID=3)
      • 产品分类二 (ID=4)
      • 产品分类三 (ID=5)
    • 新闻资讯 (ID=6)
      • 公司新闻 (ID=7)
      • 行业动态 (ID=8)

你希望在“产品中心”这个页面上,只显示它的三个直接子栏目(产品分类一、二、三)。

实现步骤

  1. 获取父栏目ID:

    • 登录DedeCMS后台,在“栏目管理”中找到“产品中心”,记下它的ID,这里是 2
  2. 编写模板代码:

    • 在“产品中心”的栏目模板文件(通常是 templets/default/list_channel.htm 或你自定义的模板)中,加入以下代码:
<h3>产品分类</h3>
<ul class="sub-category-list">
    {dede:channel typeid='2' type='son' row='10'}
        <li>
            <a href="[field:typelink/]">[field:typename/]</a>
        </li>
    {/dede:channel}
</ul>

代码解析

  • {dede:channel ...}: 开始标签。
  • typeid='2': 这是关键! 我们指定了父栏目“产品中心”的ID为2,标签会在这个ID的栏目下查找子栏目。
  • type='son': 这是另一个关键! 它告诉标签,我们只需要调用 typeid 指定栏目的直接子栏目,即使“产品分类一”下面还有子栏目,它们也不会被显示出来。
  • row='10': 最多显示10个子栏目,如果不足10个,则显示全部。
  • <li><a href='[field:typelink/]'>[field:typename/]</a></li>: 循环体内的HTML代码。
    • [field:typelink/]: 子栏目的链接地址。
    • [field:typename/]: 子栏目的名称。
  • </ul>: 结束标签。

效果

当用户访问“产品中心”页面时,页面会输出如下HTML:

<h3>产品分类</h3>
<ul class="sub-category-list">
    <li>
        <a href="/plus/list.php?tid=3">产品分类一</a>
    </li>
    <li>
        <a href="/plus/list.php?tid=4">产品分类二</a>
    </li>
    <li>
        <a href="/plus/list.php?tid=5">产品分类三</a>
    </li>
</ul>

高级用法与注意事项

结合 currentstyle 实现高亮

如果希望用户当前所在的子栏目能高亮显示,可以这样写:

{dede:channel typeid='2' type='son' currentstyle="<li class='active'><a href='~typelink~'>~typename~</a></li>"}
    <li><a href="[field:typelink/]">[field:typename/]</a></li>
{/dede:channel}
  • 工作原理: 当用户访问“产品分类二”(ID=4)时,DedeCMS会自动将 currentstyle 中的 符号替换为对应的字段值,最终生成的HTML会是:
    <li><a href="/plus/list.php?tid=3">产品分类一</a></li>
    <li class="active"><a href="/plus/list.php?tid=4">产品分类二</a></li>
    <li><a href="/plus/list.php?tid=5">产品分类三</a></li>
  • 注意: currentstyle 会替换掉循环体内的默认HTML,所以通常直接在 currentstyle 里写完整的 <li> 结构即可,而不需要再写一个默认的 <li>

调用顶级栏目(常用作主导航)

{dede:channel type='top' row='8'}
    <a href="[field:typelink/]" [field:typename/]</a>
{/dede:channel}

调用当前栏目的所有下级栏目(包括多级)

如果你想在“产品中心”页面显示它下面所有层级的子栏目,应该使用 type='self'

{dede:channel typeid='2' type='self'}
    <a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}

这会显示:产品分类一、产品分类二、产品分类三,以及它们各自下面的所有子栏目。

属性组合 功能描述 适用场景
typeid='父ID' type='son' 调用指定父栏目的直接子栏目 在栏目详情页、列表页调用其子栏目作为分类导航。
type='top' 调用所有顶级栏目 网站主导航、页脚栏目。
typeid='父ID' type='self' 调用指定栏目及其所有下级栏目 生成网站地图、面包屑导航的子级部分。
typeid='父ID' type='grandson' 调用指定栏目的所有二级子栏目 特殊的栏目布局需求。

掌握 {dede:channel}typeidtype(特别是 son)属性,是进行 DedeCMS 栏目导航开发的基础和核心,希望这个详细的解释能帮助你更好地理解和使用它!

-- 展开阅读全文 --
头像
define能定义函数吗?与标准函数定义有何区别?
« 上一篇 12-12
Keil uVision4下C语言如何高效调试与优化?
下一篇 » 12-12

相关文章

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

目录[+]