dedecms channel标签如何正确调用?

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

channel 标签是 DedeCMS 中最核心、最常用的标签之一,用于获取并显示网站的所有栏目(包括顶级栏目和子栏目)。


channel 标签的基本语法

channel 标签的基本结构如下:

{dede:channel}
    <a href='[field:typeurl/]'>[field:typename/]</a>
{/dede:channel}
  • {dede:channel}: 标签的开始,用于定义一个循环。
  • [/dede:channel]: 标签的结束。
  • [field:typeurl/]: 循环体内使用的字段,表示当前栏目的链接地址。
  • [field:typename/]: 循环体内使用的字段,表示当前栏目的名称。

常用属性详解

channel 标签可以通过多种属性来精确控制输出的内容。

typeid (指定栏目ID)

这是最常用的属性,用于指定从哪个栏目开始调用。

  • 不使用 typeid: 默认调用网站所有的一级栏目(顶级栏目)。
  • 使用 typeid: 调用指定栏目及其所有下级栏目。

示例: 调用栏目ID为 2 的栏目及其所有子栏目。

{dede:channel typeid='2'}
    <a href='[field:typeurl/]'>[field:typename/]</a>
{/dede:channel}

type (栏目类型)

用于指定调用栏目的类型,通常与 reid (父栏目ID) 配合使用。

  • son: 调用指定栏目 (typeid) 的直接子栏目
  • self: 调用指定栏目 (typeid) 本身。
  • top: 调用所有顶级栏目(不包含子栏目)。
  • grandson: 调用指定栏目 (typeid) 的所有下级栏目(包括子栏目和孙栏目)。

示例: 假设栏目ID为 2 的栏目下有子栏目 3 和 4。

  • {dede:channel typeid='2' type='son'}: 只会调用栏目 3 和 4。
  • {dede:channel typeid='2' type='grandson'}: 会调用栏目 3、4 以及 3 和 4 的所有子栏目。

row (调用条数)

限制输出的栏目数量。

示例: 只调用前 5 个顶级栏目。

{dede:channel row='5'}
    <a href='[field:typeurl/]'>[field:typename/]</a>
{/dede:channel}

currentstyle (当前栏目样式)

用于为当前所在页面对应的栏目链接添加一个特殊的样式(比如高亮)。

示例: 如果当前页面是这个栏目,链接会加上 class="active"

{dede:channel currentstyle="<a href='~typelink~' class='active'>~typename~</a>"}
    <a href='[field:typeurl/]'>[field:typename/]</a>
{/dede:channel}
  • ~typelink~: 会被替换为 [field:typeurl/]
  • ~typename~: 会被替换为 [field:typename/]

常用字段 (Fields)

{dede:channel} 循环体内,可以使用以下字段来获取栏目的详细信息:

字段名 说明
[field:id/] 栏目的ID
[field:typename/] 栏目的名称
[field:typeurl/] 栏目的链接地址 (会自动判断是列表页还是跳转链接)
[field:typedir/] 栏目的目录地址 (物理路径)
[field:seotitle/] 栏目的SEO标题
[field:description/] 栏目的描述
[field:ishidden/] 栏目是否隐藏 (0=否, 1=是)
[field:isdefault/] 是否为默认栏目 (0=否, 1=是)

综合实例

实例1:调用网站所有顶级栏目(导航栏)

这是最常见的导航栏实现方式。

<div class="nav">
    <ul>
        {dede:channel}
            <li><a href="[field:typeurl/]">[field:typename/]</a></li>
        {/dede:channel}
    </ul>
</div>

实例2:调用指定栏目的直接子栏目(产品”栏目的分类)

假设“产品”栏目的ID是 2。

<div class="product-category">
    <h3>产品分类</h3>
    <ul>
        {dede:channel typeid='2' type='son'}
            <li><a href="[field:typeurl/]">[field:typename/]</a></li>
        {/dede:channel}
    </ul>
</div>

实例3:带当前栏目高亮的导航栏

这个例子非常实用,能自动高亮用户正在访问的栏目。

<div class="nav">
    <ul>
        {dede:channel
            type='top'
            currentstyle="<li class='active'><a href='~typelink~'>~typename~</a></li>"
        }
            <li><a href="[field:typeurl/]">[field:typename/]</a></li>
        {/dede:channel}
    </ul>
</div>

注意:这里使用了 type='top' 来确保只调用顶级栏目,避免在多级菜单下出现重复高亮。currentstyle 会自动替换掉循环体中对应的 <li>

实例4:调用顶级栏目及其子栏目(二级下拉菜单)

这个稍微复杂一点,需要嵌套使用 channel

<div class="main-nav">
    <ul>
        {dede:channel type='top'}
            <li>
                <a href="[field:typeurl/]">[field:typename/]</a>
                {dede:channel type='son' typeid='[field:id]'}
                    <div class="sub-nav">
                        <a href="[field:typeurl/]">[field:typename/]</a>
                    </div>
                {/dede:channel}
            </li>
        {/dede:channel}
    </ul>
</div>

说明:

  1. 外层 {dede:channel type='top'} 循环所有顶级栏目。
  2. 对于每一个顶级栏目,内层 {dede:channel type='son' typeid='[field:id]'} 循环其下的直接子栏目。
  3. [field:id] 是外层循环中顶级栏目的ID,它被传递给内层循环,作为 typeid 的值。

常见问题与注意事项

  1. 栏目类型为“外部链接”: 如果一个栏目在后台设置为了“外部链接”(链接到其他网站),[field:typeurl/] 会输出你设置的链接地址,而不是 DedeCMS 的栏目链接。

  2. 栏目类型为“单页”: 如果栏目是“单页”类型,[field:typeurl/] 会指向该单页内容的详情页。

  3. 栏目列表为空: 如果调用出的栏目列表为空,请检查:

    • typeidtype 属性的组合是否正确。
    • 后台该栏目下是否真的存在子栏目。
    • 栏目是否被设置为“隐藏”(在栏目管理中可以查看)。
  4. currentstyle 不生效:

    • 确保你访问的页面确实属于某个栏目(栏目列表页或该栏目下的文章详情页)。
    • 检查 typeid 的值是否正确,如果只调用了部分栏目,currentstyle 只会在这些被调用的栏目中生效。

希望这份详细的教程能帮助你完全掌握 DedeCMS 的 channel

-- 展开阅读全文 --
头像
C语言OpenCV如何画线?
« 上一篇 今天
织梦安装百度统计代码,具体怎么操作?
下一篇 » 今天

相关文章

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