My Computer · 2025/08/08 0

苹果cms 用自定义参数给视频列表增加“置顶”功能

比如说网站首页有一个近期热播推荐列表,正常情况下是按更新时间来排序的,时不时会有资源站更一些很老旧的资源出来,如果你的列表没有及时维护最后这个列表可能新旧夹杂在一起非常混乱。

后台网站参数配置里增加一个“置顶”的自定参数sticky_vod_ids,设置好要置顶vod_id,比如:sticky_vod_ids$$$159409,159037,159060,157477,117901

英文逗号分隔,顺序=展示顺序
这样前台159409,159037,159060,157477,117901这5个视频会在列表置顶显示,不管其他视频怎么更新这些视频始终排在列表最前边。

举例:前台热播推荐部分的源码为:

{maccms:vod num="'.$mxprost['mxprocms']['s3']['indexhotnum'].'" type="all" order="desc" by="time" level="'.$mxprost['mxprocms']['s3']['indexhottj'].'" year="'.$mxprost['mxprocms']['s3']['indexlistyear1'].'"}
{include file="block/vodbox"}
{/maccms:vod}

增加置顶功能后的优化代码:

<!-- 读取后台自定义参数 sticky_vod_ids,并做预处理(形如:159409,159037,159060,157477) -->
{php}
    // 从全局配置的“自定义参数”里取置顶ID串;不存在则给空串
    $sticky_ids = isset($GLOBALS['config']['extra']['sticky_vod_ids']) ? trim($GLOBALS['config']['extra']['sticky_vod_ids']) : '';

    // 容错:去掉所有空格,避免 “159409, 159037 ,159060” 这类写法带来解析问题
    $sticky_ids = str_replace(' ', '', $sticky_ids);

    // 拆分成数组;array_filter 过滤空项;array_values 重建从 0 开始的顺序索引(保证遍历顺序=填写顺序)
    $sticky_arr   = array_values(array_filter(explode(',', $sticky_ids)));
    $sticky_count = count($sticky_arr); // 置顶数量

    // 原配置的总展示条数(来自你现有配置项)
    $base_num = isset($mxprost['mxprocms']['s3']['indexhotnum']) ? intval($mxprost['mxprocms']['s3']['indexhotnum']) : 0;

    // 常规列表条数 = 总数 - 置顶数;用 max(0, …) 避免变成负数
    $list_num = max(0, $base_num - $sticky_count);
{/php}

<!-- 1) 置顶区:按后台顺序逐条输出;每个ID单独查询,顺序绝对可控。
     注意:这里不要附加 level/year 等筛选,以免把置顶的条目过滤掉。 -->
{if condition="!empty($sticky_arr)"}
  {maccms:foreach name="$sticky_arr" id="sid"}
    {maccms:vod ids="'.$sid.'" num="1"}
      {include file="block/vodbox"}
    {/maccms:vod}
  {/maccms:foreach}
{/if}

<!-- 2) 常规列表:排除置顶ID;num 按置顶数量扣减,保证总展示条数 = 置顶 + 常规 -->
{maccms:vod
    num="'.intval($list_num).'"          <!-- 这里用已经算好的整数,避免在属性里做表达式 -->
    type="all"
    order="desc"
    by="time"
    level="'.$mxprost['mxprocms']['s3']['indexhottj'].'"
    year="'.$mxprost['mxprocms']['s3']['indexlistyear1'].'"
    not="'.$sticky_ids.'"               <!-- 后台为空时,这里为空字符串,不会影响查询;有值则排除置顶,避免重复 -->
}
  {include file="block/vodbox"}
{/maccms:vod}

<!-- 提示:
  1) 别在 {maccms:vod ...} 的同一行里写 /* 注释 */ 或 // 注释,会触发“模板标签错误:vod”。
  2) 修改后台 sticky_vod_ids 后记得清理缓存(系统缓存 + 模板缓存)再刷新页面。
-->

红框内为置顶显示的视频

多页面/多模块想各自维护置顶,可新增不同键名(如 sticky_vod_ids_indexsticky_vod_ids_rank),根据模板按需读取。