地区筛选是本地化站点的常见需求,如分类信息、同城服务都需要按城市过滤内容。本教程讲解在织梦中制作带地区筛选的栏目的完整流程。
一、整体方案选择
1. 单栏目+地区参数筛选
所有内容放在一个栏目,通过URL参数?city=筛选。优点是结构简单,缺点是地区URL需伪静态处理。
2. 多栏目按地区分目录
每个地区建一个子栏目,内容分别归入。优点是URL清晰、权重独立,缺点是数据分散、维护成本高。
本教程采用方案一,更通用且易扩展。
二、地区数据准备
1. 使用联动字段
在自定义模型中添加"地区"字段,类型选联动,绑定织梦内置地区数据dede_stepselect。后台录入时选择对应地区,数据写入附加表。
2. 自定义地区表
也可自建一张地区表,字段:id、名称、父级。灵活度更高,适合自定义城市分级。
三、栏目与模板设置
新建一个栏目绑定自定义模型,列表模板使用list_area.htm。在栏目内容中正常录入带地区字段的信息。
四、筛选交互实现
1. 地区导航渲染
<div class="area-filter"> <a href="/list-5-0.html" class="on">全部</a> <a href="/list-5-1.html">北京</a> <a href="/list-5-2.html">上海</a> <a href="/list-5-3.html">广州</a> </div>
2. URL规则
伪静态将/list-5-1.html重写为list.php?tid=5&city=1。5是栏目ID,1是地区ID。
五、SQL条件拼接
在列表处理逻辑中读取city参数,联合附加表查询:
$tid=intval($_GET['tid']); $city=intval($_GET['city']); $where="a.typeid=$tid AND a.arcrank>-2"; if($city) $where .=" AND b.city=$city"; $sql="SELECT a.* FROM dede_archives a LEFT JOIN dede_addoninfo b ON a.id=b.aid WHERE $where ORDER BY a.pubdate DESC";
六、多条件组合
地区常与类型、价格组合筛选。每个条件一个URL段,如/list-5-city1-type2.html。PHP解析各段参数拼接WHERE。条件过多时注意去重与canonical处理。
七、伪静态规则示例
RewriteRule ^list-([0-9]+)-([0-9]+)\.html$ /list.php?tid=$1&city=$2 [L]
Nginx写法对应rewrite ^/list-([0-9]+)-([0-9]+)\.html$ /list.php?tid=$1&city=$2 last;。
八、注意事项
- 地区筛选会产生大量组合URL,建议为筛选页加canonical指向主列表。
- 附加表的地区字段加索引,避免筛选查询全表扫描。
- 地区层级较深时,筛选只展示常用层级,避免界面过载。
- 移动端筛选建议用弹出层,节省屏幕空间。
九、制作落地建议
建议先完成"全地区列表+单地区筛选"这条主线,跑通伪静态与SQL后,再叠加类型、价格等组合条件。地区数据尽量复用织梦联动数据,减少维护成本。上线后关注各城市URL的收录情况,逐步补充热门城市的内容,提升地区筛选栏目的流量覆盖。