- 推荐修改(更美观、更友好) - 修改搜索模板文件,添加自定义的“无结果”提示和引导。
- 简单修改(仅显示文字) - 修改PHP程序文件,直接输出一段提示文字。
下面我将详细介绍这两种方法的操作步骤。

推荐修改(修改搜索模板文件)
这是最推荐的方法,因为它可以让你完全自定义“无结果”时的页面样式,可以包含提示文字、搜索建议、热门搜索、返回首页链接等,大大提升用户体验。
核心思路: DedeCMS的搜索结果是通过一个模板文件来渲染的,当没有搜索结果时,系统依然会调用这个模板,只是没有数据可以循环显示,我们只需要在这个模板里,判断一下是否有数据,如果没有,就显示我们自定义的内容。
操作步骤:
第1步:找到搜索结果模板文件
这个模板文件通常位于你的网站根目录下的 /templets/default/ 文件夹中,文件名可能是:

search.htm(最常见)search_default.htm- 或者你在后台设置的其他模板名
请用FTP或文件管理工具找到这个文件并下载到本地。
第2步:编辑模板文件,添加判断逻辑
用Dreamweaver、VS Code、Sublime Text等代码编辑器打开你下载的 search.htm 文件。
找到文件中用于显示搜索结果列表的循环代码,它通常是这样的形式:
{dede:loop table='dede_search_keywords' sort='keyword' row='10' titlelen='30'}
<a href='plus/search.php?keyword=[field:keyword/]'>[field:keyword/]</a>
{/dede:loop}
或者,如果你的搜索是调用文章,可能会有这样的循环:
{dede:list pagesize='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:list}
关键一步: 在这个循环代码的外面,用 {dede:if} 条件语句包裹起来。
完整修改示例:
假设你的 search.htm 文件内容大致如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">{dede:global name='keyword'/} - 搜索结果</title>
</head>
<body>
<h1>搜索结果</h1>
<div class="result-list">
<!-- 这里是显示搜索结果的循环 -->
{dede:list pagesize='10'}
<div class="result-item">
<a href="[field:arcurl/]">[field:title/]</a>
<p>[field:description function='cn_substr(@me, 100)'/]...</p>
</div>
{/dede:list}
</div>
</body>
</html>
你需要修改成这样:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">{dede:global name='keyword'/} - 搜索结果</title>
</head>
<body>
<h1>搜索结果</h1>
<div class="result-list">
<!-- 【核心修改开始】 -->
{dede:if}
<!-- 如果有搜索结果,则显示下面的列表 -->
{dede:list pagesize='10'}
<div class="result-item">
<a href="[field:arcurl/]">[field:title/]</a>
<p>[field:description function='cn_substr(@me, 100)'/]...</p>
</div>
{/dede:list}
{else}
<!-- 如果没有搜索结果,则显示下面的友好提示 -->
<div class="no-result">
<h2>抱歉,没有找到与 "<strong>{dede:global name='keyword'/}</strong>" 相关的结果</h2>
<p>建议您:</p>
<ul>
<li>请检查输入的关键字是否正确。</li>
<li>尝试使用更简洁或更通用的关键词。</li>
<li>尝试使用同义词进行搜索。</li>
</ul>
<p>或者您可以看看<a href="/">热门搜索</a>:</p>
{dede:hotwords num='10' subday='30'}
<a href='plus/search.php?keyword=[field:keyword/]'>[field:keyword/]</a>
{/dede:hotwords}
<p><a href="/" class="btn-back">返回首页</a></p>
</div>
{/dede:if}
<!-- 【核心修改结束】 -->
</div>
</body>
</html>
代码解释:
{dede:if} ... {else} ... {/dede:if}:这是DedeCMS的条件判断标签。{dede:if}和{/dede:if}之间的内容,是当有搜索结果时显示的。{else}和{/dede:if}之间的内容,是当没有搜索结果时显示的。- 在
{else}部分,你可以自由添加HTML和DedeCMS标签来构建一个美观的提示页面,- 显示用户搜索的关键词
{dede:global name='keyword'/}。 - 给出搜索建议。
- 调用热门搜索标签
{dede:hotwords}。 - 提供返回首页的链接。
- 显示用户搜索的关键词
第3步:上传并测试
保存修改后的 search.htm 文件,通过FTP上传到原来的位置,然后访问你的搜索页面,输入一个肯定不会有结果的关键词("asdfghjkl"),现在你应该就能看到你自定义的友好提示页面了。
简单修改(修改PHP程序文件)
如果你不想动模板,只想快速加一段文字提示,可以修改PHP文件,这种方法不灵活,且容易在升级后被覆盖,但操作简单。
核心思路: 修改处理搜索的PHP文件,在查询结果为空时,直接输出一段文字并终止程序。
操作步骤:
第1步:找到搜索程序文件
这个文件位于你的网站根目录下的 /plus/ 文件夹中,文件名为 search.php。
第2步:编辑PHP文件,添加判断逻辑
用代码编辑器打开 plus/search.php 文件。
找到类似下面这段代码(通常在文件中下部):
//获得搜索的结果列表
$ids = array();
$dsql->SetQuery("SELECT id FROM `dede_archives` WHERE {$orlike} $typeid ORDER BY id DESC");
$dsql->Execute();
while($arr = $dsql->GetArray())
{
$ids[] = $arr['id'];
}
在这段代码的后面,紧接着添加如下代码:
//【核心修改开始】
//如果查询结果为空,则输出提示并退出
if(empty($ids))
{
echo '<div style="text-align:center;padding:50px 0;">';
echo '<h2>抱歉,没有找到与 "'.urlencode($keyword).'" 相关的结果。</h2>';
echo '<p>请尝试更换关键词进行搜索。</p>';
echo '<a href="/">返回首页</a>';
echo '</div>';
exit(); //非常重要,终止程序继续执行
}
//【核心修改结束】
代码解释:
if(empty($ids)):判断$ids数组是否为空。$ids为空,说明上一步的数据库查询没有返回任何记录,即没有搜索结果。echo ...:直接输出HTML格式的提示文字。exit();:非常重要! 这行代码会立即停止当前PHP脚本的执行,防止后面继续尝试渲染一个空模板,导致页面出现错误或显示不完整。
第3步:上传并测试
保存修改后的 search.php 文件并上传,同样,访问搜索页面输入一个无效关键词进行测试。
总结与建议
| 方法 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
| 修改模板 | 用户体验好,页面美观,可自定义内容,符合网站整体风格。 | 需要懂一点HTML和DedeCMS标签,操作稍复杂。 | ⭐⭐⭐⭐⭐ (强烈推荐) |
| 修改PHP | 操作简单,快速实现,不需要懂模板。 | 页面样式固定,不美观,升级DedeCMS后可能被覆盖。 | ⭐⭐ (仅作为临时或快速解决方案) |
对于任何一个认真的网站来说,都强烈建议使用方法一,它不仅能解决问题,还能提升网站的细节质量,让用户感觉更专业、更贴心。
