使用自带的功能标签(最简单)
如果你的需求是创建一个固定的栏目,专门用来展示包含某个关键词的文章,这是最推荐的方法。

(图片来源网络,侵删)
步骤:
-
创建一个新栏目
- 登录 DedeCMS 后台。
- 进入「栏目管理」->「添加栏目」。
- 栏目名称:填写一个你想要的名称,‘织梦’相关文章”。
- 栏目类型:选择“频道栏目”。
- :选择“使用PHP”。
- 填写其他基本信息后,点击“确定”。
-
编辑栏目的PHP文件
- 在网站根目录下的
plus文件夹里,找到你刚刚创建的栏目对应的 PHP 文件,如果你的栏目ID是5,文件名就是list.php?tid=5。 - 用代码编辑器(如 VS Code, Sublime Text, Notepad++)打开这个文件。
- 将文件中的所有内容替换为以下代码:
<?php require_once(dirname(__FILE__)."/../include/common.inc.php"); // --- 这里是你的关键词 --- $keyword = '织梦'; // 请将 '织梦' 替换为你想搜索的关键词 // 设置SQL查询语句 // arc.title LIKE '%$keyword%' 表示在标题字段中模糊匹配包含关键词的记录 $sql = "SELECT arc.*,tp.typename,tp.typedir FROM `#@__archives` arc LEFT JOIN `#@__arctype` tp ON arc.typeid = tp.id WHERE arc.title LIKE '%$keyword%' ORDER BY arc.sortrank DESC LIMIT 0, 10"; // LIMIT 0, 10 表示只显示最新的10条,你可以修改这个数字 $dsql->SetQuery($sql); $dsql->Execute('list'); $GLOBALS['autoindex'] = 0; while($row = $dsql->GetArray('list')) { $row['typeurl'] = GetTypeUrl($row['typedir'], $row['typedir'], $row['isdefault'], $row['defaultname'], $row['ispart'], $row['namerule2'], $row['moresite'], $row['siteurl']); $row['arcurl'] = GetArcUrl($row['arcid'], $row['typeid'], $row['senddate'], $row['title'], $row['ismake'], $row['arcrank'], $row['namerule'], $row['typedir'], $row['money'], $row['filename'], $row['moresite'], $row['siteurl']); $row['litpic'] = $row['litpic'] == '' ? $GLOBALS['cfg_cmspath'].'/images/defaultpic.gif' : $row['litpic']; // 将文章数据赋值给模板引擎 $GLOBALS['arr'][] = $row; $GLOBALS['autoindex']++; } // 加载模板文件 // 这里我们直接使用列表页模板,你也可以创建一个专门的模板 $tempfile = DedeInclude('templets/list_default.htm'); $pv = new PartView(); $pv->SetTemplet($tempfile); $pv->Display(); ?> - 在网站根目录下的
-
使用模板
(图片来源网络,侵删)- 这段代码会自动加载系统默认的列表页模板
templets/list_default.htm。 - 你可以复制
list_default.htm并重命名(my_keyword_list.htm),然后修改list.php文件中的$tempfile变量来指向你的新模板。 - 在模板文件中,使用
{dede:list}标签来循环输出文章列表,和普通列表页完全一样。
{dede:list} <li> <a href="[field:arcurl/]">[field:title/]</a> <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span> </li> {/dede:list} - 这段代码会自动加载系统默认的列表页模板
优点:
- 操作简单,适合固定的关键词列表。
- 管理方便,在后台就可以直接访问。
缺点:
- 每个关键词都需要创建一个独立的栏目和PHP文件,不够灵活。
使用自定义标签(更灵活)
如果你想在任何地方(比如首页、文章页)调用这个列表,而不想创建新栏目,可以使用自定义标签的方法。
步骤:

(图片来源网络,侵删)
-
创建自定义标签文件
- 在网站根目录的
include/tag文件夹下,创建一个新文件,keyword.lib.php。
- 在网站根目录的
-
编写标签代码
- 打开
keyword.lib.php,将以下代码粘贴进去:
<?php if(!defined('DEDEINC')) exit('Request Error!'); function lib_keyword(&$ctag, &$refObj) { global $dsql; // 获取标签属性,{dede:keyword keyword='织梦' row='8'} $attlist = "keyword|,row|10"; FillAttsDefault($ctag->CAttribute->Items, $attlist); extract($ctag->CAttribute->Items, EXTR_SKIP); // 如果没有设置关键词,则返回空 if(empty($keyword)) return ''; $revalue = ''; // 构建SQL查询 $sql = "SELECT id, title, arc FROM `#@__archives` WHERE title LIKE '%$keyword%' ORDER BY sortrank DESC LIMIT 0, $row"; $dsql->Execute('list', $sql); while($row = $dsql->GetArray('list')) { $arcurl = GetArcUrl($row['arc'], $row['typeid'], $row['senddate'], $row['title'], $row['ismake'], $row['arcrank'], $row['namerule'], $row['typedir'], $row['money'], $row['filename'], $row['moresite'], $row['siteurl']); // 拼接返回的HTML内容 // 这里使用模板语法,方便在标签内自定义样式 $revalue .= sprintf( '<li><a href="%s" title="%s">%s</a></li>', $arcurl, $row['title'], cn_substr($row['title'], 30) // 截取标题前30个字符 ); } return $revalue; } ?> - 打开
-
在模板中使用标签
- 你可以在任何模板文件(如
index.htm,article_article.htm等)中使用这个自定义标签了。
<h3>包含“织梦”关键词的文章</h3> <ul> {dede:keyword keyword='织梦' row='5'} [field:global name=autoindex runphp='yes']if(@me==1)@me='<li class="first">';else @me='<li>';[/field:global] <a href="[field:arcurl/]">[field:title/]</a> </li> {/dede:keyword} </ul>- 标签参数说明:
keyword='织梦':指定要搜索的关键词。row='5':指定要显示的文章数量。
- 你可以在任何模板文件(如
优点:
- 非常灵活,可以在任何模板中随意调用。
- 可以动态指定关键词和显示数量。
缺点:
- 需要手动创建和上传文件,对新手稍微复杂一点。
使用DedeCMS的“SQL查询”标签(最强大)
这种方法直接在模板中使用 {dede:sql} 标签进行数据库查询,无需创建任何额外的PHP文件。
步骤:
-
在模板中直接使用标签
- 在你想要显示列表的模板文件中,直接插入以下代码:
<h3>包含“PHP”关键词的文章</h3> <ul> {dede:sql sql='SELECT id, title, arc FROM `#@__archives` WHERE title LIKE "%PHP%" ORDER BY sortrank DESC LIMIT 0, 8'} <li> <a href="[field:arcurl/]">[field:title/]</a> <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span> </li> {/dede:sql} </ul>
代码解释:
sql='SELECT ...':这里是标准的MySQL查询语句。SELECT id, title, arc:选择文章的ID、标题和路径字段。FROM#@archives`从文章主表查询。#@` 是 DedeCMS 的表前缀占位符。WHERE title LIKE "%PHP%":这是核心,LIKE用于模糊匹配, 是通配符,%PHP%表示标题中任何位置包含 "PHP" 的记录。ORDER BY sortrank DESC:按文章排序号降序排列,即最新的在前。LIMIT 0, 8:限制只返回8条结果。
[field:arcurl/]:{dede:sql}标签没有像{dede:list}那样内置URL生成函数,所以我们需要手动调用GetArcUrl函数,我们可以通过function属性来实现:[field:arc function="GetArcUrl(@me, 0, 0, '', '', 0, '', '', '', '', '', '')"/]这种写法比较麻烦。- 更简单的方法是查询
arc字段(即文章的文件名或ID),然后用MakeArcUrl()函数,上面的例子中,arc字段可以直接用于生成URL,所以直接用[field:arcurl/]是一个简写,前提是你的SQL查询了arc字段。
修正后的更健壮的写法:
<h3>包含“PHP”关键词的文章</h3>
<ul>
{dede:sql sql='SELECT id, title, typeid, senddate, filename FROM `#@__archives` WHERE title LIKE "%PHP%" ORDER BY sortrank DESC LIMIT 0, 8'}
<li>
<!-- 使用function属性调用PHP函数生成URL -->
<a href="[field:id function='MakeArchives(@me, @this)'/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:sql}
</ul>
注意:MakeArchives 函数可能不是所有版本都通用,最稳妥的方法是查询 arcid 和 typeid,然后调用 GetArcUrl。
优点:
- 无需创建任何文件,直接在模板里搞定。
- 功能最强大,可以执行任何你想要的SQL查询。
缺点:
- 直接操作数据库,如果SQL语句写错,可能会导致页面出错。
- 可读性稍差,对于模板和PHP都不太熟的用户来说有一定门槛。
总结与推荐
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 功能标签 | 简单,后台管理方便 | 不够灵活,每个关键词需一个文件 | 创建固定的、长期存在的关键词专题列表。 |
| 自定义标签 | 灵活,可复用,可在任何地方调用 | 需要手动创建PHP文件 | 需要在网站多个不同位置动态调用不同关键词的列表。 |
| SQL查询标签 | 极其灵活,无需额外文件 | 直接操作SQL,有一定风险,可读性差 | 快速实现临时需求,或进行复杂的数据查询。 |
给你的建议:
- 如果你只是想在某个地方一次性地展示一个关键词的文章列表,推荐使用方法三(SQL查询标签),因为它最快,不需要修改任何文件。
- 如果你希望这个功能能在网站多处复用,并且希望管理起来更规范,强烈推荐方法二(自定义标签),这是最专业和灵活的解决方案。
- 如果你只是想做一个固定的专题栏目,方法一(功能标签) 是最简单的选择。
