帝国cms如何实现多条件筛选功能实现技巧
1. 设计自定义字段与数据表结构
要实现多条件筛选,首先要确保模型字段支持筛选维度。比如商品系统可设置“品牌”“价格区间”“颜色”“尺寸”等字段。
在后台“系统”→“管理数据表”中为对应模型添加字段,如brand(品牌)、price_level(价格等级)等
字段类型建议使用“下拉框”或“复选框”,便于统一值选项
若筛选项较多,可单独建立字典表(如“品牌表”),通过ID关联提高维护性
2. 构建URL参数传递筛选条件
通过GET方式传递筛选参数,保持URL可读性和分享性。
前端链接示例:?brand=apple&color=white&price=2
使用PHP接收参数:$_GET['brand'],并进行安全过滤(如CheckSqlIn()防注入)
多个条件组合时,空值不参与查询,避免干扰结果集
3. 使用灵动标签结合SQL实现动态查询
在列表模板中使用[e:loop]标签,根据传参动态生成SQL条件。
<?php
$and = '';
if($_GET['brand']) {
$brand = addslashes($_GET['brand']);
$and .= " and brand='$brand'";
}
if($_GET['color']) {
$color = addslashes($_GET['color']);
$and .= " and color='$color'";
}
if($_GET['price']==1) $and .= " and price BETWEEN 0 AND 100";
if($_GET['price']==2) $and .= " and price BETWEEN 100 AND 500";
$sql = "select * from [!db.pre!]ecms_news where checked=1 $and order by newstime desc limit 10";
?>
[e:loop={$$sql,10,24,0}]
<a href="<?=$bqsr['titleurl']?>"><?=$bqr['title']?></a>
[/e:loop]
注意:直接拼接SQL需严格过滤参数,推荐封装函数处理安全问题。
4. 前端筛选项联动与高亮当前选择
提升用户体验,让筛选更直观。
当前选中的条件可用class="on"样式突出显示
用PHP判断GET参数输出selected或checked状态
配合JavaScript实现无刷新筛选(Ajax + 模板片段返回)
提供“清除所有”按钮,重置筛选条件






