核心标签:{dede:field.arcurl /}
获取当前文章地址最核心、最常用的标签是 {dede:field.arcurl /},这个标签会自动解析并输出当前正在浏览的文章的完整 URL。

(图片来源网络,侵删)
页 (article_article.htm)
这是最简单直接的情况,在文章内容页模板中,你可以直接使用 {dede:field.arcurl /} 来获取当前文章的链接。
示例:
假设你想在文章标题旁边添加一个“复制链接”的按钮。
{dede:field.title/}
<a href="{dede:field.arcurl/}" target="_blank" title="查看原文">复制链接</a>
说明:

(图片来源网络,侵删)
{dede:field.title/}:获取当前文章的标题。{dede:field.arcurl/}:获取当前文章的完整 URL,https://www.yourdomain.com/a/2025/1234.html。target="_blank":让链接在新标签页中打开,这是一个很好的用户体验实践。
在文章列表页 (list_article.htm)
在列表页中,情况会稍微复杂一些,因为列表页会循环输出多篇文章,你需要使用 {dede:list} 循环标签,并在循环内部使用 {dede:field.arcurl/} 来获取每一篇文章的地址。
示例:
在列表页模板中,你想让每篇文章的标题都指向其对应的文章详情页。
<ul>
{dede:list pagesize='10'}
<li>
<!-- a 标签的 href 属性中使用 {dede:field.arcurl/} -->
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
</li>
{/dede:list}
</ul>
说明:
{dede:list}:开始一个文章列表的循环。[field:arcurl/]:在{dede:list}循环内部,{dede:field.arcurl/}可以简写为[field:arcurl/],它们的作用是完全一样的。[field:title/]:同样,在循环内部获取文章标题。[field:pubdate ...]:获取并格式化文章发布日期。
在其他自定义页面或模型中
如果你在自定义的模型页面(例如产品页、下载页等)或者非标准的页面中需要获取文章地址,方法也是类似的。
自定义模型页面 (如 product.htm)
如果你的自定义模型继承了文章模型(通常都会继承),那么你可以直接使用 {dede:field.arcurl /}。
示例:
<h1>{dede:field.title/}</h1>
<p>产品详情页地址:<a href="{dede:field.arcurl/}">{dede:field.arcurl/}</a></p>
在首页、频道页等非列表/内容页
在这些页面,你无法直接使用 {dede:field.arcurl /},因为系统不知道你指的是“哪一篇文章”,你必须通过一个具体的文章记录来获取其 URL。
这时,你需要使用 {dede:arclist} 或 {dede:sql} 标签来查询一篇文章,然后在其循环内部获取它的 URL。
方法 A:使用 {dede:arclist}
<!-- 获取 ID 为 1 的文章的链接 -->
{dede:arclist idlist='1'}
<a href="[field:arcurl/]" title="[field:title/]">查看指定文章</a>
{/dede:arclist}
方法 B:使用 {dede:sql} (更灵活)
<!-- 获取标题为“关于我们”的文章的链接 -->
{dede:sql sql="Select * from dede_archives where title='关于我们'"}
<a href="[field:arcurl/]" title="[field:title/]">查看关于我们</a>
{/dede:sql}
常见问题与注意事项 (FAQ)
为什么我的 {dede:field.arcurl /} 输出的是动态链接而不是静态链接?
DedeCMS 的 URL 生成规则由后台设置决定。
- 检查后台设置:登录 DedeCMS 后台 -> 系统 -> 系统基本参数 -> 核心设置。
- 查看“是否使用伪静态”:这里的选项决定了 URL 的形式。
- 是:会生成类似
https://www.yourdomain.com/a/2025/1234.html的静态链接(前提是你已经配置好了服务器的伪静态规则,如 Nginx 或 Apache 的 rewrite 规则)。 - 否:会生成类似
https://www.yourdomain.com/plus/view.php?aid=1234的动态链接。
- 是:会生成类似
- 检查栏目目录:确保栏目的“目录”一项填写正确,并且目录名不包含中文或特殊字符。
{dede:field.arcurl /} 和 [field:arcurl/] 有什么区别?
- 作用域不同:
{dede:field.arcurl /}:通常用在单篇文章内容页 (article_article.htm),此时它处于全局上下文中,不需要循环。[field:arcurl/]:是{dede:field.arcurl /}的简写形式,必须用在{dede:list}或{dede:arclist}等循环标签的内部,用于获取循环中当前项的 URL。
- 可读性:在循环外部,使用
{dede:field.arcurl /}更能清晰地表达意图。
如何获取带参数的链接?
有时你可能需要在文章链接后面附加自定义的参数,例如用于追踪来源,你可以通过字符串拼接的方式实现。
示例:
<!-- 在链接后添加 ?source=home 参数 -->
<a href="{dede:field.arcurl/}?source=home">来自首页的链接</a>
<!-- 在链接后添加 #comment 锚点,跳转到评论区 -->
<a href="{dede:field.arcurl/}#comment">发表评论</a>
| 场景 | 推荐标签 | 示例 |
|---|---|---|
页 (article_article.htm) |
{dede:field.arcurl /} |
<a href="{dede:field.arcurl/}">查看原文</a> |
文章列表页 (list_article.htm) |
[field:arcurl/] (在 {dede:list} 循环内) |
<a href="[field:arcurl/]">[field:title/]</a> |
| 自定义模型页 | {dede:field.arcurl /} |
<a href="{dede:field.arcurl/}">产品链接</a> |
| 其他页面 (需指定文章) | [field:arcurl/] (在 {dede:arclist} 或 {dede:sql} 循环内) |
{dede:arclist idlist='1'}<a href="[field:arcurl/]">链接</a>{/dede:arclist} |
希望这份详细的指南能帮助你完美解决在 DedeCMS 中获取文章地址的问题!
