Files
SEONexus/code/app/home/view/videoGpt1/video/getVideoPlayUrl.html
2026-04-18 01:31:44 +08:00

314 lines
12 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{extend name="base" /}
{block name="get-data"}
{if $Request.route.intVId && $Request.route.intVForgeId}
{video:info v_id="$Request.route.intVId" v_pinyin="$Request.route.strPinyin" v_key="arrVideo" v_fid="$Request.route.intVForgeId" export_name="arrVideo"/}
{elseif $Request.route.intVId || $Request.route.strPinyin}
{video:info v_id="$Request.route.intVId" v_pinyin="$Request.route.strPinyin" v_key="arrVideo" export_name="arrVideo"/}
{else}
{video:info v_id="$DomainModel->info_id" n_key="arrVideo" export_name="arrVideo" /}
{/if}
{site:vciurl parent_category="$arrVideo.v_parent_category_en" export_name="strVciurl" /}
{site:vclurl parent_category="$arrVideo.v_parent_category_en"
category="$arrVideo.v_category_en"
area="all" lang="all" year="all" order="all" page="1"
export_name="strVclurl" /}
{video:seocopy scene="play"
video="$arrVideo"
play_type="$Request.route.strPlayType"
play_index="$Request.route.intPlayIndex"
export_name="seoCopy" /}
{php}
$arrBreadcrumb = [
['title'=>'首页','url'=>'/'],
['title'=>$arrVideo['v_parent_category'],'url'=>$strVciurl],
['title'=>$arrVideo['v_category'],'url'=>$strVclurl],
];
$strPlaySlug = trim((string)($arrVideo['v_name_en'] ?? request()->route('strPinyin') ?? ''));
if ($strPlaySlug === '') {
$strPlaySlug = (string)($arrVideo['v_id'] ?? '');
}
$strCurrentPlayType = trim((string)(request()->route('strPlayType') ?? ''));
$intCurrentPlayIndex = max(1, (int)(request()->route('intPlayIndex') ?? 1));
$arrPlayGroups = is_array($arrVideo['v_play_url'] ?? null) ? $arrVideo['v_play_url'] : [];
if ($strCurrentPlayType === '' && !empty($arrPlayGroups)) {
$strCurrentPlayType = (string)array_key_first($arrPlayGroups);
}
$strCurrentPlayLine = trim((string)app(\app\services\VideoService::class)->getConverterPlayLineVal($strCurrentPlayType));
if ($strCurrentPlayLine === '') {
$strCurrentPlayLine = strtoupper($strCurrentPlayType !== '' ? $strCurrentPlayType : 'default');
}
$strCurrentEpisodeName = '第' . $intCurrentPlayIndex . '集';
if (!empty($arrPlayGroups[$strCurrentPlayType][$intCurrentPlayIndex - 1]['name'])) {
$strCurrentEpisodeName = trim((string)$arrPlayGroups[$strCurrentPlayType][$intCurrentPlayIndex - 1]['name']);
}
$strPlayMainHeading = trim((string)($arrVideo['v_name'] ?? ''));
if ($strPlayMainHeading === '') {
$strPlayMainHeading = '当前内容';
}
if ($strCurrentEpisodeName !== '') {
$strPlayMainHeading .= ' ' . $strCurrentEpisodeName;
}
$strPlayHeadingMeta = trim($strCurrentPlayLine);
if ($strPlayHeadingMeta === '') {
$strPlayHeadingMeta = '在线播放';
}
$strPlayDetailUrl = '';
if ((int)($arrVideo['v_id'] ?? 0) > 0) {
$strPlayDetailUrl = app(\app\services\VideoService::class)->getVideoInfoUrl(
(int)$arrVideo['v_id'],
$strPlaySlug
);
}
$strPlayCanonicalUrl = '';
if ((int)($arrVideo['v_id'] ?? 0) > 0) {
$strPlayCanonicalUrl = app(\app\services\VideoService::class)->getVideoPlayUrl(
(int)$arrVideo['v_id'],
$strPlaySlug,
$strCurrentPlayType !== '' ? $strCurrentPlayType : 'default',
$intCurrentPlayIndex
);
}
$strPlayVisibleIntro = trim((string)($seoCopy['play_intro'] ?? ''));
if ($strPlayVisibleIntro === '') {
$strPlayVisibleIntro = '当前页围绕《' . (string)($arrVideo['v_name'] ?? '当前内容') . '》' . $strCurrentEpisodeName . '整理在线播放入口,并补充剧情与观看线索,方便直接续看。';
}
$strPlayMetaNote = trim((string)($seoCopy['play_meta_note'] ?? ''));
if ($strPlayMetaNote === '') {
$strPlayMetaNote = '当前线路为' . $strCurrentPlayLine . ',如果加载较慢可以切换线路,或先回详情页补看剧情资料。';
}
$strPlayBodyGuideLead = trim((string)($seoCopy['play_body_lead'] ?? ''));
if ($strPlayBodyGuideLead === '') {
$strPlayBodyGuideLead = '播放页更适合先确认当前线路、集数和回详情路径,再决定是否继续完整观看。';
}
$strPlayBodyGuideNext = trim((string)($seoCopy['play_body_next'] ?? ''));
if ($strPlayBodyGuideNext === '') {
$strPlayBodyGuideNext = '如果想先了解完整剧情和人物资料,可以回到详情页继续浏览。';
}
$arrPlayGuideCards = array_values(array_filter((array)($seoCopy['guide_cards'] ?? []), static function ($arrCard): bool {
return is_array($arrCard)
&& (
trim((string)($arrCard['title'] ?? '')) !== ''
|| trim((string)($arrCard['text'] ?? '')) !== ''
);
}));
if (empty($arrPlayGuideCards)) {
$arrPlayGuideCards = [
['title' => '当前剧集', 'text' => $strCurrentEpisodeName],
['title' => '当前线路', 'text' => $strCurrentPlayLine],
['title' => '观看建议', 'text' => '如果当前线路不够稳定,可先切换线路,或返回详情页继续浏览剧情资料。'],
];
}
{/php}
{/block}
{block name="title"}{site:seotkd code="title" page="play" /}{/block}
{block name="keywords"}{site:seotkd code="keywords" page="play" /}{/block}
{block name="description"}{site:seotkd code="description" page="play" /}{/block}
{block name="head"}
<meta name="robots" content="noindex,follow">
{if $Request.route.intVId }
<link rel="canonical" href='https://{$DomainModel->d_domain}{$strPlayCanonicalUrl}'>
{/if}
{// Open Graph 协议用于Facebook、LinkedIn等}
<meta property="og:title" content='{site:seotkd code="title" page="play" /}'>
<meta property="og:description" content='{site:seotkd code="description" page="play" /}'>
{switch $arrVideo.v_parent_category_en }
{case 'dian-ying' }
<meta property="og:type" content="video.movie" />
{/case}
{case 'dian-shi-ju' }
<meta property="og:type" content="video.episode" />
{/case}
{case 'zong-yi' }
<meta property="og:type" content="video.tv_show" />
{/case}
{case 'dong-man' }
<meta property="og:type" content="video.episode" />
{/case}
{case 'duan-ju-da-quan' }
<meta property="og:type" content="video.episode" />
{/case}
{default /}
<meta property="og:type" content="video.movie" />
{/switch}
<meta property="og:url" content='https://{$DomainModel->d_domain}{$strPlayCanonicalUrl}'>
<meta property="og:image" content="https://{$DomainModel->d_domain}{$arrVideo.v_pic}">
<meta property="og:site_name" content="{$DomainModel->d_name}">
<meta property="og:video:type" content="video/m3u8">
{// Twitter Card用于Twitter/X}
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="{$arrVideo.v_name|raw} - {$arrVideo.v_category|default=''|raw}完整版在线观看 - {$DomainModel->d_name|raw}">
<meta name="twitter:description" content="{if !empty($arrVideo.v_description)}{$arrVideo.v_description|raw}{else/}{$DomainModel->d_name|raw}为你提供{$arrVideo.v_name|raw}在线播放与相关内容推荐。{/if}">
<meta name="twitter:image" content="{if stripos($arrVideo.v_pic,'http')===0}{$arrVideo.v_pic|raw}{else/}https://{$DomainModel->d_domain}{$arrVideo.v_pic|raw}{/if}">
{php}
// 你已有:$arrBreadcrumbtitle/url
// 这里补成绝对 URL避免 JSON-LD 用相对路径
$strBase = 'https://' . $DomainModel->d_domain;
$arrBreadcrumbLd = [];
foreach ($arrBreadcrumb as $intIdx => $arrIt) {
$strTitle = (string)($arrIt['title'] ?? '');
$strUrl = (string)($arrIt['url'] ?? '');
if ($strTitle === '' || $strUrl === '') {
continue;
}
// url 绝对化
if (stripos($strUrl, 'http') !== 0) {
if ($strUrl[0] !== '/') {
$strUrl = '/' . $strUrl;
}
$strUrl = $strBase . $strUrl;
}
$arrBreadcrumbLd[] = [
'@type' => 'ListItem',
'position' => (int)($intIdx + 1),
'name' => $strTitle,
'item' => $strUrl,
];
}
{/php}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": {php}echo json_encode($arrBreadcrumbLd, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);{/php}
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "VideoObject",
"name": "{$arrVideo.v_name|raw}",
"description": "{if !empty($arrVideo.v_description)}{$arrVideo.v_description|raw}{else/}暂无简介{/if}",
"thumbnailUrl": "{$arrVideo.v_pic|raw}",
"uploadDate": "{:date('Y-m-d')}",
"url": "https://{$DomainModel->d_domain}{$strPlayCanonicalUrl}"
{if !empty($arrVideo.v_lang)},{/if}
{if !empty($arrVideo.v_lang)}
"inLanguage": [
{volist name="$arrVideo.v_lang" id="strVideoLang" key="index"}{if $index>1},{/if}"{$strVideoLang|raw}"{/volist}
]
{/if}
{if !empty($arrVideo.v_area)},{/if}
{if !empty($arrVideo.v_area)}
"contentLocation": [
{volist name="$arrVideo.v_area" id="strVideoArea" key="index"}{if $index>1},{/if}{
"@type": "Place",
"name": "{$strVideoArea|raw}"
}{/volist}
]
{/if}
{if !empty($arrVideo.v_director)},{/if}
{if !empty($arrVideo.v_director)}
"director": [
{volist name="$arrVideo.v_director" id="strVideoDirector" key="index"}{if $index>1},{/if}{
"@type": "Person",
"name": "{$strVideoDirector|raw}"
}{/volist}
]
{/if}
{if !empty($arrVideo.v_actor)},{/if}
{if !empty($arrVideo.v_actor)}
"actor": [
{volist name="$arrVideo.v_actor" id="strVideoActor" key="index"}{if $index>1},{/if}{
"@type": "Person",
"name": "{$strVideoActor|raw}"
}{/volist}
]
{/if}
{if !empty($arrVideo.v_score) && floatval($arrVideo.v_score)>0},{/if}
{if !empty($arrVideo.v_score) && floatval($arrVideo.v_score)>0}
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "{$arrVideo.v_score|raw}",
"ratingCount": 1
}
{/if},
"publisher": {
"@type": "Organization",
"name": "{$DomainModel->d_name|raw}"
}
}
</script>
{/block}
{block name="strPageCode"}<?php $strPageCode = 'player'; ?>{/block}
{block name="head-css"}
{// <link rel="stylesheet" href="/public/video/DPlayer.min.css"> /}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/dplayer/dist/DPlayer.min.css">
{/block}
{block name="main"}
{assign name="pageCfg" value="$TpStyle.template_cfg.pages.play"}
{include file="module/page/page_router" /}
{include file="module/seo_copy/play" /}
<script>
const strMaxPlayHeight = '480px'
const strVideoId = `{$arrVideo.v_id}`;
const arrVideo = {
'v_id': `{$arrVideo['v_id']}`,
'v_name_en': `{$arrVideo['v_name_en']}`,
'v_pic': `{$arrVideo['v_pic']}`,
'v_name': `{$arrVideo['v_name']}`,
'v_description': `{$arrVideo['v_description']}`,
'v_publish_date': `{$arrVideo['v_publish_date']}`,
'v_remarks': `{$arrVideo['v_remarks']}`,
'v_category': `{$arrVideo['v_category']}`,
};
var intPlayUrlIndex = '{$Request.route.intPlayIndex}'
var strPlayType = '{$Request.route.strPlayType}'
var intJumpTimeFirst = 1;
var intJumpTimeTwoStart = 1;
var intJumpTimeTwoEnd = 1;
var arrPlayUrl = {$arrVideo.v_play_url|json_encode|raw} ;
var strPlayUrl = ""
var boolIsPlayPage = true
</script>
{/block}
{block name="footer-js"}
{// <script src="https://cdn.staticfile.org/jquery/3.7.1/jquery.min.js"></script>/}
{// <script type="text/javascript" src="/public/video/hls.min.js" ></script>/}
{// <script type="text/javascript" src="/public/video/DPlayer.min.js" ></script>/}
<script src="https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/dplayer/dist/DPlayer.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/hls.js/dist/hls.min.js"></script>
{/block}