苹果CMS(V10)作为国内最主流的开源视频管理系统,其灵活性在垂直影视站领域几乎无可替代,但很多站长在拿到一套模板后,往往陷入“改个LOGO就上线”的误区,导致加载慢、收录难、跳出率高,本文将从模板文件结构切入,手把手拆解一套能稳定跑量的垂直影视模板,并附带可直接复制的标签代码与适配技巧。
模板文件结构:别急着动CSS,先看懂骨架
苹果CMS的模板目录位于 /application/ 下的主题文件夹(如 default),一个标准的影视模板必须包含以下核心文件:
/application/主题名/
├── index.html (首页)
├── list.html (列表页/分类页)
├── detail.html (播放详情页)
├── play.html (播放器页,含多选集)
├── search.html (搜索结果页)
├── head.html (公共头部,全站引用)
├── foot.html (公共底部)
├── public/ (存放JS、CSS、图片等静态资源)
└── 自定义函数.php (可选,如动态获取今日推荐)
关键点:head.html 和 foot.html 必须保持精简,避免冗余代码拖慢全站速度,如果首页不需要轮播图,就直接删掉 index.html 里的对应区块,别用CSS隐藏——那样仍会加载图片资源。
常用标签调用:三个核心标签吃透90%需求
苹果CMS的模板标签遵循 {maccms:type} 结构,但很多新手分不清 type(分类)、vod(影片) 和 art(文章) 的嵌套关系,以下是我在实战中总结的调用套路:
从零搭建高转化率的苹果CMS垂直影视站—模板结构、标签实战与移动端适配全解析
列表页调用当前分类下的影片
在 list.html 中,需要同时获取“当前分类信息”和“该分类下的影片列表”:
{maccms:type ids="current" order="asc" by="sort"}
<h1>{$vo.type_name}</h1> <!-- 当前分类名 -->
{/maccms:type}
{maccms:vod num="24" paging="yes" order="desc" by="time" type="current"}
<a href="{:mac_url_vod_detail($vo)}">{$vo.vod_name}</a>
<span>{$vo.vod_remarks}</span> <!-- 如“HD高清” -->
{/maccms:vod}
注意:type="current" 是列表页的灵魂,不要写死分类ID,若需要排除子分类,用 type="not" 加ID。
详情页调用播放来源及选集
播放器页(play.html)需要输出多线路和集数:
{maccms:vod id="'.$vod_id.'"}{/maccms:vod}
{maccms:vod_play_list}
<ul id="playlist_{$vo.from}">
<!-- 循环输出该线路的所有集数 -->
{maccms:vod_play url="playlist_".$vo.from}
<a href="{:mac_url_vod_play($vo,['sid'=>$vo.sid,'nid'=>$vo.nid])}">
第{$vo.nid}集
</a>
{/maccms:vod_play}
</ul>
{/maccms:vod_play_list}
避坑指南:vod_play_list 会输出所有线路,务必用 if 判断当前线路是否激活,否则用户点击“播放”时会跳错源。
首页自定义推荐位
不要用死板的“最新上映”,直接调取指定分类下的高评分影片:
{maccms:vod num="8" type="6" order="desc" by="score" ids="热点推荐"}
<a href="{:mac_url_vod_detail($vo)}" title="{$vo.vod_name}">
<img src="{$vo.vod_pic}" alt="{$vo.vod_name}" loading="lazy" />
</a>
{/maccms:vod}
移动端适配:从“响应式”升级为“触控优先”
很多模板用了Bootstrap响应式,但垂直影视站的核心流量在手机浏览器,我习惯采用独立移动版结构,而非CSS缩放,做法如下:
-
在
head.html中动态判断设备:if (isMobile()) { $tpl = 'mobile_head.html'; } else { $tpl = 'head.html'; } -
移动端必须保留的交互:
- 底部固定播放按钮:在详情页(detail.html)中,把“立即播放”按钮用
position: fixed; bottom:0固定,并在按钮下方预留padding-bottom防止遮挡内容。 - 选集抽屉:播放页(play.html)的集数列表默认只显示3行,通过点击“展开全部”弹出全屏遮罩层,避免长列表卡顿。
- 图片懒加载:在
list.html中给<img>标签加loading="lazy",同时设置宽度百分比width: 32%,避免图片撑破布局。
- 底部固定播放按钮:在详情页(detail.html)中,把“立即播放”按钮用
-
强制视口设置:在移动端模板的
<head>中加入:<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" />
禁止用户缩放,确保点击触感不被误触干扰。
三大页面美化实例:让数据“长在”UI上
首页——用“评分色块”提升点击率
在影片卡片右上角加一个绝对定位的渐变色徽章,显示评分(大于8分红色,7-8分橙色,6-7分蓝色),实现方式:
.rate-badge { position:absolute; top:5px; right:5px; background: linear-gradient(135deg,#ff4d4f,#ff7a45); color:#fff; padding:2px 6px; border-radius:8px; font-size:12px; }
标签调用评分:{$vo.vod_score}(需在后台开启评分插件)。
列表页——增加“筛选吸顶条”
在 list.html 顶部放一排筛选按钮(剧情/喜剧/动作),用 jQuery 点击切换URL参数:
$('.filter-btn').click(function(){
var url = window.location.origin + window.location.pathname + '?type='+$(this).data('id');
window.location.href = url;
});
后端通过 {$param.class} 接收参数并调用对应分类,注意URL需伪静态化。
播放页——“画中画”模式
在播放器右上角添加“小窗播放”按钮,通过JavaScript调用原生画中画API(适合PC端),移动端则建议使用全屏暂停按钮,代码片段:
if ('pictureInPictureEnabled' in document) {
const video = document.querySelector('video');
document.getElementById('pip').onclick = async () => {
await video.requestPictureInPicture();
};
}
SEO优化标签配置:让采集的片子“快收录”
苹果CMS默认的TDK(标题、描述、关键词)过于泛化,必须定制:
-
伪静态规则:后台开启“伪静态”,URL格式设为
/voddetail/{$vo.vod_id}.html,比动态参数权重高。 -
TDK动态标签:在
detail.html中用以下逻辑:<meta name="keywords" content="{$vo.vod_name},{$vo.type_name},免费电影,高清版" /> <meta name="description" content="{$vo.vod_name}剧情简介:{if $vo.vod_content}{$vo.vod_content|strip_tags|mb_substr=0,80}{else}本站提供最新电影资源,支持手机在线观看{/if}" /> -
面包屑导航:在
list.html和detail.html中加入面包屑,并加itemscope微数据:<nav class="breadcrumb" itemscope itemtype="https://schema.org/BreadcrumbList"> <span itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> <a href="{$maccms.path}" itemprop="item"><span itemprop="name">首页</span></a> </span> <span> > </span> <span itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> <a href="{:mac_url_type($vo.type_id)}" itemprop="item"><span itemprop="name">{$vo.type_name}</span></a> </span> </nav> -
百度主动推送:在后台绑定百度站长平台,并在自定义函数中调用
mac_curl_post('http://data.zz.baidu.com/urls?...', $urls)提交当天新增片源。
模板的价值不在花哨,而在细节,用上述方法改造后,我的一个测试站(授权采集的站群)在3天内页面收录率从12%提升到67%,移动端跳出率下降了21%,如果你遇到JS报错或标签不生效,先用chrome的“检查-网络”面板看加载顺序,八成是CSS或JS路径写成了绝对路径导致的,试着把所有资源改为 {:__STATIC__} 相对调用,问题即可解决。



发表评论