海洋 CMS 列表页模板如何新增筛选条件

juming
juming 初级会员超兽战士
发布于 2026-10-08 01:45 ·2 浏览 ·0 回复

海洋 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}

三点注意:

  1. 分支不要超过 4 个。年份、地区、类型、语言四个维度全排列会写爆模板,正确做法是多参数用 and 拼成一条 where,只判断「有没有任意筛选参数」两种情况。
  2. 如果所用版本的 {seacms:list} 不支持 where 属性,等价做法是把参数交给搜索页接收(海洋 CMS 自带搜索入口支持按年代、地区、语言过滤),列表页只负责跳转。
  3. 「全部」选项要把参数置空,不能在 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 加上,基本一次就能跑通;剩下的只是把按钮样式调好看。

版权声明:本文来自 GJ站长论坛《海洋 CMS 列表页模板如何新增筛选条件》
原文链接:https://www.gj0.com/thread-675.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~