My Computer · 2026/01/09 1

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

采用反代方式运行苹果cms后出现很多诡异问题。。。缓存不更新,文件不更新,设置不更新,等等等。。。
这不已经2026年了,增加了新年份的筛选前端模板却死活不显示,只能放弃系统内置的视频年代设置。

主要逻辑:
根据当前年份,近10年逐年单独列出,更早的按年代划分:按 10 年段列出年代,直到70年代,以及“更早”进行兜底。

application/common/model/Vod.php

if(!empty($year)) { $where['vod_year'] = ['in',explode(',',$year)]; }
修改为

 if(!empty($year)) {
        $year_parts = array_values(array_filter(array_map('trim', explode(',', $year)), 'strlen'));
        $year_in = [];
        $year_conditions = [];
        $current_short = intval(date('y'));

        foreach ($year_parts as $part) {
            if ($part === '更早') {
                $year_conditions[] = 'vod_year <= 1969';
                continue;
            }
            if (preg_match('/^(\d{2})年代$/u', $part, $m)) {
                $decade = intval($m[1]);
                $century = ($decade <= $current_short) ? 2000 : 1900;
                $start_year = $century + $decade;
                $end_year = $start_year + 9;
                $year_conditions[] = "(vod_year BETWEEN {$start_year} AND {$end_year})";
                continue;
            }
            if (preg_match('/^\d{4}$/', $part)) {
                $year_in[] = intval($part);
            }
        }

        if (!empty($year_in)) {
            $year_conditions[] = 'vod_year IN (' . implode(',', $year_in) . ')';
        }

        if (!empty($year_conditions)) {
            $year_clause = '(' . implode(' OR ', $year_conditions) . ')';
            if (!empty($where['_string'])) {
                $where['_string'] = '(' . $where['_string'] . ') AND ' . $year_clause;
            } else {
                $where['_string'] = $year_clause;
            }
        }
    }

前端模板仅供参考:

{php}
						$current_year = intval(date('Y'));
						$year_list = [];
						for ($i = 0; $i < 10; $i++) {
							$year_list[] = $current_year - $i;
						}
						$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}
					<div class="module-class-items scroll-box">
						<div class="module-class-item scroll-content">
							<div class="module-item-title">年份<i class="icon-arrow"></i></div>
							<div class="module-item-box">
								<a href="{:mac_url_type($obj,['area'=>$param['area'],'lang'=>$param['lang'],'year'=>'','level'=>$param['level'],'letter'=>$param['letter'],'state'=>$param['state'],'tag'=>$param['tag'],'class'=>$param['class'],'order'=>$param['order'],'by'=>$param['by'] ],'show')}" {if condition="$param['year'] eq ''"}class="active"{/if}>全部</a>
								{maccms:foreach name=":$year_list" id="vo2" key="key2"}
								<a {if condition="$param['year'] eq $vo2"}class="active"{/if} href="{:mac_url_type($obj,['area'=>$param['area'],'lang'=>$param['lang'],'year'=>$vo2,'level'=>$param['level'],'letter'=>$param['letter'],'state'=>$param['state'],'tag'=>$param['tag'],'class'=>$param['class'],'order'=>$param['order'],'by'=>$param['by'] ],'show')}" title="{$vo2}">{$vo2}</a>
								{/maccms:foreach}
								{maccms:foreach name=":$decade_list" id="vo2" key="key2"}
								<a {if condition="$param['year'] eq $vo2"}class="active"{/if} href="{:mac_url_type($obj,['area'=>$param['area'],'lang'=>$param['lang'],'year'=>$vo2,'level'=>$param['level'],'letter'=>$param['letter'],'state'=>$param['state'],'tag'=>$param['tag'],'class'=>$param['class'],'order'=>$param['order'],'by'=>$param['by'] ],'show')}" title="{$vo2}">{$vo2}</a>
								{/maccms:foreach}
								<a {if condition="$param['year'] eq '更早'"}class="active"{/if} href="{:mac_url_type($obj,['area'=>$param['area'],'lang'=>$param['lang'],'year'=>'更早','level'=>$param['level'],'letter'=>$param['letter'],'state'=>$param['state'],'tag'=>$param['tag'],'class'=>$param['class'],'order'=>$param['order'],'by'=>$param['by'] ],'show')}" title="更早">更早</a>
							</div>
						</div>
					</div>