菜鸟科技网

织梦面包导航如何生成?

在织梦(DedeCMS)系统中,面包屑导航(也称为面包导航或导航路径)是提升网站用户体验和SEO优化的重要功能,它能清晰展示当前页面在网站结构中的层级位置,织梦生成面包屑导航主要依赖系统内置的标签和函数,通过合理配置即可实现动态调用,以下是详细的操作方法和原理说明。

织梦面包导航如何生成?-图1
(图片来源网络,侵删)

面包屑导航的基本原理

面包屑导航的核心逻辑是获取当前页面的父级栏目信息,并逐级向上递归,最终组合成“首页 > 栏目 > 子栏目 > 当前页面”的路径结构,织梦系统通过{dede:field name='position' /}标签或自定义函数实现这一功能,其中position字段会自动根据当前页面的类型(如文章页、栏目页)生成对应的路径代码。

通过默认标签生成面包屑导航

织梦系统默认提供了面包屑导航标签,使用方法简单,适合大多数场景,在模板文件(如article_article.htmindex.htm等)中,直接插入以下代码即可:

{dede:field name='position' /}

该标签会自动解析当前页面的层级关系,并生成带链接的导航路径,在文章页中,输出结果可能为:

首页 > 技术分享 > 织梦教程 > 织梦如何生成面包导航

“首页”“技术分享”“织梦教程”均为可点击的链接,点击可跳转至对应页面。

织梦面包导航如何生成?-图2
(图片来源网络,侵删)

默认标签的局限性

默认标签虽然便捷,但样式和功能较为固定,无法满足自定义需求(如修改分隔符、添加当前页高亮等),此时需通过自定义函数或修改系统文件实现更灵活的控制。

自定义面包屑导航的实现方法

通过修改include/typelink.class.php文件

织梦的面包屑导航功能由typelink.class.php类文件驱动,通过修改该文件可调整导航逻辑,具体步骤如下:

  • 打开include/typelink.class.php文件,找到GetPosition()函数(约第120行)。
  • 修改函数内的代码,例如调整分隔符或添加判断逻辑,以下为修改后的示例代码:
    function GetPosition($islink=true){
        $this->indexUrl = empty($this->indexUrl) ? $this->indexUrl : $this->indexUrl;
        $indexpage = "<a href='".$this->indexUrl."'>首页</a>";
        $this->valuePosition = $indexpage;
        if($islink){
            if($this->TypeLink->TypeInfos['reid']==0){
                $murl = $this->TypeLink->GetOneTypeUrl($this->TypeLink->TypeInfos);
                $this->valuePosition .= " > <a href='".$murl."'>".$this->TypeLink->TypeInfos['typename']."</a>";
            }else{
                $this->valuePosition .= $this->GetNavType($this->TypeLink->TypeInfos['reid'],true);
                $murl = $this->TypeLink->GetOneTypeUrl($this->TypeLink->TypeInfos);
                $this->valuePosition .= " > <a href='".$murl."'>".$this->TypeLink->TypeInfos['typename']."</a>";
            }
        }else{
            $this->valuePosition .= " > ".$this->TypeLink->TypeInfos['typename'];
        }
        return $this->valuePosition;
    }
  • 保存文件后,刷新页面即可看到修改后的效果,将分隔符“>”改为“|”,需将代码中的" > "替换为。

通过自定义函数实现

在织梦模板中,可通过自定义函数实现更灵活的面包屑导航,在templets/default/article_article.htm文件中添加以下代码:

{dede:field name='position' function='str_replace(" > ", " >> ", @me)'/}

上述代码将默认的分隔符“>”替换为“>>”,若需添加当前页高亮样式,可结合CSS实现:

织梦面包导航如何生成?-图3
(图片来源网络,侵删)
<style>
.breadcrumb .current{color:#ff6600;font-weight:bold;}
</style>
<div class="breadcrumb">
    {dede:field name='position' runphp='yes'}
        $tc = @me;
        $tc = preg_replace('/>(.*?)<\/a>/',' class="current">$1</a>',$tc);
        @me = $tc;
    {/dede:field}
</div>

不同页面类型的面包屑调用

织梦不同页面类型的面包屑调用方式略有差异,具体如下表所示:

页面类型 调用代码示例 说明
首页 无需调用,或直接显示“首页” 首页通常不显示面包屑,或仅显示“首页”
栏目页 {dede:field name='position' /} 调用当前栏目及其父级栏目路径
文章页 {dede:field name='position' /} 调用文章所在栏目及父级栏目路径,包含文章标题
自定义页面 {dede:field name='position' /} 需在后台页面属性中设置关联栏目,否则仅显示“首页 > 当前页面”
搜索结果页 需自定义标签 默认不支持,可通过{dede:global name='keyword' function='html2text(@me)'/}等标签手动实现

常见问题与解决方案

  1. 面包屑不显示或显示异常

    • 检查栏目是否设置了“上级栏目”,确保栏目层级正确。
    • 确认模板文件中标签语法无误,如{dede:field name='position' /}是否完整。
    • 若修改过系统文件,检查代码是否有语法错误。
  2. 面包屑链接错误

    • 进入后台“系统”-“系统基本参数”-“核心设置”,确认“网站首页链接”是否正确。
    • 检查栏目“高级选项”中的“外部链接”是否为空,避免覆盖默认路径。

相关问答FAQs

问题1:如何在面包屑导航中隐藏“首页”?
解答:可通过修改typelink.class.php文件中的GetPosition()函数,删除或注释首页相关代码,将$indexpage = "<a href='".$this->indexUrl."'>首页</a>";改为$indexpage = "";,或直接删除该行代码。

问题2:面包屑导航如何支持多级栏目?
解答:织梦默认支持多级栏目面包屑,只要栏目层级设置正确(如父栏目 > 子栏目 > 孙栏目),系统会自动递归生成完整路径,若出现截断,需检查栏目是否为“最终栏目页”,或在后台“栏目管理”中确认栏目关联关系是否正确。

分享:
扫描分享到社交APP
上一篇
下一篇