苹果cms视频年份筛选:近10个年份单独列出+按年代筛选

机器人
摘要
Mxchild
生成中...

苹果 CMS 自带的”年份”标签是后台写死的枚举,不会跨年度,模板前端页面显示的时候,会将配置的所有年份逐个显示出来,年份过多时,前端页面会显示大量年份信息堆叠。

一、实现功能

本文主要是放弃系统内置实现逻辑,用模板里 {php} 算年份 + 后端 Vod.php 改 SQL 条件。这套改造最实在的收益,就是让年份标签「跨年自动续期」——到了 2027 年、2028年,筛选面板里自动出现新的年份选项,不用你动一行代码。每年跨年夜不用再惦记着「去后台加年份」这件事了,这是相比系统默认方案最值钱的地方。

二、效果预览

图片[1] - 苹果cms视频年份筛选:近10个年份单独列出+按年代筛选 - 迅维博客网

三、实现思路

用户访问 /vodlist/1---2026--.html
        ↓
ThinkPHP 路由 → vodlist/show
        ↓
调用 Vod::listSearch() (application/common/model/Vod.php)
        ↓
if (!empty($param['year'])) {
    if (4 位数字)            →  $year = intval(2026)
    elseif (9 位 "2024-2026") →  $year = "2024,2025,2026"
    elseif (XX年代 / 更早)   →  $year = "10年代" (原样传)
}
        ↓
where 拼装 (重点改这里)
  4 位数字 → WHERE vod_year IN (...)
  XX年代  → WHERE (vod_year BETWEEN 2010 AND 2019)
  更早    → WHERE vod_year <= 1969
        ↓
模板 type.html 渲染筛选面板
  {php} 计算近 10 年 + 10 年段 + 更早 {/php}
  {maccms:foreach} 循环渲染标签

核心就 2 个改动点:

  1. 模板:动态算年份标签 + 渲染
  2. 后端模型:识别新格式(XX年代 / 更早)+ 翻译成对应 SQL

四、操作步骤

4.1 模板:动态生成年份标签

文件:template/ds3/name/vod/type.html(筛选面板主体),我用的是短视主题做的测试,具体文件请参考自己使用的模板文件。

在「年份」那个 nav-swiper 块里,把写死的 maccms:foreach 替换成下面的逻辑:

<div class="nav-swiper rel">
    <div class="filter-text bj cor5"><span>年份</span></div>
    <ul class="swiper-wrapper">
        <!-- 全部 -->
        <li data-type="year" data-val=""
            class="swiper-slide{if$param['year']==''} nav-dt{/if}">
            <a href="javascript:" rel="nofollow">全部</a>
        </li>

        {php}
            $current_year = intval(date('Y'));
            // 近 10 年逐年
            $year_list = [];
            for ($i = 0; $i < 10; $i++) {
                $year_list[] = $current_year - $i;
            }
            // 10 年段:当前年所在段 → 70 年代(步长 10)
            $decade_list = [];
            $decade_start = intval(floor($current_year / 10) * 10);
            for ($d = $decade_start; $d >= 1970; $d -= 10) {
                $decade_list[] = sprintf('%02d年代', $d % 100);
            }
        {/php}

        <!-- 近 10 年逐年 -->
        {maccms:foreach name=":$year_list" id="vo2" key="key2"}
        <li data-type="year" data-val="{$vo2}"
            class="swiper-slide{if$param['year']==$vo2} nav-dt{/if}">
            <a href="javascript:" rel="nofollow">{$vo2}</a>
        </li>
        {/maccms:foreach}

        <!-- 10 年段分组 -->
        {maccms:foreach name=":$decade_list" id="vo2" key="key2"}
        <li data-type="year" data-val="{$vo2}"
            class="swiper-slide{if$param['year']==$vo2} nav-dt{/if}">
            <a href="javascript:" rel="nofollow">{$vo2}</a>
        </li>
        {/maccms:foreach}

        <!-- 更早兜底 -->
        <li data-type="year" data-val="更早"
            class="swiper-slide{if$param['year']=='更早'} nav-dt{/if}">
            <a href="javascript:" rel="nofollow">更早</a>
        </li>
    </ul>
</div>

三个关键点

  1. {php} ... {/php} 模板里跑 PHP:用 date('Y') 取当前年,向前数 10 个年度,然后从当前年所在的段(2020 年代)开始,每 10 年一段直到 70 年代。
  2. data-val="{$vo2}" 传给前端 JS:点哪个就把哪个值塞 URL,不是写死 href,靠 JS 改地址栏。
  3. {$param['year']==$vo2} 判高亮:模板渲染时直接判选中态,不用 JS 后处理。

为什么用 data-val 而不是 <a href="...">?因为筛选面板要走”多维度联动”——你选了「电影 + 2026 + 中国」,下次选「10 年代」时要把 URL 改成 /vodlist/1--10年代---中国--.html,参数位置要保持原样。用 data-val 让 JS 接管 URL 拼接最灵活。

4.2 后端:识别 XX年代更早 转 SQL

文件:application/common/model/Vod.php

第一步:解析参数时支持新格式(约 240 行):

第二步:where 条件改写(约 350 行,这是关键改动):

五、和系统默认方案的差异

维度系统默认改造后
年份标签来源后台「模板参数」枚举模板 {php} 实时算
跨年自动续期❌ 要手动加✅ 自动
9 位区间 2024-2026✅ 支持✅ 保留
4 位年份 2026✅ 支持✅ 保留
10 年段 10年代❌ 不支持✅ 新增
更早兜底❌ 不支持✅ 新增
模板改动01 个文件
后端改动01 个文件(Vod.php)
SEO 友好✅ 服务端渲染✅ 保留服务端渲染

具体差异体现在几处:

年份标签怎么来:系统默认是从后台「模板参数」里的枚举里读,写死的,改一年得动一次;改造后是模板里用 {php} 实时算出来的,永远跟着服务器当前年份走。

能识别哪些格式:4 位具体年份(比如 2026)和 9 位区间(比如 2024-2026)原本就支持,改造后保留;新加了 10 年段(比如「10 年代」)和「更早」兜底两个能力,原本系统是识别不了这种值的。

改动成本:前端模板动一个文件(type.html)、后端动一个文件(Vod.php),共两个,不多不少。

对 SEO 的影响:页面依旧走服务端渲染,百度蜘蛛该抓到的内容一个不落,SEO 这条线不受影响。

所以整套改造的本质是:用一次性的少量代码改动,换取永久性的「跨年不失效 + 新增 10 年段 + 更早兜底」三件能力,后续基本零维护。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容