dede当前位置标签如何正确使用?

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

在 DedeCMS 中,“当前位置”通常指的是“面包屑导航”(Breadcrumb Navigation),它用于显示用户在网站中的当前位置,首页 > 新闻中心 > 公司新闻,这对于用户体验和 SEO 都非常重要。

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

DedeCMS 提供了专门的标签来实现这个功能,最常用的是 {dede:field name='position'/}


核心标签:{dede:field name='position'/}

这是最基础、最常用的当前位置标签,它会自动根据当前页面的层级(首页、栏目、文章等)生成面包屑导航。

基本用法

直接在模板文件(通常是 article_article.htm 文章页、list_category.htm 列表页等)的相应位置放入以下代码即可:

<div class="breadcrumb">
    {dede:field name='position'/}
</div>

默认输出效果

在不同页面,这个标签的输出内容不同:

  • 在首页 (index.php):通常不显示或只显示“首页”。
  • 在栏目列表页 (list.php?tid=X):显示 首页 > 栏目名称
  • 页 (article.php?aid=X):显示 首页 > 栏目名称 > 文章标题

自定义分隔符

默认的分隔符是 >,如果你想使用其他符号(如 或 >),可以通过 separator 属性来修改。

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

示例:使用 > 作为分隔符

{dede:field name='position' separator='>' /}

示例:使用 作为分隔符

{dede:field name='position' separator='|' /}

自定义链接样式

默认情况下,生成的链接是 <a> 标签,文本是 首页栏目名 等,如果你想给链接添加 CSS 类名,可以使用 linktype 属性。

示例:给链接添加 class="nav-link"

dede当前位置标签
(图片来源网络,侵删)
{dede:field name='position' linktype='a' /}

这会生成类似这样的 HTML:

<a href='/' class='nav-link'>首页</a> > <a href='/news/' class='nav-link'>新闻中心</a> > 公司新闻

进阶用法:{dede:position} ... {/dede:position} 循环标签

当你需要更精细地控制面包屑的每一个部分时(比如给最后一项“文章标题”不加链接),可以使用循环标签 {dede:position}

基本用法

<div class="breadcrumb">
    <a href='{dede:global.cfg_cmsurl/}/'>首页</a>
    {dede:position}
        <a href='[field:link/]'>[field:title/]</a>
    {/dede:position}
</div>

标签详解

  • {dede:position}: 开始循环,它会遍历当前位置的每一个节点(首页、上级栏目、当前栏目等)。
  • [field:link/]: 当前节点的链接地址。
  • [field:title/]: 当前节点的标题。
  • {/dede:position}: 结束循环。

进阶示例:让最后一项不可点击

假设我们想在文章页,文章标题本身不显示为链接,只有前面的导航是链接,我们可以利用 position 标签的 runphp 属性来判断。

<div class="breadcrumb">
    <a href='{dede:global.cfg_cmsurl/}/'>首页</a>
    {dede:position runphp='yes'}
        $GLOBALS['autoindex']++; // 获取当前循环的索引号
        $total = @me; // 获取总节点数
        $a = "<a href='[field:link/]'>[field:title/]</a>";
        $b = "[field:title/]";
        if ($GLOBALS['autoindex'] == $total) {
            // 如果是最后一个节点
            @me = $b;
        } else {
            // 如果不是最后一个节点
            @me = $a;
        }
    {/dede:position}
</div>

代码解释:

  1. runphp='yes' 启用了 PHP 代码执行。
  2. $GLOBALS['autoindex']++$total = @me; 是 DedeCMS 循环标签中获取索引和总数的小技巧。
  3. 通过判断 if ($GLOBALS['autoindex'] == $total) 来判断当前是否是最后一个节点。
  4. 如果是,则输出纯文本 [field:title/]
  5. 如果不是,则输出带链接的 <a>

常见问题与解决方案

问题1:首页不显示“首页”

原因分析{dede:field name='position'/} 在首页默认不输出任何内容,因为用户已经在首页。

解决方案: 如果你希望在首页也显示“首页”,可以手动添加。

<div class="breadcrumb">
    {dede:field name='position' runphp='yes'}
        if(@me == '') {
            @me = "<a href='{dede:global.cfg_cmsurl/}/'>首页</a>";
        } else {
            @me = "<a href='{dede:global.cfg_cmsurl/}/'>首页</a>" . @me;
        }
    {/dede:field}
</div>

问题2:栏目名称或文章标题过长,导致面包屑换行

解决方案: 这是 CSS 样式问题,不是标签本身的问题,你可以通过 CSS 来控制面包屑容器的样式,

.breadcrumb {
    font-size: 14px;
    line-height: 1.5;
    white-space: nowrap; /* 防止文字换行 */
    overflow: hidden;    /* 隐藏超出部分 */
    text-overflow: ellipsis; /* 用省略号表示被隐藏的部分 */
}
.breadcrumb a {
    color: #666;
    text-decoration: none;
}
.breadcrumb a:hover {
    color: #ff6600;
    text-decoration: underline;
}

需求场景 推荐标签 示例代码
简单使用,快速实现 {dede:field name='position'/} {dede:field name='position' separator='>' /}
自定义链接样式 {dede:field name='position'/} {dede:field name='position' linktype='a' class='nav-link' /}
精细控制每个节点 {dede:position}...{/dede:position} <a href='[field:link/]'>[field:title/]</a>
复杂逻辑(如最后一项无链接) {dede:position runphp='yes'}...{/dede:position} 见上文“进阶示例”部分

对于绝大多数情况,直接使用 {dede:field name='position'/} 就足够了,只有在需要高度定制化时,才需要使用循环标签 {dede:position}

-- 展开阅读全文 --
头像
c语言if语句教学设计
« 上一篇 今天
PHP和C语言哪个好学?
下一篇 » 今天

相关文章

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