dede网站当前位置如何自定义显示与修改?

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

当前位置的作用

  1. 用户体验:让用户知道自己“身在何处”,了解网站的层级结构,降低用户的迷失感。
  2. SEO优化:为搜索引擎提供清晰的网站结构信息,有助于蜘蛛理解网站层级,并对内页的权重传递有一定帮助。
  3. 网站结构化:强制站长规划好网站的栏目和文章分类,使网站结构更加清晰、规范。

当前位置的实现原理

在 DedeCMS 中,“当前位置”是通过一个专门的函数 GetHeadlink() 来实现的。

dede网站当前位置
(图片来源网络,侵删)
  • 函数名称GetHeadlink()
  • 存放位置:这个函数定义在 /include/typelink.class.php 文件中。
  • 工作方式:当你在模板中调用这个函数时,它会根据当前页面的ID(如文章ID、栏目ID),自动向上追溯其所有父级栏目,直到首页,然后按照“首页 > 一级栏目 > 二级栏目 > ... > 当前页面”的格式,生成一个完整的导航链接列表。

如何在模板中调用当前位置

根据不同的页面类型(首页、列表页、内容页),调用的方法和标签略有不同。

首页

首页通常不需要显示当前位置,或者只显示“首页”,你可以这样写:

<a href='{dede:global.cfg_cmsurl/}/'>首页</a>

或者直接调用函数,它也只会返回“首页”:

{dede:field name='position'/}

列表页

列表页是栏目页,当前位置会显示从首页到当前栏目的路径。

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

使用 position 字段(最常用)

在列表页模板文件(通常是 /templets/default/list_article.htm)中,直接使用 position

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

使用 GetHeadlink() 函数

这种方法更灵活,可以自定义分隔符和样式。

<div class="position">
    {dede:field name='typeid' function="GetHeadlink(@me)"/}
</div>

内容页(文章页)

页的当前位置会显示从首页到文章所属栏目的完整路径。

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

使用 position 字段(最常用)

在文章页模板文件(通常是 /templets/default/article_article.htm)中,直接使用 position

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

使用 GetHeadlink() 函数

同样,这种方法可以更灵活地控制输出。

<div class="position">
    {dede:field name='typeid' function="GetHeadlink(@me)"/}
</div>

自定义当前位置的样式和分隔符

默认的 position 标签输出格式是固定的,如果你想要自定义它的样式、分隔符,或者在某些特殊情况下不显示,可以采用以下方法。

自定义分隔符

默认的分隔符是 >,如果你想改成其他符号,,可以使用 str_replace 函数。

<div class="position">
    {dede:field name='position' runphp='yes'}
        $current = @me;
        $str = str_replace(' > ', ' / ', $current);
        @me = $str;
    {/dede:field}
</div>

去掉“首页”链接

有时候你可能不希望“首页”是可点击的链接,只是一个文字,可以这样处理:

<div class="position">
    <a href='{dede:global.cfg_cmsurl/}/'>首页</a>
    {dede:field name='position' runphp='yes'}
        $current = @me;
        // 去掉 "首页 > " 这部分
        $str = str_replace('<a href='{dede:global.cfg_cmsurl/}/'>首页</a> > ', '', $current);
        @me = $str;
    {/dede:field}
</div>

使用更灵活的 GetHeadlink() 函数(推荐)

GetHeadlink() 函数本身可以接受参数,实现更精细的控制。

<div class="position">
    {dede:field name='typeid' function="GetHeadlink(@me, ' &raquo; ', ' &raquo; ', '')"/}
</div>

GetHeadlink() 函数的参数说明(顺序很重要):

  • 参数1:栏目ID (@me)。
  • 参数2:分隔符,用于首页和一级栏目之间、一级和二级栏目之间等。(这里是 &raquo;
  • 参数3:用于最后一个栏目(当前栏目)前的分隔符,如果留空 ,则当前栏目不显示分隔符。
  • 参数4:是否显示首页链接。'yes' 显示,'no' 不显示。

示例解释: {dede:field name='typeid' function="GetHeadlink(@me, ' > ', ' > ', 'no')"/} 这段代码的输出效果是:一级栏目 > 二级栏目 > 当前栏目名称(“首页”被去掉了)。


常见问题与解决

问题1:当前位置显示不正确,比如显示为“首页 > 未分类”或“首页 > 栏目名称 > 未分类”

原因分析: 这通常是因为文章或栏目没有被正确地分配到具体的栏目下,文章的所属栏目ID(typeid 字段)可能为0,或者指向了一个不存在的栏目。

解决方法

  1. 检查文章:进入后台“[内容] -> [所有文档]”,找到问题文章,检查其“选择栏目”是否正确。
  2. 检查栏目:进入后台“[核心] -> [栏目管理]”,确保文章所属的栏目存在,并且没有被删除或禁用。
  3. 检查栏目绑定:如果使用了“栏目交叉”或“外部栏目”,请确保绑定关系正确。

问题2:当前位置的样式不生效,或者被其他CSS覆盖

原因分析: 你为 .position 类写的CSS样式可能被其他更优先的CSS规则覆盖了,或者CSS文件没有正确加载。

解决方法

  1. 检查CSS优先级:使用浏览器开发者工具(F12)检查 .position 的最终应用样式,看看是哪个CSS规则在起作用,并调整你的CSS选择器以提高优先级。
  2. 确认CSS路径:确保你的模板文件中正确引入了包含 .position 样式的CSS文件。

问题3:想只在列表页和内容页显示当前位置,首页不显示

解决方法: 在模板文件中,可以使用 dede 的条件判断标签。

在首页模板 (index.htm) 中,不添加当前位置代码。

在列表页 (list_article.htm) 中:

{dede:field.title runphp='yes'}
    if(@me != '') {
        echo '<div class="position">';
        echo '{dede:field.name/position}';
        echo '</div>';
    }
{/dede:field.title}

页 (article_article.htm) 中:**

{dede:field.title runphp='yes'}
    if(@me != '') {
        echo '<div class="position">';
        echo '{dede:field.name/position}';
        echo '</div>';
    }
{/dede:field.title}

页面类型 最常用方法 自定义方法
首页 通常不显示 <a href='{dede:global.cfg_cmsurl/}/'>首页</a>
列表页 {dede:field.name='position'/} {dede:field.name='typeid' function="GetHeadlink(@me, ' &raquo; ', ' &raquo; ', '')"/}

理解 position 字段和 GetHeadlink() 函数的用法,是掌握 DedeCMS 导航的关键,希望这份详细的解释能帮助你更好地管理和自定义你的网站导航。

-- 展开阅读全文 --
头像
c语言circle函数如何实现圆的绘制?
« 上一篇 今天
C语言locate函数是什么?如何实现?
下一篇 » 今天
取消
微信二维码
支付宝二维码