dede当前位置链接如何实现与自定义?

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

在 DedeCMS 中,当前位置通常由一个名为 position.lib.php 的文件来驱动,这个文件被包含在模板的头部或指定位置,用于自动生成类似“首页 > 栏目 > 文章标题”的导航路径。

dede当前位置链接
(图片来源网络,侵删)

核心文件与标签

  1. 核心文件: /include/typelink.class.php/include/arc.archives.class.php (用于文章页) 等类文件负责处理链接的生成逻辑。
  2. 核心标签: {dede:field.position/} 或简写为 {dede:position/},这是在模板中调用当前位置的主要标签。
  3. 样式标签: {dede:field.title/} 用于获取当前页面的标题,通常会作为路径的最后一项。

如何调用当前位置

在您的模板文件(如 article_article.htm)中,您只需要在想要显示面包屑导航的地方插入以下标签即可:

{dede:field.position/}

或者使用它的完整形式,功能完全相同:

{dede:field.position runphp='yes'}
    @me = str_replace(' > ', ' » ', @me);
{/dede:field.position}

示例效果: 如果当前文章是“织梦教程”,它属于“网站建设”栏目,而“网站建设”栏目在“技术分享”主栏目下,{dede:field.position/} 会输出:

首页 > 技术分享 > 网站建设 > 织梦教程

自定义分隔符

默认的分隔符是 > (大于号),您可以通过修改标签的 separator 属性来自定义它。

dede当前位置链接
(图片来源网络,侵删)

语法: {dede:field.position separator='您的自定义分隔符'/}

示例1: 使用 (») 符号

{dede:field.position separator='»'/}

输出效果:首页 » 技术分享 » 网站建设 » 织梦教程

示例2: 使用 (斜杠)

dede当前位置链接
(图片来源网络,侵删)
{dede:field.position separator=' / '/}

输出效果:首页 / 技术分享 / 网站建设 / 织梦教程


高级用法:通过 PHP 代码自定义

如果您需要对路径进行更复杂的控制,例如修改最后一项的样式、添加链接或完全自定义输出,可以使用 runphp='yes' 属性。

基本语法:

{dede:field.position runphp='yes'}
    // 在这里编写PHP代码来处理 @me 变量
    // @me 默认包含了完整的路径字符串,如 "首页 > 栏目A > 栏目B"
    // 您可以修改 @me 的值,然后输出
    @me = str_replace(' > ', ' <span class="separator">»</span> ', @me);
{/dede:field.position}

进阶示例:将最后一项(当前页标题)变为无链接的纯文本

这是面包屑导航的一个常见需求,即“当前页”不需要再链接到自身。

{dede:field.position runphp='yes'}
    // 1. 获取完整的路径字符串
    $position = @me;
    // 2. 获取当前页的标题(通常是路径的最后一项)
    $title = '{dede:field.title/}';
    // 3. 用正则表达式匹配并替换掉最后一项的链接
    // 这个正则会匹配 " > <a href...>标题</a>" 这样的模式,并将其替换为 " > 标题"
    @me = preg_replace('/( > <a [^>]+>)([^<]+)(<\/a>)/', ' > '.$title, $position);
{/dede:field.position}

代码解释:

  1. $position = @me;: 将默认生成的路径字符串存入变量。
  2. $title = '{dede:field.title/}';: 获取当前文章或页面的标题,注意,这里需要使用 {dede:field.title/} 标签来获取值。
  3. preg_replace(...): 这是核心的替换逻辑。
    • 模式 /( > <a [^>]+>)([^<]+)(<\/a>)/ 用来匹配路径中最后一个链接部分。
    • > 匹配分隔符。
    • <a [^>]+> 匹配 <a href="..."> 这部分。
    • ([^<]+) 匹配链接的文本(即标题)并捕获它。
    • <\/a> 匹配 </a>
    • 替换字符串 ' > '.$title 将匹配到的整个链接替换为“分隔符 + 标题(纯文本)”。

常见问题与解决方案

问题1:当前位置不显示或显示异常

  • 原因1: 模板文件中没有正确调用 {dede:field.position/}
  • 原因2: 栏目设置错误,如果文章所属的栏目没有正确设置上级栏目,路径就会中断。
  • 原因3: 栏目“选择主页链接”为空,请确保栏目的“高级选项” -> “选择主页链接”已正确设置,通常设为“列表第一页”。
  • 原因4: 自定义模型的文章,如果您使用了自定义模型,请确保模型字段中有与栏目关联的字段,并且模板中正确调用了。

问题2:首页链接不正确

  • 原因: 首页的链接是固定的,通常是您的网站域名,如果您的首页使用了自定义的首页文件(如 index.html),需要检查后台“系统” -> “系统基本参数” -> “核心设置”中的“网站首页”是否正确。

问题3:如何去掉“首页”?

在某些情况下,您可能不需要显示“首页”这一项。

方法:使用 runphp 属性手动构建路径

{dede:field.position runphp='yes'}
    // 去掉开头的 "首页 > "
    $position = @me;
    $pattern = '/首页( > )/';
    @me = preg_replace($pattern, '', $position);
{/dede:field.position}

这个正则表达式会找到路径开头的“首页 > ”并将其替换为空字符串。


需求 代码示例
基本调用 {dede:field.position/}
修改分隔符 {dede:field.position separator='»'/}
PHP自定义 {dede:field.position runphp='yes'} @me = '自定义内容';{/dede:field.position}
最后一项无链接 见上面的“进阶示例”代码块
去掉“首页” 见上面的“常见问题”代码块

通过掌握 {dede:field.position/} 标签及其 separatorrunphp 属性,您就可以灵活地控制 DedeCMS 网站中所有页面的面包屑导航了。

-- 展开阅读全文 --
头像
dede前台首页空白,原因何在?
« 上一篇 04-16
C语言search函数如何使用?
下一篇 » 04-16
取消
微信二维码
支付宝二维码