下面我将为你提供最常用和最清晰的几种方法。

(图片来源网络,侵删)
使用传统模板引擎标签(最推荐,最安全)
这是DedeCMS最标准、最安全的方式,因为它直接在模板层面处理,不会涉及到修改PHP文件,对后续升级影响最小。
场景1:在文章内容页(article_article.htm)调用
页,你可以直接使用 {dede:field.keywords /} 标签来获取当前文章的关键词。
示例代码:
<div class="article-keywords">
<strong>本文关键词:</strong>
<span>
{dede:field.keywords runphp='yes'}
// 这里的 runphp='yes' 允许我们在标签内执行PHP代码
// $this 是当前字段的值,即关键词字符串
if(@me != '') {
// 将关键词字符串(用英文逗号分隔)转换为数组
$keywords = explode(',', @me);
// 遍历数组,为每个关键词加上链接
$result = '';
foreach($keywords as $keyword) {
// 去除关键词两端的空格
$keyword = trim($keyword);
if($keyword != '') {
// 使用Dede的全局函数,为关键词生成一个搜索链接
// 'search' 是你网站搜索页面的文件名,通常是 search.php
$result .= "<a href='/search.php?keyword=".urlencode($keyword)."' target='_blank'>".$keyword."</a> ";
}
}
// 将最终结果赋值给 @me,以便在模板中显示
@me = $result;
} else {
// 如果没有关键词,则显示提示信息或留空
@me = '暂无关键词';
}
{/dede:field.keywords}
</span>
</div>
代码解析:

(图片来源网络,侵删)
{dede:field.keywords /}:获取文章的keywords字段值。runphp='yes':开启PHP执行功能。@me:这是一个特殊变量,代表当前标签的原始值,它就是关键词字符串,如 "织梦,DedeCMS,教程"。explode(',', @me):将字符串按英文逗号分割成一个数组。foreach($keywords as $keyword):遍历数组,为每个关键词生成一个HTML链接。urlencode($keyword):对关键词进行URL编码,防止关键词中包含特殊字符导致链接错误。"/search.php?keyword=":这是你网站搜索页面的路径,请根据你的实际情况修改。@me = $result;:将处理好的HTML字符串重新赋值给@me,模板引擎会输出它。
简化版(如果不需要链接,只是显示):
<div class="keywords">
关键词:{dede:field.keywords/}
</div>
场景2:在文章列表页或首页调用当前文章的关键词
这种情况稍微复杂一些,因为列表页模板(如 list_article.htm)循环的是多篇文章,你需要为循环中的每一篇文章获取其关键词。
示例代码(在列表页循环 {dede:list} 内部):
{dede:list pagesize='10'}
<h3><a href="[field:arcurl/]">[field:title/]</a></h3>
<p>[field:description function='cn_substr(@me,100)'/]...</p>
<!-- 在这里调用当前循环文章的关键词 -->
<div class="keywords">
标签:
{dede:field.name='keywords' runphp='yes'}
if(@me != '') {
$keywords = explode(',', @me);
$result = '';
foreach($keywords as $keyword) {
$keyword = trim($keyword);
if($keyword != '') {
// 注意:这里使用了 {dede:global.cfg_cmsurl/} 来获取网站根目录,更稳健
$result .= "<a href='{dede:global.cfg_cmsurl/}/search.php?keyword=".urlencode($keyword)."' target='_blank'>".$keyword."</a> ";
}
}
@me = $result;
} else {
@me = '无';
}
{/dede:field.name='keywords'}
</div>
<hr />
{/dede:list}
关键点:

(图片来源网络,侵删)
{dede:field.name='keywords'}:这种方式明确指定了要获取keywords字段,在列表页循环中非常清晰。{dede:global.cfg_cmsurl/}:这是DedeCMS的全局变量,用于获取网站的根目录,比硬编码 更稳健。
使用PHP原生代码(适用于需要复杂逻辑或修改PHP文件的情况)
如果你在自定义的PHP文件中,或者需要更灵活地处理,可以直接使用PHP代码。
步骤1:确保开启PHP标签
在DedeCMS后台,系统 -> 系统基本参数 -> 核心设置 中,找到 “模板引擎禁PHP” 选项,确保它没有被勾选,如果被勾选,模板中的 <?php ... ?> 代码将不会被执行。
步骤2:在模板中直接写PHP
在模板文件(如 article_article.htm)的任意位置,你可以直接嵌入PHP代码。
<div class="article-keywords">
<strong>本文关键词:</strong>
<span>
<?php
// 1. 获取当前文章的关键词
// $this 是Dede模板引擎的一个全局对象,代表当前文档
$keywords = $this->Fields['keywords'];
if (!empty($keywords)) {
// 2. 分割关键词
$keywordArray = explode(',', $keywords);
// 3. 生成链接
$resultLinks = array();
foreach ($keywordArray as $keyword) {
$keyword = trim($keyword);
if (!empty($keyword)) {
// 使用Dede的内置函数来生成搜索URL,更规范
$url = $GLOBALS['cfg_cmsurl'] . "/search.php?keyword=" . urlencode($keyword);
$resultLinks[] = "<a href='{$url}' target='_blank'>{$keyword}</a>";
}
}
// 4. 输出结果
echo implode(' ', $resultLinks);
} else {
echo '暂无关键词';
}
?>
</span>
</div>
PHP代码解析:
$this->Fields['keywords']:通过模板引擎的全局对象$this的Fields属性,可以获取到当前文章的所有字段,包括keywords。empty($keywords):判断关键词是否为空。$GLOBALS['cfg_cmsurl']:这是DedeCMS中定义的全局变量,等同于{dede:global.cfg_cmsurl/},用于获取网站根目录。
总结与建议
| 方法 | 优点 | 缺点 | 推荐场景 |
|---|---|---|---|
| 传统标签 | 安全、标准、升级无忧、代码与模板分离 | 逻辑复杂时,标签内代码可读性稍差 | 绝大多数情况,特别是文章内容页和列表页,这是DedeCMS的最佳实践。 |
| PHP原生 | 灵活、强大,可以调用任何PHP函数和逻辑 | 不安全(如果后台设置错误)、可能因升级导致失效 | 需要在非标准模板位置调用,或进行非常复杂的数据处理时。 |
对于绝大多数用户,强烈推荐使用【方法一:传统模板引擎标签】,它既安全又符合DedeCMS的设计哲学,能很好地满足日常需求。
