Dede栏目位置如何调用?

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

使用默认全局标签 {dede:field name='position'/} (最常用、最简单)

这是 DedeCMS 内置的最直接的方法,专门用于调用当前位置。

Dede栏目位置调用
(图片来源网络,侵删)

标签语法

{dede:field name='position'/}

作用与效果

这个标签会自动根据当前页面的层级,生成一个面包屑导航链接。

  • 在首页:不显示任何内容(或只显示“首页”,取决于系统设置)。
  • 在“新闻中心”栏目页:显示 首页 > 新闻中心
  • 在“新闻中心 > 公司动态”文章页:显示 首页 > 新闻中心 > 公司动态

自定义分隔符

默认的分隔符是 >,你可以通过 separator 属性来自定义它。

示例代码:

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

效果: 首页 / 新闻中心 / 公司动态

Dede栏目位置调用
(图片来源网络,侵删)

自定义链接文字(如将“首页”改为“网站首页”)

默认的“首页”文字是固定的,如果你想修改它,可以在后台进行设置,或者使用更灵活的 type 属性。

示例代码:

<div class="breadcrumb">
    {dede:field name='position' type='top'/}
</div>
  • type='top':会强制显示顶级栏目(通常是首页),并链接到首页。
  • 如果你还想修改“首页”的文字,最简单的方法是去后台的“系统” -> “系统基本参数” -> “核心设置”里找到“首页链接显示文本”进行修改。

使用循环标签 {dede:channel} (更灵活,可完全自定义样式)

当默认的 {dede:field name='position'} 无法满足你的样式或功能需求时(比如想在每个链接后加一个小图标,或者想控制最后一个链接是否可点击),你可以使用 {dede:channel} 标签来手动构建面包屑导航。

核心思路

  1. 获取当前页面的所有父级栏目ID。
  2. 使用 {dede:channel} 标签循环输出这些父级栏目。
  3. 最后再输出当前页面的名称(如果是文章页)。

示例代码 (文章页面包屑)

这段代码可以实现一个功能完整的、样式可控的面包屑导航。

Dede栏目位置调用
(图片来源网络,侵删)
<div class="breadcrumb">
    <a href="{dede:global.cfg_cmsurl/}/">首页</a>
    <span class="separator">></span>
    <!-- 循环输出父级栏目 -->
    {dede:field name='typelink'/} 
    <!-- 这句会自动输出所有父级栏目的链接,如:<a href='news/'>新闻中心</a><a href='news/gongsi/'>公司动态</a> -->
    <!-- 输出当前页面名称(文章标题) -->
    <span class="separator">></span>
    <span class="current">{dede:field name='title'/}</span>
</div>

代码解析:

  • {dede:global.cfg_cmsurl/}:获取网站根目录URL,用于构建首页链接。
  • {dede:field name='typelink'/}:这是关键!它会自动解析当前文章所属的所有父级栏目,并生成带链接的 <a> 标签,它已经包含了分隔符 >
  • {dede:field name='title'/}:获取当前文章的标题,作为面包屑的最后一项。

更精细的循环控制(不使用 typelink): 如果你想对每个链接进行更精细的控制,比如添加 class 或修改样式,可以这样写:

<div class="breadcrumb">
    <a href="{dede:global.cfg_cmsurl/}/">首页</a>
    <!-- 循环父级栏目 -->
    {dede:channel type='top' currentstyle='<span class="separator">></span><a class="current" href=~typelink~>~typename~</a>'}
        <span class="separator">></span>
        <a href="[field:typelink/]">[field:typename/]</a>
    {/dede:channel}
    <!-- 如果是文章页,再显示文章标题 -->
    {dede:field name='title' runphp='yes'}
        if(@me != '') {
            @me = '<span class="separator">></span><span class="current">'.@me.'</span>';
        }
    {/dede:field}
</div>

这个版本更复杂,但提供了最大的灵活性,可以控制每个链接的样式。


在列表页和栏目页调用

上面的方法主要针对文章页(article_article.htm),在列表页(article_list.htm)和栏目页(category.htm)调用,方法类似,但略有不同。

在列表页 (article_list.htm)

列表页的面包屑通常只需要显示到它所属的栏目即可。

简单方法 (推荐):

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

这会显示类似 首页 > 新闻中心 > 公司动态 的效果。

手动构建方法:

<div class="breadcrumb">
    <a href="{dede:global.cfg_cmsurl/}/">首页</a>
    <span>></span>
    {dede:field name='title' function='GetCatLink(@me)'/}
</div>

这里使用了 function='GetCatLink(@me)',这是一个自定义函数,可以直接生成当前栏目的链接。

在栏目页 (category.htm)

栏目页的面包屑只需要显示到它自己即可。

简单方法 (推荐):

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

这会显示类似 首页 > 新闻中心 的效果。


总结与最佳实践

场景 推荐方法 优点 缺点
绝大多数情况 {dede:field name='position'} 最简单、最直接、系统原生支持 样式和文字自定义能力有限
需要高度自定义样式 {dede:channel} 循环标签 灵活性极高,可完全控制HTML结构、CSS类名 代码稍复杂,需要理解标签逻辑
列表页/栏目页 {dede:field name='position'} 简单有效,完全满足需求 -

最终建议:

  1. 先尝试使用 {dede:field name='position'},它能解决80%的需求。
  2. 如果默认的样式或分隔符不满足你,使用 separator 属性进行微调。
  3. 只有当你需要对面包屑的每一个细节(如添加图标、修改最后一个链接为不可点击的纯文本等)进行完全控制时,才去使用 {dede:channel} 手动构建。

希望这份详细的讲解能帮助你完全掌握 DedeCMS 栏目位置的调用!

-- 展开阅读全文 --
头像
dede后台乱码咋办?编码问题还是文件损坏?
« 上一篇 04-17
C语言fgetline函数如何实现?
下一篇 » 04-18
取消
微信二维码
支付宝二维码

目录[+]