欢迎访问艾立兹站 Aliz- 专注建站教程与技术分享
您当前的位置:首页 > 建站教程 > 帝国 CMS 教程

帝国 CMS 多条件搜索完整实战案例|栏目 + 自定义字段 + 关键词联动筛选

时间:2026-08-28 12:51:00  来源:aliz.cn  作者:SKY  阅读:

前言

帝国 CMS 自带的普通搜索功能比较单薄,大多时候只能依靠标题关键词进行搜索。在项目开发中,像产品库、房源信息、人才招聘、企业黄页这类栏目,往往需要多个筛选条件同时查询:栏目分类、地区、价格区间、自定义字段、发布时间、是否推荐等。

原生搜索不支持多字段联动筛选,很多新手不知道该如何改造。本文给大家一套完整可落地的多条件搜索实战案例,包含搜索表单模板、搜索接收处理代码、搜索结果列表展示,不需要安装第三方插件。

适配版本:帝国 CMS 7.5 / 8.0

一、实现原理说明

帝国 CMS 高级搜索本质就是拼接where查询条件。

  1. 前台表单提交多个筛选参数(栏目 ID、地区、关键词等)
  2. 后台接收参数,判断参数是否为空,不为空就追加 SQL 条件
  3. 使用sys_ShowMoreData灵动标签或者selectSQL 查询输出结果

⚠️安全提醒:接收参数一定要做过滤,防止 SQL 注入漏洞。

二、前台多条件搜索表单模板代码

新建搜索页面模板或者放在首页、列表页,表单提交地址为 /e/search/index.php

<form action="/e/search/index.php" method="get">
    <!-- 搜索模型ID,填写你栏目对应的模型id -->
    <input type="hidden" name="mid" value="1">
    <input type="hidden" name="myorder" value="0">
    <input type="hidden" name="tempid" value="1">
    
    <div>
        <label>关键词:</label>
        <input type="text" name="keyboard" placeholder="输入标题关键词">
    </div>

    <div>
        <label>所属栏目:</label>
        <select name="classid">
            <option value="">全部栏目</option>
            <option value="12">建站教程</option>
            <option value="13">服务器运维</option>
            <option value="14">SEO优化</option>
        </select>
    </div>

    <div>
        <label>地区筛选:</label>
        <select name="dz">
            <option value="">不限地区</option>
            <option value="广东">广东</option>
            <option value="北京">北京</option>
            <option value="上海">上海</option>
        </select>
    </div>

    <div>
        <label>价格最低:</label>
        <input type="number" name="minprice" value="">
        <label>价格最高:</label>
        <input type="number" name="maxprice" value="">
    </div>

    <div>
        <button type="submit">开始搜索</button>
    </div>
</form>

参数说明

  • mid:数据表模型 ID
  • tempid:搜索结果使用的模板 ID,后台搜索模板管理新建
  • classid:筛选指定栏目文章
  • dzminpricemaxprice为你后台新建的自定义字段

三、新建搜索结果模板(核心:多条件灵动标签)

后台‑模板管理‑搜索模板,新建搜索结果模板,放入下面灵动标签代码

[e:searchloop select="*" table="phome_ecms_news" where="" order="newstime desc" tempvar="0"]
<ul>
    <li>
        <a href="<?=$bqsr['titleurl']?>"><?=$bqsr['title']?></a>
        <p>栏目:<?=$bqsr['classname']?></p>
        <p>地区:<?=$bqsr['dz']?></p>
        <p>价格:<?=$bqsr['price']?></p>
        <p>发布时间:<?=date('Y‑m‑d',$bqsr['newstime'])?></p>
    </li>
</ul>
[/e:searchloop]

<!--分页-->
<?=$searchpage?>

上面这种方式只能用系统自带字段筛选。如果需要自定义字段高级多条件拼接,推荐使用 SQL 自定义查询方案

四、高阶方案:自定义多条件 SQL 搜索(自由组合筛选)

适合复杂多条件、区间筛选、多字段同时筛选场景。

1、搜索表单提交到自定义处理页面

新建文件 /e/search/msearch.php,用来接收搜索参数,拼接查询条件

<?php
require('../../class/connect.php');
require('../../class/db_sql.php');
$link=db_connect();
$empire=new mysqlquery();

//接收参数并过滤
$key=RepPostStr($_GET['key']);
$classid=(int)$_GET['classid'];
$dz=RepPostStr($_GET['dz']);
$minprice=(int)$_GET['minprice'];
$maxprice=(int)$_GET['maxprice'];

$where='1=1';

//关键词条件
if(!empty($key)){
    $where.=" and title like '%$key%'";
}
//栏目条件
if($classid>0){
    $where.=" and classid='$classid'";
}
//地区字段条件
if(!empty($dz)){
    $where.=" and dz='$dz'";
}
//价格区间筛选
if($minprice>0){
    $where.=" and price >= '$minprice'";
}
if($maxprice>0){
    $where.=" and price <= '$maxprice'";
}

//执行查询
$sql=$empire->query("select * from {$dbtbpre}ecms_news where $where order by newstime desc limit 20");
?>
<!--输出搜索结果页面html-->
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf‑8">
    <title>多条件搜索结果</title>
</head>
<body>
    <h2>搜索结果列表</h2>
    <ul>
        <?php
        while($r=$empire->fetch($sql)){
        ?>
        <li>
            <a href="<?=$r['titleurl']?>"><?=$r['title']?></a>
            <div>地区:<?=$r['dz']?>|价格:<?=$r['price']?></div>
        </li>
        <?php } ?>
    </ul>
</body>
</html>
<?php
db_close();
$empire=null;
?>

表单提交地址修改为:

<form action="/e/search/msearch.php" method="get">

五、URL 伪静态优化(搜索结果美化)

Nginx 搜索伪静态示例,可将搜索长地址转为好看 URL

rewrite ^/search‑(.*)‑(.*)\.html$ /e/search/index.php?keyboard=$1&classid=$2 last;

六、常见坑点以及问题排查清单

  1. 自定义字段搜索查不到结果 原因:自定义字段没有勾选【作为可搜索字段】。后台模型管理‑字段设置开启搜索。
  2. 多条件同时筛选无效 检查 SQL 拼接条件,and不要重复、不要漏空格。
  3. SQL 注入安全风险 所有 GET 参数必须用RepPostStr()(int)函数过滤,不要直接带入 SQL 语句。
  4. 搜索分页失效 自定义搜索页面分页需要引入帝国分页函数page1()

七、进阶拓展方向

  • 多选标签筛选(checkbox 多选项同时查询)
  • 联动下拉(一级地区‑二级城市二级联动)
  • 价格区间滑块筛选
  • AJAX 无刷新多条件筛选,不需要刷新页面

结语

帝国 CMS 多条件搜索不用每次都依赖付费插件。掌握前台表单 + SQL 条件拼接的思路,就可以实现栏目、关键词、自定义字段、区间价格等几乎所有筛选需求,非常适合产品库、资源下载站、信息分类站点开发。

本文配套模板、静态源码可前往艾立兹素材库alisucai.com下载

发表评论 共有0条评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
公众号二维码

扫码关注公众号
获取全套技术教程