织梦联动筛选功能怎么实现

筛选是分类信息、商城等站点的核心交互,如按地区、价格、类型过滤内容。织梦本身没有开箱即用的前端筛选,但通过联动字段+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与SQL拼接无误后,再扩展多条件联动。对于筛选条件复杂的站点,也可借助成熟的织梦筛选插件,但需评估其URL规则与SEO表现。筛选功能上线后,持续观察抓取与收录情况,及时调整伪静态与重复内容策略。