海洋 CMS 列表页模板如何新增筛选条件
海洋 CMS 的列表页筛选条件不用改后台代码,改模板就能实现:把筛选值放进 URL 参数,再在 list.html 里用条件标签 {seacms:if} 切换 {seacms:list} 的查询条件,最后把筛选按钮和分页链接的 URL 拼对。整个改动落在 1 个模板文件 + 1 段 JS,熟练的话 30 分钟内能上线。
海洋 CMS 列表页筛选的实现原理是什么
结论:海洋 CMS 没有「筛选条件」后台开关,列表页筛选 = URL 参数 + 模板条件判断,数据仍然由 {seacms:list} 标签输出。
海洋 CMS(一款 PHP + MySQL 的影视/文章类 CMS,模板放在 /template/模板名/ 目录下)的列表页数据,靠 {seacms:list} 标签循环输出,这个标签本身接受 typeid、pagesize、order 等属性。所谓「加筛选」,本质就是让这些属性里的查询条件随 URL 变化。
比如用户点了「2024 年」,地址变成 /list.php?tid=1&f_year=2024,模板读到 f_year 这个参数后,换成带年份条件的标签来输出数据。参数名建议自己加前缀(如 f_year、f_area),避免和系统保留参数 tid、page、searchtype、order 撞车。
怎么用 {seacms:if} 切换 {seacms:list} 的查询条件
结论:用 {seacms:if} 把两个(或几个){seacms:list} 包起来,有参数走带条件的,没参数走全量的。
{seacms:if} 是海洋 CMS 的条件判断标签,$f_year 是模板读取到的 URL 变量。示例:
{if $f_year}
{seacms:list typeid=$typeid pagesize=20 where="vod_year='$f_year'"}
{else}
{seacms:list typeid=$typeid pagesize=20}
{/if}
三点注意:
- 分支不要超过 4 个。年份、地区、类型、语言四个维度全排列会写爆模板,正确做法是多参数用
and拼成一条 where,只判断「有没有任意筛选参数」两种情况。 - 如果所用版本的
{seacms:list}不支持where属性,等价做法是把参数交给搜索页接收(海洋 CMS 自带搜索入口支持按年代、地区、语言过滤),列表页只负责跳转。 - 「全部」选项要把参数置空,不能在 URL 里传
f_year=0,否则会查到 0 条数据。
筛选按钮的链接怎么写才不会丢参数
结论:每个按钮只在当前 URL 上替换自己那一项,其它筛选参数和 tid 一律保留。
推荐用 JS 统一生成,避免模板里手写几十条 href:
function buildUrl(key, val) {
var p = new URLSearchParams(location.search);
val ? p.set(key, val) : p.delete(key);
p.delete('page'); // 换筛选条件要回到第 1 页
return location.pathname + '?' + p.toString();
}
这样点「地区=大陆」时,年份条件仍然在 URL 里,两个条件同时生效。同时给当前选中的按钮加个 active 类,方便前端高亮。
分页时筛选参数丢失怎么解决
结论:海洋 CMS 的分页链接默认只带核心参数,必须手动补参,否则翻到第 2 页筛选就失效了。
最省事、也不依赖模板标签改动的做法,是页面加载后给分页区所有链接补上当前参数:
var p = new URLSearchParams(location.search);
p.delete('page');
document.querySelectorAll('.pagelist a').forEach(function (a) {
a.href += (a.href.indexOf('?') > -1 ? '&' : '?') + p.toString();
});
如果你的内容允许,也建议把筛选组合做静态化,但筛选页是笛卡尔积(年份 × 地区 × 类型很容易上百条 URL),只对高频组合(如年度榜、地区榜)做伪静态更划算,其余走 /?f_year=2024 这类动态地址即可。
两个容易踩的坑
结论:参数必须做白名单过滤,取值必须判空,这两条不做,筛选页要么被注入,要么出现空白列表。
模板里取 URL 参数时,只允许出现你预设过的值(如年份只能在 2015—2026 之内,地区只能是已定义的那几个),用 in_array 之类做白名单校验后再拼进查询条件。空值判断要统一走「无筛选」分支,不要生成 where="vod_year=''" 这种条件。
总的来说:海洋 CMS 列表页加筛选,就是「URL 参数 → 模板条件标签 → 分页补参」这条链。把参数命名规范、分支数量控制住、分页补参的 JS 加上,基本一次就能跑通;剩下的只是把按钮样式调好看。
原文链接:https://www.gj0.com/thread-675.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。