筛选是分类信息、商城等站点的核心交互,如按地区、价格、类型过滤内容。织梦本身没有开箱即用的前端筛选,但通过联动字段+URL参数+SQL拼接即可实现。本文给出完整思路。
一、联动筛选的本质
筛选本质是:用户点击条件 → 条件写入URL参数 → 列表页读取参数 → 拼接SQL的WHERE → 返回过滤结果。所谓"联动",是指多个条件可同时生效,且条件选项会随已选条件变化。
二、字段准备
1. 联动类型字段
地区、行业等层级数据,建议使用织梦联动类型字段,绑定dede_stepselect数据,后台可维护层级。也可用普通下拉字段,选项手动维护。
2. 自定义字段
价格、面积等数值字段,用数字类型字段存储,便于范围筛选。类型、属性用单选/多选字段。
三、URL参数设计
筛选条件通过GET参数传递,如?diqu=10&jiage=500&type=2。每个筛选项一个参数,值为字段值或范围标识。
/list.php?tid=5&diqu=10&jiage=500&type=2
伪静态后可改写为/list-5-diqu10-jiage500-type2.html。
四、SQL条件拼接
在列表页PHP中接收参数,构建附加表的WHERE条件:
$diqu=intval($_GET['diqu'] ?? 0); $jiage=intval($_GET['jiage'] ?? 0); $where="1=1"; if($diqu) $where .=" AND b.diqu=$diqu"; if($jiage) $where .=" AND b.jiage>=$jiage"; $sql="SELECT a.* FROM dede_archives a LEFT JOIN dede_addoninfo b ON a.id=b.aid WHERE a.typeid=$tid AND $where";
注意所有参数必须强制类型转换,防止注入。
五、筛选UI渲染
模板中循环输出每个筛选项的选项列表,已选条件高亮,点击跳转更新URL:
<div class="filter"> <span>地区:</span> <a href="?tid=5&diqu=0" class="on">全部</a> <a href="?tid=5&diqu=10">北京</a> <a href="?tid=5&diqu=20">上海</a> </div>
多条件并存时,点击某项只替换该参数,保留其他参数,需用JS或在PHP中拼URL。
六、联动效果实现
真正的"联动"指选了地区后,下级筛选项随之变化。可用两种方式:一是后端按已选条件重新查询可选项;二是前端用JS预加载全量数据再过滤。前者实现简单,后者体验更流畅。
七、注意事项
- 筛选页务必伪静态,避免动态URL收录问题。
- 条件组合过多会产生大量相似URL,可用canonical或robots控制重复收录。
- 附加表字段加索引,提升筛选查询速度。
- 筛选结果列表建议分页,避免一次返回过多。
八、实现建议
建议先用单条件筛选跑通链路,验证URL与SQL拼接无误后,再扩展多条件联动。对于筛选条件复杂的站点,也可借助成熟的织梦筛选插件,但需评估其URL规则与SEO表现。筛选功能上线后,持续观察抓取与收录情况,及时调整伪静态与重复内容策略。