织梦标签怎么调用导航栏

99ANYc3cd6
预计阅读时长 21 分钟
位置: 首页 织梦建站 正文

使用 {dede:channel} 标签(最常用)

{dede:channel} 标签主要用于获取单个栏目的信息,比如当前栏目的子栏目、同级栏目等,它非常适合用来制作网站的主导航栏

织梦标签怎么调用导航栏
(图片来源网络,侵删)

基本语法

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

常用参数说明

  • type='top':这是最关键的参数,表示只调用顶级栏目,制作主导航时,这个参数是必须的。
    • son:调用当前栏目的子栏目。
    • self:调用当前栏目及其子栏目。
    • top:调用顶级栏目。
  • row='8':表示调用的栏目数量,'8'代表调用8个顶级栏目,如果省略,默认调用所有顶级栏目。
  • typeid='0':指定调用的栏目ID。'0'表示从根目录开始调用,通常在调用顶级栏目时可以省略。
  • currentstyle='...':这是一个非常实用的参数,可以为当前所在的栏目(高亮显示的栏目)设置特殊的样式。

完整示例:制作一个带高亮效果的主导航

假设我们的导航栏HTML结构如下,我们希望当前页面对应的栏目链接文字变成红色。

<ul class="nav">
    <li><a href="/">首页</a></li>
    <li><a href="/a/about/" class="active">关于我们</a></li>
    <li><a href="/a/news/">新闻中心</a></li>
    <li><a href="/a/products/">产品展示</a></li>
    <li><a href="/a/contact/">联系我们</a></li>
</ul>

在织梦模板中,我们可以这样写 {dede:channel}

<ul class="nav">
    {dede:channel type='top' row='8'}
        <li>
            <a href="[field:typelink/]" 
               [field:typelink function='(@me=="$typelink")? "class=active" : ""'/]>
               [field:typename/]
            </a>
        </li>
    {/dede:channel}
</ul>

代码解释:

  • [field:typelink/]:输出栏目的链接地址。
  • [field:typename/]:输出栏目的名称。
  • [field:typelink function='(@me=="$typelink")? "class=active" : ""'/]:这是一个PHP函数判断。
    • @me:代表当前循环到的栏目的链接。
    • $typelink:代表当前页面的链接(在列表页、内容页等页面中,这个变量是有效的)。
    • ? "class=active" : "":如果两者链接相等(说明当前正在访问这个栏目),就给 <a> 标签添加 class="active" 属性,否则为空。

这样,当用户访问“关于我们”页面时,对应的导航链接就会自动加上 active 类,你就可以在CSS中定义 .active { color: red; } 来实现高亮效果。


使用 {dede:channelartlist}

{dede:channelartlist} 标签用于获取顶级栏目及其下的子栏目,通常用于制作带下拉菜单的导航栏

织梦标签怎么调用导航栏
(图片来源网络,侵删)

基本语法

{dede:channelartlist}
    <li>
        <a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a>
        {dede:channel type='son' noself='yes'}
            <a href="[field:typelink/]">[field:typename/]</a>
        {/dede:channel}
    </li>
{/dede:channelartlist}

标签解析

  • {dede:channelartlist}:这个标签会循环遍历所有的顶级栏目。
    • {dede:field name='typeurl'/}:获取当前顶级栏目的链接。
    • {dede:field name='typename'/}:获取当前顶级栏目的名称。
  • {dede:channel type='son' noself='yes'}:这个标签写在 {dede:channelartlist} 的内部,用于获取当前顶级栏目下的所有子栏目
    • type='son':调用子栏目。
    • noself='yes':不调用顶级栏目本身(因为上面已经调用了)。

完整示例:制作一个带下拉菜单的导航

假设我们的HTML结构如下:

<ul class="nav">
    <li>
        <a href="/">首页</a>
    </li>
    <li>
        <a href="/a/about/">关于我们</a>
        <!-- 假设没有子菜单,这里可以为空 -->
    </li>
    <li class="dropdown">
        <a href="/a/news/">新闻中心</a>
        <ul class="subnav">
            <li><a href="/a/news/gongsi/">公司动态</a></li>
            <li><a href="/a/news/hangye/">行业资讯</a></li>
        </ul>
    </li>
    <li>
        <a href="/a/products/">产品展示</a>
        <ul class="subnav">
            <li><a href="/a/products/p1/">产品分类一</a></li>
            <li><a href="/a/products/p2/">产品分类二</a></li>
        </ul>
    </li>
</ul>

在织梦模板中,我们可以这样实现:

<ul class="nav">
    {dede:channelartlist}
        <li>
            <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>

进阶优化(判断是否有子菜单):

为了让只有子栏目的父级才显示 dropdown 类,可以稍微修改一下:

织梦标签怎么调用导航栏
(图片来源网络,侵删)
<ul class="nav">
    {dede:channelartlist}
        <li [field:typelink runphp='yes'] global $dsql; $id = @me; $sql = "SELECT COUNT(*) FROM `dede_arctype` WHERE reid='$id'"; $row = $dsql->GetOne($sql); @me = ($row['COUNT(*)'] > 0) ? 'class="dropdown"' : ''; [/field:typelink]>
            <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>

这段PHP代码会查询当前顶级栏目下是否有子栏目,如果有,就给 <li> 添加 class="dropdown"


总结与对比

特性 {dede:channel} {dede:channelartlist}
主要用途 调用单一层级的栏目(如主导航) 调用父子层级的栏目(如带下拉的导航)
循环方式 循环单个栏目列表 循环顶级栏目,并在内部循环子栏目
性能 较轻量 相对较重,因为会嵌套查询
灵活性 适合简单的列表和当前高亮 适合构建复杂的、有层级关系的导航结构

如何选择?

  • 如果你的导航栏就是一排简单的链接,不需要下拉菜单,直接使用 {dede:channel type='top'} 即可。
  • 如果你的导航栏需要实现“鼠标悬停显示子菜单”的效果,那么必须使用 {dede:channelartlist}

希望这个详细的教程能帮助你成功调用织梦的导航栏!如果在实际操作中遇到问题,可以检查一下栏目的栏目类型(是否为“栏目频道”)以及链接地址是否正确。

-- 展开阅读全文 --
头像
单页面织梦模板免费下载哪里有?
« 上一篇 01-19
织梦页头位置如何修改?
下一篇 » 01-19

相关文章

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