第一步:理解搜索页的工作原理
当用户在首页或其他页面提交搜索表单后,请求会发送到 search.php,这个文件负责处理搜索逻辑:

- 获取搜索关键词 (
keyword)。 - 根据关键词在数据库中查找匹配的文章。
- 将搜索结果和分页信息传递给模板文件
search.htm。 search.htm负责将数据渲染成最终的 HTML 页面。
要调用搜索页的内容,主要有两个层面:
- 修改
search.php:改变搜索的逻辑,比如修改搜索的字段、排序方式等。 - 修改
search.htm:改变搜索结果的显示样式,比如调用文章标题、缩略图、发布时间等。
第二步:调用搜索结果(修改 search.php 和 search.htm)
这是最常见的需求,即自定义搜索结果的展示。
修改 search.php 文件
打开 /plus/search.php 文件,找到 //搜索处理 附近的部分,你可以在这里修改 SQL 查询语句,以决定搜索哪些字段以及如何排序。
示例:修改搜索的字段

默认情况下,DedeCMS 可能只搜索标题和正文,如果你想增加搜索摘要 (description) 字段,可以修改如下:
// 原始代码可能类似这样
// $query = "SELECT arc.id,arc.title,arc.typeid,arc.ismake,arc.channel,arc.arcrank,arc.click,arc.litpic,arc.pubdate,arc.senddate
// FROM dede_archives arc
// WHERE arc.title LIKE '%$keyword%' OR arc.body LIKE '%$keyword%'";
// 修改后,增加 description 字段
$query = "SELECT arc.id,arc.title,arc.typeid,arc.ismake,arc.channel,arc.arcrank,arc.click,arc.litpic,arc.pubdate,arc.senddate,arc.description
FROM dede_archives arc
WHERE arc.title LIKE '%$keyword%' OR arc.body LIKE '%$keyword%' OR arc.description LIKE '%$keyword%'";
示例:修改搜索结果的排序
默认可能按发布时间倒序,你可以修改为按点击量倒序:
// 在执行查询前,修改 ORDER BY 部分
$query = "SELECT ..."; // 你的查询语句
$query .= " ORDER BY arc.click DESC"; // 在查询字符串末尾添加排序
$rs = $dsql->Execute('me', $query);
修改 search.htm 模板文件
打开 /templets/default/search.htm 文件(如果你使用了自定义模板,请找到对应的模板文件),这里使用 DedeCMS 的模板标签来循环显示搜索结果。
核心代码:{dede:arclist}
在 search.htm 中,通常使用 {dede:arclist} 标签来遍历 search.php 传递过来的数据。
完整的 search.htm 示例:
{dede:include filename="head.htm"/}
<div class="search-page">
<h2>搜索结果:“{dede:global name='keyword'/}”</h2>
<!-- 如果没有搜索结果 -->
{dede:global name='resultnum'/} 条结果
{dede:global name='error'/}
<!-- 循环输出搜索结果 -->
<ul class="search-result-list">
{dede:arclist titlelen='50' row='10' typeid='all'}
<li>
<a href="[field:arcurl/]" target="_blank">[field:title/]</a>
<div class="search-info">
<span class="search-date">发布时间:[field:pubdate function="MyDate('Y-m-d H:i',@me)"/]</span>
<span class="search-click">点击:[field:click/]</span>
</div>
<p class="search-summary">[field:description function='cn_substr(@me, 200)'/]...</p>
</li>
{/dede:arclist}
</ul>
<!-- 调用分页 -->
<div class="page-nav">
{dede:pagelist listsize='5' listitem='info,index,next,end,pre'/}
</div>
</div>
{dede:include filename="foot.htm"/}
代码解释:
{dede:global name='keyword'/}: 显示用户搜索的关键词。{dede:global name='resultnum'/}: 显示搜索到的结果总数。{dede:arclist ...}: 这是最重要的标签,用于列出文章。titlelen='50': 标题长度限制为50个字符。row='10': 每页显示10条结果。typeid='all': 在所有栏目中搜索。
[field:arcurl/]: 文章的链接地址。[field:title/]: 文章标题。[field:pubdate ... /]: 发布时间,通过function参数自定义格式。[field:click/]: 文章点击量。[field:description ... /]: 通过cn_substr函数截取200个字符。{dede:pagelist ...}: 调用分页导航。
第三步:调用热门搜索关键词
这个功能通常放在搜索框下方,展示网站内搜索频率最高的词。
修改 search.htm 模板
在搜索框下方添加如下代码:
<div class="hot-search">
<h3>热门搜索</h3>
{dede:hotwords num='10' subday='30' /}
</div>
修改 search.php 文件
打开 /plus/search.php,找到 //热门关键字 部分,确保它没有被注释掉。
// 热门关键字
$hotquery = "SELECT keyword,count AS count FROM dede_search_keywords ORDER BY count DESC LIMIT 0,10";
$rs = $dsql->Execute('me',$hotquery);
$dsql->SetQuery("UPDATE dede_search_keywords SET count=count+1 WHERE keyword='$keyword'");
$dsql->ExecuteNoneQuery();
{dede:hotwords} 标签会自动调用这部分数据并生成链接。
第四步:调用“相关搜索”关键词
相关搜索是指在当前搜索结果页,推荐一些与当前关键词相关的其他搜索词。
修改 search.php 文件
在 search.php 的末尾,在 include(DEDETEMPLATE.'/search.htm'); 之前,添加以下代码:
// 获取相关搜索关键词
$relkeyword = '';
$query = "SELECT keyword FROM dede_search_keywords WHERE keyword LIKE '%$keyword%' AND keyword <> '$keyword' ORDER BY count DESC LIMIT 0,8";
$rs = $dsql->Execute('me', $query);
while($row = $rs->GetArray()){
$relkeyword .= "<a href='/plus/search.php?keyword=".urlencode($row['keyword'])."'>".$row['keyword']."</a> ";
}
$GLOBALS['relkeyword'] = $relkeyword;
修改 search.htm 模板
在页面合适的位置(例如搜索结果下方)添加:
<div class="related-search">
<h3>相关搜索</h3>
{dede:global name='relkeyword'/}
</div>
第五步:高级调用——自定义搜索频道
DedeCMS 支持按不同频道(如文章、软件、商品等)进行搜索,这需要更复杂的逻辑,但基本原理相同。
- 修改
search.php:增加对channelid参数的判断,并在 SQL 查询中根据不同的channelid连接不同的数据表(如dede_archives,dede_downloads等)。 - 修改
search.htm:使用{dede:php}标签或多个{dede:arclist}标签,根据不同的频道类型调用不同的模板片段来显示结果。
这是一个比较高级的功能,通常需要对 DedeCMS 有较深的理解,对于大多数网站,使用前几种方法已经足够。
| 功能需求 | 修改文件 | 关键代码/标签 |
|---|---|---|
| 自定义搜索结果展示 | plus/search.phptemplets/default/search.htm |
修改 SQL 查询语句{dede:arclist} |
| 调用热门搜索 | plus/search.phptemplets/default/search.htm |
确保 SQL 未被注释{dede:hotwords} |
| 调用相关搜索 | plus/search.phptemplets/default/search.htm |
手动查询并赋值给 $GLOBALS{dede:global name='relkeyword'} |
操作建议:
- 备份!备份!备份! 在修改
search.php和模板文件之前,务必备份原始文件。 - 从简单开始:先尝试修改
search.htm中的{dede:arclist}标签,看看效果。 - 逐步深入:熟悉基本修改后,再尝试修改
search.php中的逻辑。
希望这份详细的指南能帮助你成功调用 DedeCMS 搜索页的内容!
