核心原理

在DedeCMS中,列表页的地址是由 栏目 的属性决定的,每个栏目都有一个“列表选项”设置,这决定了列表页的生成规则:

dedecms封面模板中列表页地址
(图片来源网络,侵删)
  1. 栏目列表 (默认):列表页会生成一个静态文件,如 /plus/list-1-1.html
  2. 外部链接:栏目直接指向一个外部URL,如 https://www.example.com
  3. 频道封面:栏目不生成列表页,其列表页就是封面页本身(即首页或栏目封面页)。

获取列表页地址的关键在于,先获取当前栏目的信息,然后根据其“列表选项”来生成或获取正确的URL。


使用 {dede:field name='typeurl' /} (最推荐、最简单)

这是DedeCMS内置的、最标准也是最简单的方法,专门用于获取当前栏目的列表页地址。

适用场景:

  • 栏目封面模板(如 index.htm)中,获取当前栏目的列表页地址。
  • 列表页模板(如 list_article.htm)中,获取当前栏目的列表页地址(它自己)。
  • 文章页模板(如 article_article.htm)中,获取文章所属栏目的列表页地址。

使用示例:

在栏目封面模板中调用

假设你的栏目封面模板是 templets/default/default/index.htm,你想在某个地方添加一个“查看更多”或“进入列表”的链接。

dedecms封面模板中列表页地址
(图片来源网络,侵删)
<div class="channel-more">
    <a href="{dede:field name='typeurl' /}">查看更多</a>
</div>

这里的 {dede:field name='typeurl' /} 会自动解析为当前栏目的列表页URL,如果当前栏目是“公司新闻”(ID为3),那么它会输出 /plus/list-3-1.html

页调用

在文章页模板(如 article_article.htm)中,如果你想添加一个“返回列表”的链接:

<div class="back-to-list">
    <a href="{dede:field name='typeurl' /}">返回栏目列表</a>
</div>

这里的 {dede:field name='typeurl' /} 会获取这篇文章所属栏目的列表页地址。

dedecms封面模板中列表页地址
(图片来源网络,侵删)

使用 {dede:global name='itemurl' /} (仅适用于封面页)

这个全局变量仅在封面页模板(即 index.htm)中有效,它直接指向当前栏目的列表页地址。

适用场景:

  • 仅限于栏目封面模板

使用示例:

index.htm 中:

<a href="{dede:global name='itemurl' /}">进入本栏目列表</a>

注意:这个标签在列表页或内容页中是无效的,会输出空值。优先使用方法一 {dede:field name='typeurl' /},因为它更通用。


使用 {dede:field name='typeid' /} 手动拼接URL(灵活但麻烦)

当你需要更灵活的控制,或者在某些特殊情况下无法使用 typeurl 时,可以手动拼接URL。

适用场景:

  • 需要对URL进行特殊处理。
  • 在一些非标准的循环标签内(如 {dede:arclist})获取外层栏目的URL。

使用示例:

在栏目封面模板中:

<a href="/plus/list-{dede:field name='typeid' /}-1.html">手动拼接的链接</a>

解析

  • {dede:field name='typeid' /}:获取当前栏目的ID。
  • /plus/list-:DedeCMS列表页的固定前缀。
  • -1.html-1 表示页码为第一页,通常可以省略,因为访问 /plus/list-1.html 会自动跳转到 /plus/list-1-1.html,但写上更规范。

重要提示:这种方法有一个致命缺陷,如果当前栏目的“列表选项”被设置成了“外部链接”或“频道封面”,那么手动拼接出来的 /plus/list-x-1.html 这个URL是不存在的!用户点击后会得到404错误。

除非你非常确定所有栏目的列表选项都是“栏目列表”,否则不推荐使用这种方法。


特殊情况处理:顶级栏目与子栏目

如果你的网站有复杂的栏目层级(如“产品”是顶级栏目,“手机”和“电脑”是它的子栏目),并且希望点击顶级栏目时能进入其列表页(包含所有子栏目的文章),你需要确保顶级栏目的“列表选项”设置为“栏目列表”。

  • 顶级栏目的列表页/plus/list-1-1.html (假设“产品”栏目ID为1)
  • 子栏目的列表页/plus/list-2-1.html (假设“手机”栏目ID为2)

在顶级栏目封面模板 index.htm 中,使用 {dede:field name='typeurl' /} 会正确地指向 /plus/list-1-1.html

总结与最佳实践

方法 适用场景 优点 缺点
最推荐 {dede:field name='typeurl' /} 所有需要获取栏目列表页的地方(封面、列表、文章页) 官方标准、自动适配、最安全 无明显缺点
仅限封面 {dede:global name='itemurl' /} 仅在栏目封面模板 index.htm 简单直接 通用性差,在非封面页无效
灵活但危险 手动拼接 特殊需求,需自行处理URL 灵活可控 不安全,无法处理“外部链接”等特殊情况,容易产生404

最终建议:

在任何需要获取DedeCMS栏目列表页地址的地方,都请优先使用 {dede:field name='typeurl' /} 这是最符合DedeCMS设计逻辑、最安全、最可靠的方法。