跳转到内容
TubePress — 免费、自托管 & 持续维护
开发者参考

主题 API 参考

TubePress 主题 API 参考:在构建或自定义视频站点主题时可用的每一个全局模板变量、辅助函数与类。

本页是主题可用内容的完整参考:注入每个模板的全局变量、各模板专有变量以及主题代码中可用的辅助类。若您正在构建或自定义主题,请将本页与 主题开发 一同参阅。

每个模板均由 ThemeRenderer::render($template, $data) 渲染。渲染器注入一组带 $_ 前缀的全局变量,合并模板专有的 $data,运行 theme.template_data 过滤器,将模板缓冲至 $content,然后加载 layout.php。

全局变量

这些变量在每个模板和 layout.php 中均可用。

站点

变量类型描述
$_templatestring当前模板名称(例如 'home'、'video')
$_siteNamestring来自设置的站点名称
$_siteDescriptionstring站点描述
$_siteUrlstring站点 URL
$_videosPerRowint网格列数(4、5 或 6)
$_userarray|null已登录用户,或 null
$_footerPagesarray标记为页脚的静态页面
$_registrationEnabledbool注册开关
$_ctrEnabledboolCTR 排名开关

外观

变量类型描述
$_siteLogostringLogo 文件名(位于 /uploads/branding/)
$_siteFaviconstringFavicon 文件名
$_siteBackgroundstring背景图片文件名
$_siteBackgroundModestring'cover'、'contain' 或 'repeat'
$_colorOverridesstring包含 CSS 自定义属性的 <style> 块
$_menuSearchbool显示搜索栏
$_menuItemsarray导航项(key、label、url、enabled、templates)

语言区域

变量类型描述
$_localestring当前语言区域代码(例如 'en')
$_directionstring'ltr' 或 'rtl'
$_isRtlbool从右到左语言
$_availableLangsarray可用语言
$_langPrefixstringURL 前缀(例如 '/fr' 或 '')

视频卡片设置

变量类型描述
$_cardShowDurationbool显示时长徽章
$_cardShowTitlebool显示视频标题
$_cardMetaLeftstring左侧元信息:'views'、'likes'、'time'、'none'
$_cardMetaRightstring右侧元信息(相同选项)
$_cardGridGapint以像素为单位的网格间距
$_cardBorderRadiusint以像素为单位的卡片圆角半径
$_cardThumbnailHoverbool缩略图悬停效果
$_cardTitleLinesint标题行数(1 或 2)

播放页面设置

变量类型描述
$_watchShowViewsbool显示观看次数
$_watchShowDurationbool显示时长
$_watchShowDatebool显示发布日期
$_watchShowLikesbool显示点赞/踩
$_watchShowFavoritesbool显示收藏按钮
$_watchShowPornstarsbool显示表演者
$_watchShowChannelsbool显示频道
$_watchShowCategoriesbool显示分类
$_watchShowTagsbool显示标签
$_commentsEnabledbool已启用评论
这些是设置,而非魔法。 每个 $_card* 和 $_watch* 的值均直接来自管理员 外观 界面,因此站点所有者无需修改代码即可重新设置主题样式——只要您读取这些变量而非硬编码即可。

社区

变量类型描述
$_subscriptionsEnabledbool频道订阅已开启且主题支持
$_subscriptionsUnseenint自会员上次访问以来其订阅频道的新视频数(游客为 0)
$_memberUploadsEnabledbool会员上传已开启且主题支持
$_pwaEnabledbool可安装应用已开启

模板专有变量

除全局变量外,每个模板还会接收各自的数据。

home.php

变量类型
$videosarray — 视频行
$paginationPagination 对象
$sortstring — 当前排序键

video.php

变量类型
$videoarray — 包含分类、标签、表演者和频道的完整视频
$categories、$tags、$performersarray
$commentsarray
$similararray — 相似视频
$recommendedarray — 推荐视频
$userVotestring|null — 'like'、'dislike' 或 null
$isFavoritedbool
$subscriptionsOnbool — 是否显示订阅按钮(设置已开启且主题支持)
$channelSubscribed, $channelSubscribersbool, int — 观看者的订阅状态,以及视频第一个频道的订阅数
$ownerPreviewbool — 上传者正在查看自己尚未发布的视频
$uploaderarray|null — 上传该视频的会员

category.php / tag.php / performer.php / channel.php

变量类型
$category / $tag / $performer / $channelarray — 实体
$videosarray — 视频行
$paginationPagination 对象
$sortstring
$subscriptionsOn, $isSubscribed, $subscriberCountbool, bool, int — 仅限 channel.php

列表模板

模板主要变量
categories.php$categories — 每个包含 video_count;CTR 开启时,包含 best_video_thumbnail
performers.php$performers — video_count;CTR 开启时,包含 best_video_thumbnail、total_ctr,按 CTR 排序;$pagination
channels.php结构与 performers 相同
search.php$query、$videos、$pagination

upload.php

变量类型
$uploadGatearray — ok,或会员无法上传的原因(已停用、未登录、达到每日上限)
$uploadConfigarray — 上传脚本所需信息:接口地址、CSRF 令牌、大小与分片限制、支持的格式
$uploadCategories, $uploadTypesarray — 会员可选择的分类和视频类型
$uploadGuidelines, $uploadModeratedstring, bool — 您的上传规则,以及上传是否需要审核

auth/profile.php

变量类型
$subscriptionsTab, $uploadsTabbool — 是否显示订阅和我的上传标签页
$subChannels, $subVideos, $subNewSincearray, array, string|null — 已订阅的频道、其最新视频,以及“新”徽标的截止时间
$uploadItemsarray — 会员的上传,各自附带状态

辅助类

这些静态辅助类在每个模板中均可用。

类主要方法
ThemeRenderer::enqueueCSS($url, $priority)、::enqueueJS($url, $priority)、::partial($name, $data)、::bodyClass()、::renderCSS()、::renderJS()
ThemeManager::assetUrl($path)、::themePath()、::templatePath($t)、::active()、::info($key)
ImpressionTracker::collect($videoId)、::flush()、::isBot()
Format::number($n)、::duration($seconds)、::timeAgo($datetime)、::fileSize($bytes)
Pagination->total、->page、->totalPages、->offset、->hasPrev()、->hasNext()、->pages()、->prevUrl()、->nextUrl()
Router::url($path)、::csrfField()、::csrfToken()、::langPrefix()
HookSystem::doAction($event, ...$args)、::applyFilter($filter, $value, ...$args)
Auth::check()、::user()、::id()
Setting::get($key, $default)
__($key, $replacements)翻译辅助函数
url($path)Router::url($path) 的快捷方式

渲染流程

  1. 控制器调用渲染器。 ThemeRenderer::render('home', ['videos' => $videos, …])。
  2. 注入全局变量。 添加带 $_ 前缀的站点、外观、语言区域和卡片/播放变量。
  3. 插件可修改数据。 HookSystem::applyFilter('theme.template_data', $data, $templateName) 运行。
  4. 模板渲染。 您的模板文件被缓冲至 $content。
  5. 布局加载。 layout.php 接收 $content 以及所有变量。
  6. 展示量刷新。 ImpressionTracker::flush() 发送批量展示更新(CTR)。
  7. Cron 运行。 CronManager::run() 执行所有到期的计划任务。

layout.php 要求

主题的 layout.php 必须完成以下所有操作:

  1. 输出完整的 HTML 框架(<!DOCTYPE html> … </html>)。
  2. 在 <head> 中包含 <?= ThemeRenderer::renderCSS() ?>。
  3. 在 <head> 中包含 <?= $_colorOverrides ?>。
  4. 在 <main> 内输出 $content。
  5. 在 </body> 前包含 <?= ThemeRenderer::renderJS() ?>。
  6. 在 </body> 前调用 <?php ImpressionTracker::flush(); ?>(用于 CTR)。
  7. 在 <head> 中调用 <?php HookSystem::doAction('head.meta'); ?>。
  8. 在 </body> 前调用 <?php HookSystem::doAction('footer.scripts'); ?>。

模板回退

如果活动主题缺少某个模板,TubePress 将回退到捆绑的 Simply 主题。因此,自定义主题只需覆盖实际需要更改的模板——从一个模板开始,逐步扩展。

后续步骤

还有疑问?

从您的控制面板提交工单,我们的团队将为您提供帮助。

体验在线演示 → 下载 TubePress →