DedeCMS 的搜索功能非常灵活,它允许你自定义搜索页面的样式、调用字段,甚至可以针对不同的模型(如文章、产品、图集等)制作不同的搜索结果页。

整个过程可以分为以下几个核心步骤:
- 理解 DedeCMS 搜索机制
- 创建搜索结果模板文件
- 创建自定义搜索表单
- 后台设置模板
- 调用和美化搜索结果
第 1 步:理解 DedeCMS 搜索机制
在开始之前,你需要了解 DedeCMS 搜索是如何工作的:
- 搜索入口:通常是一个包含
<form>表单的页面,用户在这里输入关键词并选择搜索范围。 - 提交地址:表单的
action属性会指向一个固定的 PHP 脚本,通常是/plus/search.php。 - 模板渲染:
search.php脚本接收到搜索请求后,会根据你在后台设置的模板,来渲染搜索结果页面。 - 模板文件:这个模板文件就是我们需要创建和修改的核心,它决定了搜索结果页面的最终呈现样式。
第 2 步:创建搜索结果模板文件
这是最关键的一步,我们需要创建一个或多个模板文件来定义搜索结果的布局。
文件位置
模板文件通常存放在你的模板目录下,路径为:
/templets/你的模板文件夹/search.htm

如果你的模板是 default,那么路径就是 /templets/default/search.htm。
注意:search.htm 是 DedeCMS 搜索结果的默认模板文件名,如果你想为不同的模型(如文章、产品)设置不同的搜索页,你需要使用更具体的命名规则,我们稍后会讲到。
模板文件的基本结构
一个 search.htm 文件通常包含三部分:
- HTML 页头:
<head>部分,用于引入 CSS、JS 等。 - 搜索表单:
<form>部分,让用户可以输入新的关键词进行搜索。 - 搜索结果列表:使用 DedeCMS 的 自定义宏标记
{dede:global name='keyword'/}和{dede:list}或{dede:arclist}来循环输出搜索到的内容。
示例 search.htm 代码
下面是一个完整的、基础的 search.htm 模板文件示例,你可以基于这个示例进行修改。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">搜索结果 - {dede:global name='keyword'/} - {dede:global name='cfg_webname'/}</title>
<meta name="description" content="搜索“{dede:global name='keyword'/}”的相关结果" />
<link rel="stylesheet" href="/templets/default/css/style.css"> <!-- 引入你的CSS文件 -->
</head>
<body>
<div class="header">
<!-- 你的网站头部 -->
</div>
<div class="main">
<!-- 1. 自定义搜索表单 (非常重要,方便用户继续搜索) -->
<div class="search-box">
<form name="formsearch" action="{dede:global name='cfg_phpurl'/}/search.php" method="get">
<input type="hidden" name="kwtype" value="0" />
<input type="text" name="q" class="search-keyword" value="{dede:global name='keyword'/}" />
<button type="submit" class="search-submit">搜索</button>
</form>
</div>
<!-- 2. 搜索结果提示信息 -->
<div class="search-result-info">
搜索 "<strong>{dede:global name='keyword'/}</strong>" 找到 <strong>{dede:global name='resultcount'/}</strong> 个结果
</div>
<!-- 3. 搜索结果列表 (使用arclist标签) -->
{dede:arclist titlelen='50' row='10'}
<div class="result-item">
<h3><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></h3>
<p class="result-summary">[field:description function='cn_substr(@me, 200)'/]...</p>
<div class="result-meta">
<span>发布时间:[field:pubdate function='MyDate('Y-m-d', @me)'/]</span>
<span>来源:[field:typename/]</span>
</div>
</div>
{/dede:arclist}
<!-- 4. 分页 -->
<div class="page">
{dede:pagelist listsize='4'/}
</div>
</div>
<div class="footer">
<!-- 你的网站底部 -->
</div>
</body>
</html>
代码解释:
{dede:global name='keyword'/}:获取用户搜索的关键词,用于显示在标题和搜索框中。{dede:global name='resultcount'/}:获取搜索到的结果总数。{dede:arclist ...}:这是一个强大的列表标签,在这里用来循环输出搜索结果。titlelen='50'长度限制为50个字符。row='10':每页显示10条结果。[field:arcurl/]:文章链接。[field:title/]。[field:description/]:[field:pubdate/]:发布日期。[field:typename/]:文章所属栏目名。
{dede:pagelist listsize='4'/}:调用分页导航。
第 3 步:创建自定义搜索表单
为了让用户可以在搜索结果页方便地修改关键词进行新的搜索,你需要在 search.htm 中放置一个搜索表单。
<form name="formsearch" action="/plus/search.php" method="get">
<input type="hidden" name="kwtype" value="0" />
<input type="text" name="q" class="search-keyword" value="{dede:global name='keyword'/}" />
<button type="submit" class="search-submit">搜索</button>
</form>
关键点:
action属性:必须指向/plus/search.php。method属性:通常使用get。name="q":这是 DedeCMS 接收搜索关键词的默认变量名,不能改。name="kwtype":用于指定搜索类型(0:关键词,1:标题),保持value="0即可。
第 4 步:后台设置模板
创建好模板文件后,你需要告诉 DedeCMS 使用这个模板。
- 登录你的 DedeCMS 后台。
- 进入 【系统】 -> 【系统基本参数】 -> 【核心设置】**。
- 找到 “搜索结果模板目录” 选项,确保值是你的模板文件夹路径,
templets/default。 - 保存。
进行更精确的模板绑定:
- 进入 【核心】 -> 模型管理】**。
- 这里你可以为不同的内容模型(如“文章”、“软件”、“图集”)分别设置搜索模板。
- 点击你想要修改的模型后面的 “搜索设置”。
- 在 “列表模板” 或 “搜索模板” 字段中,填入你的模板文件名,
search_article.htm。 - 保存。
高级用法:为不同模型创建不同模板
如果你想为“文章”和“产品”制作不同的搜索结果页,可以这样做:
- 在
/templets/你的模板文件夹/下创建两个文件:search_article.htm(文章搜索结果页)search_product.htm(产品搜索结果页)
- 在
search_article.htm中,使用{dede:arclist ...}来调用文章。 - 在
search_product.htm中,使用{dede:productlist ...}(或其他产品模型的自定义列表标签) 来调用产品。 - 在后台的 模型管理】 中,为“文章”模型设置搜索模板为
search_article.htm,为“产品”模型设置搜索模板为search_product.htm。
当用户在文章栏目下搜索时,就会调用 search_article.htm;在产品栏目下搜索时,就会调用 search_product.htm。
第 5 步:调用和美化搜索结果
调用不同字段的搜索结果
{dede:arclist} 和 {dede:list} 支持非常多的字段,你可以根据需要调用。
- 缩略图:
[field:litpic/] - 作者:
[field:writer/] - 点击数:
[field.click/] - 自定义字段:如果你的模型有自定义字段,如
price(价格),可以直接用[field:price/]。
高级搜索与筛选
DedeCMS 的默认搜索功能比较基础,如果你需要更高级的筛选功能(如按价格区间、品牌、发布时间等),你需要:
- 修改搜索表单:在表单中增加
<select>下拉框或<input type="checkbox">复选框,并给它们命名,<select name="price_range">...</select>。 - 修改
/plus/search.php:这是最复杂的一步,你需要修改这个 PHP 文件,让它接收你新增的筛选条件,并修改 SQL 查询语句,将筛选条件WHERE子句中,这需要一定的 PHP 和 MySQL 基础。 - 修改模板:在
search.htm中增加相应的条件判断,{dede:global name='price_range' function='(@me ? "价格范围:@me" : "")'/}来显示当前筛选条件。
对于大多数网站,基础的 {dede:arclist} 搜索已经足够,如果需要复杂功能,可以考虑使用第三方搜索插件(如基于 Elasticsearch 的)或进行二次开发。
| 步骤 | 操作 | 关键点 |
|---|---|---|
| 创建模板文件 | 在 /templets/你的模板/ 下创建 search.htm |
文件名固定,是搜索结果的默认模板。 |
| 编写模板内容 | 使用 HTML + DedeCMS 标签编写页面结构 | 包含搜索表单、结果列表、分页,核心标签是 {dede:global} 和 {dede:arclist}。 |
| 设置后台模板 | 进入后台,为核心模型绑定 search.htm |
确保模板路径正确,并为不同模型设置不同模板可实现高级定制。 |
| 测试 | 在前台输入关键词进行搜索,检查页面显示效果 | 检查结果是否正确、分页是否正常、样式是否错乱。 |
遵循以上步骤,你就可以成功制作出符合自己网站风格的 DedeCMS 搜索模板了,从基础的模板文件开始,逐步增加功能和美化,是学习这个过程最好的方式。
