dede顶级栏目列表如何实现?

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

使用官方提供的默认标签(最简单)

这是最直接的方法,适用于大多数不需要复杂样式的场景。

dede顶级栏目列表
(图片来源网络,侵删)

标签名称: {dede:channel}

基本用法:

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

参数说明:

  • type='top': 这是关键参数,表示只调用顶级栏目,如果省略,它会调用所有栏目。
  • row='10': 表示调用栏目的数量,0 或不写表示调用所有顶级栏目。
  • typeid='栏目ID': 如果只想调用某个顶级栏目下的子栏目,可以指定此ID(但结合 type='top' 时,此参数通常用于特殊场景)。
  • currentstyle='...': 用于高亮当前所在的栏目。

示例:高亮当前栏目

dede顶级栏目列表
(图片来源网络,侵删)

假设你想让用户当前所在的栏目显示为红色加粗:

{dede:channel type='top' row='10' currentstyle="<a href='~typelink~' class='thisclass'><span>~typename~</span></a>"}
    <a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}
  • ~typelink~~typename~currentstyle 中的特殊占位符,会分别被替换为当前栏目的链接和名称。
  • class='thisclass' 是一个常用的类名,你可以通过CSS来定义 .thisclass 的样式。

使用自定义SQL查询(最灵活)

当官方标签无法满足复杂需求时,例如需要调用特定条件的栏目、或者按特定字段排序,使用自定义SQL是最佳选择。

标签名称: {dede:sql}

基本用法:

dede顶级栏目列表
(图片来源网络,侵删)
{dede:sql sql="SELECT id, typename, typedir FROM dede_arctype WHERE reid=0 ORDER BY id ASC"}
    <a href="[field:typedir function='str_replace("{cmspath}","",$value)'/]">[field:typename/]</a>
{/dede:sql}

代码详解:

  1. sql="...": 这里写你的SQL查询语句。
  2. SELECT id, typename, typedir: 选择你需要的字段。id是栏目ID,typename是栏目名,typedir是栏目链接(默认会包含 {cmspath} 变量)。
  3. FROM dede_arctype: dede_arctype 是DedeCMS中存储栏目的数据表,请确认你的表前缀是否为 dede_,如果不是,请相应修改。
  4. WHERE reid=0: 这是核心条件reid 字段表示“父栏目ID”,reid=0 就意味着没有父栏目,即顶级栏目。
  5. ORDER BY id ASC: 按栏目ID升序排列,你也可以用 ordersort 排序,ORDER BY ordersort ASC
  6. [field:typedir function='str_replace("{cmspath}","",$value)'/]: 这是处理字段值的技巧。
    • [field:typedir/] 直接输出会得到类似 /plus/list.php?tid=1 的链接,但有时会是 {cmspath}/plus/list.php?tid=1
    • function='str_replace("{cmspath}","",$value)' 使用PHP的 str_replace 函数,将 {cmspath} 这个字符串替换为空,确保链接正确。

结合 dede:channelartlist 调用顶级栏目及其子栏目(常用)

这是一个非常强大的组合,通常用于制作主导航栏,既能显示顶级栏目,又能高亮当前顶级栏目,并加载其下的子栏目。

标签名称: {dede:channelartlist}

基本用法:

<ul id="nav">
    {dede:channelartlist typeid='top' row='10'}
        <li class="{dede:field name='typeid' function='IsTop(@me)'/}">
            <a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a>
            {dede:channel type='son' noself='yes'}
                <ul class="subnav">
                    <li><a href="[field:typelink/]">[field:typename/]</a></li>
                </ul>
            {dede:channel}
        </li>
    {/dede:channelartlist}
</ul>

代码详解:

  1. {dede:channelartlist typeid='top' row='10'}:

    • 这个标签会循环遍历所有的顶级栏目。
    • typeid='top' 指定只调用顶级栏目。
    • 在循环内部,{dede:field name='typeurl'}{dede:field name='typename'} 分别指向当前顶级栏目的链接和名称。
  2. {dede:channel type='son' noself='yes'}:

    • 这个标签被放在 {dede:channelartlist} 的内部,它的作用是调用当前顶级栏目下的所有子栏目。
    • type='son' 是关键,表示调用子栏目。
    • noself='yes' 表示不调用栏目本身(在这里就是顶级栏目本身),只调用它的子栏目。
  3. class="{dede:field name='typeid' function='IsTop(@me)'}":

    • 这是一个巧妙的高亮技巧。IsTop() 是一个自定义函数(通常在 include/common.func.php 中定义),它会判断当前栏目是否是顶级栏目,如果是,则返回一个特定的类名(如 current),否则返回空,你可以通过CSS来给这个类名设置高亮样式。

总结与推荐

方法 优点 缺点 适用场景
{dede:channel} 代码最简单,官方支持 功能相对固定,不够灵活 简单的栏目列表,对样式和功能要求不高的地方。
{dede:sql} 功能最强大,最灵活 需要懂基本的SQL语法,有一定门槛 需要复杂查询、按特定字段排序、或官方标签无法实现的功能。
{dede:channelartlist} 结构最清晰,适合导航 标签嵌套,稍复杂 制作网站主导航,需要同时显示顶级栏目和当前栏目的子栏目。

给您的建议:

  • 如果只是做一个简单的“关于我们”、“产品中心”这样的栏目列表,直接使用 方法一 即可。
  • 如果您正在制作网站的顶部或侧边导航栏,需要包含顶级栏目和子栏目,方法三 是不二之选。
  • 如果您发现方法一和方法三都无法满足您的特殊需求(只调用排序号大于5的顶级栏目),那么就果断使用 方法二

希望这些详细的解释能帮助您在DedeCMS项目中轻松调用顶级栏目列表!

-- 展开阅读全文 --
头像
dede标签手册下载?哪里能找到?
« 上一篇 04-21
织梦塔藏于哪部小说?
下一篇 » 04-21

相关文章

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

目录[+]