使用 {dede:field} 标签来获取当前栏目的相关信息,特别是 typedir(栏目目录)或 typeurl(栏目链接)。

(图片来源网络,侵删)
下面我将为你提供详细的步骤和代码示例。
使用 {dede:field.typeurl/} 标签(最推荐)
这是最直接、最简单的方法。{dede:field.typeurl/} 标签会直接输出当前栏目的完整链接地址。
适用场景:
- 在列表页(
list_*.htm) - 在文章页(
article_*.htm) - 在频道封面页(
index_*.htm)
操作步骤:
-
找到并打开你的模板文件 登录 DedeCMS 后台,进入【模板】->【模板管理】,找到你正在使用的频道封面模板文件,通常这个文件名为
index_*.htm, 是你的栏目ID。 -
编辑模板代码 在模板文件中,你需要添加链接的地方,使用以下代码:
(图片来源网络,侵删)<a href="{dede:field.typeurl/}"> <!-- 这里是你的封面图片或其他内容 --> <img src="/uploads/cover.jpg" alt="{dede:field.seotitle/}" /> <span>{dede:field.typename/}</span> </a>
代码解释:
{dede:field.typeurl/}: 这个标签会自动解析为当前栏目的完整URL链接,如果你的栏目在后台设置的“目录”是news,那么它会输出http://你的域名/news/。{dede:field.typename/}: 获取当前栏目的名称,用作<a>标签的文本内容或图片的alt属性,这对SEO很有好处。{dede:field.seotitle/}: 获取当前栏目的SEO标题,通常用作alt属性,比栏目名称更具描述性。
使用 {dede:field.typedir/} 标签(需要手动处理)
{dede:field.typedir/} 标签获取的是栏目在后台设置的“目录”值,这个值可能是一个相对路径(如 news),也可能是一个以 {cmspath} 开头的路径(如 {cmspath}/news),你需要手动将它处理成完整的URL。
适用场景:
与方法一基本相同,但当你需要对URL进行额外处理时,这个方法更灵活。
操作步骤:
-
打开模板文件:同方法一。
-
编辑模板代码:
(图片来源网络,侵删)<a href="{dede:field.typedir function='str_replace("{cmspath}", "@me", @me)'/}"> <!-- 这里是你的封面图片或其他内容 --> <img src="/uploads/cover.jpg" alt="{dede:field.typename/}" /> <span>{dede:field.typename/}</span> </a>
代码解释:
{dede:field.typedir/}: 获取栏目目录。function='str_replace("{cmspath}", "@me", @me)': 这是一个非常重要的PHP函数调用。- 它的作用是:
typedir的值里包含{cmspath}(这是一个代表网站根目录的占位符),就把它替换成实际的网站根目录路径。 @me在这里代表{dede:field.typedir/}标签本身的原始值。- 经过这个处理后,无论是
news还是{cmspath}/news,都能正确地变成http://你的域名/news/这样的完整链接。
- 它的作用是:
完整示例:一个频道封面列表
假设你的频道封面模板里有一个循环,需要为每个子栏目都生成一个带链接的封面块。
<!-- 在你的 index_*.htm 模板文件中找到类似 {dede:channel} 的循环标签块 -->
<ul class="channel-cover-list">
{dede:channel type='son' currentstyle=''}
<li>
<!-- 使用方法一,最简单直接 -->
<a href="[field:typeurl/]">
<!-- 假设你为每个栏目都上传了封面图,字段名为 'pic' -->
<img src="[field:pic/]" alt="[field:typename function='html2text(@me)'/]" />
<h3>[field:typename/]</h3>
</a>
</li>
{/dede:channel}
</ul>
注意:在上面的完整示例中,我使用了 [field:xxx/] 这种简写形式,这在 {dede:channel} 等循环标签内部是等效于 {dede:field.xxx/} 的,为了代码清晰,建议统一使用一种风格。
总结与排查
| 用途 | 优点 | 缺点 | |
|---|---|---|---|
{dede:field.typeurl/} |
直接输出完整URL | 简单、直接、不易出错 | 无明显缺点,是首选方案 |
{dede:field.typedir/} |
输出栏目目录(可能含{cmspath}) |
灵活,可对路径进行额外处理 | 需要配合 function 函数处理,稍显复杂 |
如果链接不生效,请检查以下几点:
- 是否在正确的模板文件中修改? 确保你修改的是对应栏目的
index_*.htm文件。 - 标签拼写是否正确? 检查
typeurl和typedir是否拼写错误。 - 栏目设置是否正确? 确保该栏目在后台的“栏目类型”中选择了“频道封面”。
- 是否更新了缓存? 修改模板后,务必到后台【生成】->【更新HTML】中更新对应的页面。
希望这个详细的解答能帮助你解决问题!
