修改列表页模板(最常用、最推荐)
这是最标准、最灵活的方法,通过修改列表页的模板文件(通常是 list_article.htm),直接在循环中调用当前文章的关键字。

步骤 1:打开列表页模板文件
登录织梦后台,进入【模板】->【默认模板管理】,找到您当前使用的栏目列表页模板,list_article.htm,点击后面的【修改】。
步骤 2:找到文章循环标签
在模板文件中,找到文章列表的循环代码,它通常是这样的结构:
{dede:list pagesize='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
<p>[field:description function='cn_substr(@me, 100)'/]...</p>
<!-- 在这里添加关键字的调用代码 -->
</li>
{/dede:list}
步骤 3:添加关键字调用代码
在 <p> 标签后面(或您希望显示关键字的位置),添加以下代码:
{dede:field name='keywords' runphp='yes'}
if(@me != ''){
$kws = explode(',', @me);
@me = '';
foreach($kws as $k){
@me .= '<a href="/plus/search.php?keyword='.urlencode($k).'" target="_blank">'.$k.'</a> ';
}
}
else{
@me = '';
}
{/dede:field}
代码解析:

-
{dede:field name='keywords' runphp='yes'}name='keywords': 获取当前文章的keywords字段值。runphp='yes': 允许在标签内使用PHP代码。
-
if(@me != '')判断关键字字段是否为空,如果为空,则不显示任何内容。
-
$kws = explode(',', @me);
(图片来源网络,侵删)- 将获取到的关键字字符串(如 "织梦,SEO,建站")用逗号 分割成一个数组
$kws。
- 将获取到的关键字字符串(如 "织梦,SEO,建站")用逗号 分割成一个数组
-
foreach($kws as $k)- 遍历这个数组,将每个关键字赋值给变量
$k。
- 遍历这个数组,将每个关键字赋值给变量
-
@me .= '<a href="/plus/search.php?keyword='.urlencode($k).'" target="_blank">'.$k.'</a> ';- 这是核心部分,它将每个关键字拼接成一个搜索链接。
urlencode($k): 对关键字进行URL编码,防止关键字中包含特殊字符导致链接错误。target="_blank": 让链接在新窗口打开,这是一个良好的用户体验实践。@me .= ...: 将拼接好的链接字符串累加到@me变量中,@me最终会作为标签的输出内容。
-
else{ @me = ''; }如果关键字为空,则将输出内容设置为空字符串。
步骤 4:更新并生成
保存模板文件,然后到后台的【生成】->【一键更新所有栏目】,更新您的列表页即可。
最终效果:
列表页的每一篇文章后面,都会显示类似这样的关键字链接:
<a href="/plus/search.php?keyword=织梦" target="_blank">织梦</a> <a href="/plus/search.php?keyword=SEO" target="_blank">SEO</a>
修改PHP源码文件(不推荐,升级会失效)
这种方法通过修改 arc.listview.class.php 文件,让系统在生成列表页时自动将关键字附加到描述或正文后面。注意:此方法会修改核心文件,织梦升级后这些修改会被覆盖,需要重新修改。
步骤 1:找到并打开PHP文件
在您的网站根目录下,找到文件:/include/arc.listview.class.php
步骤 2:找到 GetListPage 函数
在文件中搜索 function GetListPage,找到这个函数。
步骤 3:修改函数内部代码
在函数内找到类似 $this->Fields['description'] = $this->TrimDD($this->Fields['description']); 的代码行,在其后面添加以下代码块:
// 处理关键字,并附加到描述后面
if($this->Fields['keywords'] != ''){
$kws = explode(',', $this->Fields['keywords']);
$kws_url = '';
foreach($kws as $k){
$kws_url .= '<a href="/plus/search.php?keyword='.urlencode($k).'" target="_blank">'.$k.'</a> ';
}
// 将关键字链接附加到描述字段后面
$this->Fields['description'] .= ' <strong>标签:</strong>'.$kws_url;
}
代码解析:
这段代码的逻辑与方法一中的PHP代码基本相同,它获取当前文章的关键字,生成链接,然后将这些链接附加到 $this->Fields['description'](文章描述)的末尾。
步骤 4:更新并生成
保存文件,然后到后台重新生成列表页。
注意: 这种方法会把关键字加在所有文章描述的末尾,灵活性不如方法一,如果您的描述显示方式不是通过 [field:description],那么可能不会生效。强烈推荐使用方法一。
通过自定义函数(高级用法)
如果您的网站有较多自定义需求,或者想在多个地方复用这个“关键字转链接”的功能,可以将其定义为一个自定义函数。
步骤 1:创建自定义函数文件
在 /include/extend.func.php 文件中(如果不存在则创建一个),添加以下函数:
/**
* 将文章关键字转换为带链接的标签
* @param string $keywords 文章关键字
* @return string 带链接的HTML字符串
*/
function GetKeywordLinks($keywords)
{
if (empty($keywords)) {
return '';
}
$kws = explode(',', $keywords);
$links = '';
foreach ($kws as $kw) {
$kw = trim($kw);
if (empty($kw)) continue;
$links .= '<a href="/plus/search.php?keyword=' . urlencode($kw) . '" target="_blank">' . $kw . '</a> ';
}
return $links;
}
步骤 2:在模板中调用
回到您的列表页模板 list_article.htm,在需要显示关键字的地方,使用以下标签调用:
{dede:list pagesize='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<p>[field:description function='cn_substr(@me, 100)'/]...</p>
<!-- 调用自定义函数 -->
[field:keywords function='GetKeywordLinks(@me)'/]
</li>
{/dede:list}
优点:
- 代码复用:如果其他页面(如文章内容页
article_article.htm)也需要这个功能,可以直接调用,无需重复写代码。 - 逻辑分离:将PHP逻辑从模板中分离出来,使模板文件更整洁。
- 易于维护:如果需要修改链接样式或URL,只需修改
extend.func.php中的函数即可,所有调用该函数的地方都会生效。
总结与建议
| 方法 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
| 修改列表模板 | 灵活、标准、安全、升级不失效 | 需要手动在每个列表页模板中添加 | ⭐⭐⭐⭐⭐ (最推荐) |
| 修改PHP源码 | 自动化,一次修改全站生效 | 不安全,升级会失效,维护麻烦 | ⭐☆☆☆☆ (不推荐) |
| 自定义函数 | 代码复用、逻辑清晰、易于维护 | 需要额外创建函数文件,对新手稍复杂 | ⭐⭐⭐⭐☆ (高级推荐) |
对于绝大多数用户来说,直接使用方法一 是最简单、最直接、最安全的解决方案,如果您有多个模板文件需要修改,或者希望未来能方便地复用此功能,那么方法三是更好的选择,请尽量避免使用方法二。
