dede搜索为空时,如何自定义提示内容?

99ANYc3cd6
预计阅读时长 20 分钟
位置: 首页 DEDE建站 正文
  1. 推荐修改(更美观、更友好) - 修改搜索模板文件,添加自定义的“无结果”提示和引导。
  2. 简单修改(仅显示文字) - 修改PHP程序文件,直接输出一段提示文字。

下面我将详细介绍这两种方法的操作步骤。

dede搜索为空时咋改
(图片来源网络,侵删)

推荐修改(修改搜索模板文件)

这是最推荐的方法,因为它可以让你完全自定义“无结果”时的页面样式,可以包含提示文字、搜索建议、热门搜索、返回首页链接等,大大提升用户体验。

核心思路: DedeCMS的搜索结果是通过一个模板文件来渲染的,当没有搜索结果时,系统依然会调用这个模板,只是没有数据可以循环显示,我们只需要在这个模板里,判断一下是否有数据,如果没有,就显示我们自定义的内容。

操作步骤:

第1步:找到搜索结果模板文件

这个模板文件通常位于你的网站根目录下的 /templets/default/ 文件夹中,文件名可能是:

dede搜索为空时咋改
(图片来源网络,侵删)
  • 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后可能被覆盖。 ⭐⭐ (仅作为临时或快速解决方案)

对于任何一个认真的网站来说,都强烈建议使用方法一,它不仅能解决问题,还能提升网站的细节质量,让用户感觉更专业、更贴心。

-- 展开阅读全文 --
头像
dede附件二级域名如何实现?
« 上一篇 今天
织梦为何无法生成文章页?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]