This commit is contained in:
make
2025-12-31 00:49:32 +08:00
parent ae57b68f99
commit eb8c097777
709 changed files with 39727 additions and 1041 deletions

View File

@@ -3,7 +3,6 @@
{block name="get-data"}
{video:pagerexp page="$Request.route.intPage" limit="30" button_num="10" cache_life="3600"
key="$Request.get.keyword"
v_parent_category_en="$Request.route.strParentCategory"
v_category_en="$Request.route.strCategory"
v_lang_en="$Request.route.strLang"
@@ -12,124 +11,54 @@ v_year="$Request.route.strYear"
sort_type="$Request.route.strOrder"
d_key="d_key" d_val="Video" p_val="page_data" func="generateVideoPager" export_name="resData" /}
{site:grm page_code="h5_category_list_type" diff="$Request.route.intPage" num="100" g_key="arrGrm" /}
{site:helper func="initVideoCategoryTKD" /}
{/block}
{block name="title"}{site:replace code="VIDEO@GETCATEGORY@TITLE"}{/block}
{block name="keywords"}{site:replace code="VIDEO@GETCATEGORY@KEYWORDS"}{/block}
{block name="description"}{site:replace code="VIDEO@GETCATEGORY@DESCRIPTION"}{/block}
{block name="head"}
{// 社交媒体标签}
<meta property="og:title" content='{site:replace code="VIDEO@GETCATEGORY@TITLE"}' />
<meta property="og:description" content='{site:replace code="VIDEO@GETCATEGORY@DESCRIPTION"}' />
<meta property="og:url" content="https://{$DomainModel->d_domain}" />
{switch $Request.route.strParentCategory }
{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}
{// 结构化数据}
<script type="application/ld+json">
[
{
"@context": "https://schema.org",
"@type": "CollectionPage",
"name": "{$DomainModel->d_name} - 最新{site:getval code="strVideoParentCategoryName" /}推荐",
"url": "https://{$DomainModel->d_domain}",
"description": "{site:replace code="VIDEO@GETCATEGORYINDEX@DESCRIPTION"}",
"potentialAction": {
"@type": "SearchAction",
"target": 'https://{$DomainModel->d_domain}{site:vsurl key="search_term_string" p="1"/}",
"query-input": "required name=search_term_string"
}
"hasPart": [
{volist name="resData.data" id="Video" key="key"}
{if $key < 5 }
{
"@type": "VideoObject",
"name": "{$Video.v_name}",
"description": "{$Video.v_description}",
"thumbnailUrl": '{$Video.v_pic}',
"uploadDate": "{:date('Y-m-d')}",
"url": 'https://{$DomainModel->d_domain}{site:vurl v_id="$Video.v_id" v_py="$Video.v_name_en"/}',
},
{/if}
{/volist}
]
},
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "首页",
"item": "https://{$DomainModel->d_domain}"
},
{
"@type": "ListItem",
"position": 2,
"name": "分类首页",
"item": "https://{$DomainModel->d_domain}{site:vciurl parent_category="$Request.route.strParentCategory" /}"
},
{
"@type": "ListItem",
"position": 3,
"name": "分类列表",
"item": "https://{$DomainModel->d_domain}{site:vclurl parent_category="$Request.route.strParentCategory" category="$Request.route.strCategory" area="$Request.route.strArea" lang="$Request.route.strLang" year="$Request.route.strYear" order="$Request.route.strOrder" page="$Request.route.intPage"}"
}
]
},
]
</script>
{block name="title"}
在线观看
{/block}
{block name="main"}
<section class="section">
<h2 class="page-title">{$typename}</h2>
<div class="grid">
{volist name="list" id="vo"}
<a class="card" href="/detail/{$vo.id}.html">
<div class="card-img">
<img src="{$vo.pic}">
</div>
<div class="card-title">{$vo.title}</div>
</a>
{/volist}
</div>
<div class="pager">{$pages|raw}</div>
</section>
<main class="page-category-sub" style="max-width:{$TpStyle.page_max_width_pc}px;margin:0 auto;">
{/block}
{block name="customize"}
{php}
// 1. 读取冻结 cfg
$cfg = $TpStyle['list_layout']['category_list'];
// 2. 构建标题(不随机)
$title = [
'primary' => '',
'secondary' => '共 ' . $resData['p_data']['total'] . ' 部影片',
];
{/php}
{// ===== Title ===== }
{include file="module/list/title/title_F" /}
{// ===== Shell + Item ===== }
{assign name="__LIST__" value="$resData.data"}
{assign name="listCfg" value="$TpStyle.list_layout.category_list"}
{include file="module/list/shell/_shell_router" /}
{// ===== Pagination ===== }
{php}
$pagerArr = $resData['p_data']['pager'] ?? [];
$page = $resData['p_data']['page'] ?? 1;
$pages = $resData['p_data']['pages'] ?? 1;
// 从 cfg 取分页配置(你会在 SiteStyle 冻结下发)
$pagerCfg = $TpStyle['template_cfg']['components']['pager'] ?? [];
{/php}
{assign name="listCfg" value="$TpStyle.list_layout.category_list"}
{include file="module/pager/_pager_router" /}
</main>
{/block}

View File

@@ -2,8 +2,6 @@
{block name="get-data"}
{site:grm page_code="h5_category_type" diff="$Request.route.strParentCategory" num="100" g_key="arrGrm" /}
{site:helper func="initVideoCategoryTypeTKD" /}
{/block}
@@ -12,246 +10,106 @@
{block name="keywords"}{site:replace code="VIDEO@GETCATEGORYINDEX@KEYWORDS"}{/block}
{block name="description"}{site:replace code="VIDEO@GETCATEGORYINDEX@DESCRIPTION"}{/block}
{block name="head"}
<!-- 社交媒体标签 -->
<meta property="og:title" content='{site:replace code="VIDEO@GETCATEGORYINDEX@TITLE"}' />
<meta property="og:description" content='{site:replace code="VIDEO@GETCATEGORYINDEX@DESCRIPTION"}' />
<meta property="og:url" content="https://{$DomainModel->d_domain}" />
{switch $Request.route.strParentCategory }
{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}
<!-- 结构化数据 -->
<script type="application/ld+json">
[
{
"@context": "https://schema.org",
"@type": "CollectionPage",
"name": "{$DomainModel->d_name} - 最新{site:getval code="strVideoParentCategoryName" /}推荐",
"url": "https://{$DomainModel->d_domain}",
"description": "{site:replace code="VIDEO@GETCATEGORYINDEX@DESCRIPTION"}",
"potentialAction": {
"@type": "SearchAction",
"target": 'https://{$DomainModel->d_domain}{site:vsurl key="search_term_string" p="1"/}",
"query-input": "required name=search_term_string"
}
"hasPart": [
{video:ranklist count="5"
v_category_en="$Request.route.strParentCategory"
sort_type="weekly"
d_key="key" d_val="Video" cache_life="3600"}
{if $key < 5 }
{
"@type": "VideoObject",
"name": "{$Video.v_name}",
"description": "{$Video.v_description}",
"thumbnailUrl": '{$Video.v_pic}',
"uploadDate": "{:date('Y-m-d')}",
"url": 'https://{$DomainModel->d_domain}{site:vurl v_id="$Video.v_id" v_py="$Video.v_name_en"/}',
},
{/if}
{/video:ranklist}
]
},
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "首页",
"item": "https://{$DomainModel->d_domain}"
},
{
"@type": "ListItem",
"position": 2,
"name": "分类首页",
"item": "https://{$DomainModel->d_domain}{site:vciurl parent_category="$Request.route.strParentCategory" /}"
}
]
},
]
</script>
{/block}
{block name="head-css"}{/block}
{block name="head-js"}{/block}
{block name="main"}
<div class="container">
<h1 class="view-title">
{site:replace code="VIDEO@GETCATEGORYINDEX@H1"}
</h1>
<h4 class="view-description">{site:replace code="VIDEO@GETCATEGORYINDEX@TEXT"}</h4>
<nav class="breadcrumb" aria-label="breadcrumb">
<ol itemscope itemtype="https://schema.org/BreadcrumbList">
<li>当前位置:</li>
<li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a href="/" itemprop="item">
<span itemprop="name">首页</span>
</a>
<meta itemprop="position" content="1" />
</li>
<li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a href='{site:vciurl parent_category="$Request.route.strParentCategory" /}' itemprop="item">
<span itemprop="name">{site:getval code="strVideoParentCategoryName" /}</span>
</a>
<meta itemprop="position" content="2" />
</li>
</ol>
</nav>
<div class="row">
<div class="stui-pannel stui-pannel-bg clearfix">
<div class="stui-pannel-box">
<div class="stui-pannel_hd">
<div class="stui-pannel__head clearfix">
<h3 class="title"><img src="/template/videonunu/icon/icon_24.png">最近更新</h3>
</div>
</div>
<div class="stui-pannel_bd clearfix">
<ul class="stui-vodlist clearfix cs-list-r">
{video:list count="12"
v_parent_category_en="$Request.route.strParentCategory"
sort_type="update" d_key="key"
d_val="Video" cache_life="3600"}
{include file="public/video-list-shu" start="10" col-md="6"/}
{/video:list}
</ul>
</div>
</div>
</div>
</div>
<main class="page-category" style="max-width:{$TpStyle.page_max_width_pc}px;margin:0 auto;">
<!-- ================= 聚合推荐区 ================= -->
{assign name="topModule" value="$TpStyle.template_cfg.pages.category_index.top_block.module"}
{video:categorytype category_type="ONE" d_key="key" d_val="val"}
{if $val.v_category_en == $Request.route.strParentCategory}
{foreach $val.children as $intChildrenKey=>$arrChildrenCategory }
<div class="stui-pannel stui-pannel-bg clearfix row">
<div class="stui-pannel-box clearfix">
<div class="stui-pannel_hd">
<div class="stui-pannel__head clearfix">
<a class="more text-muted pull-right"
href='{site:vclurl parent_category="$Request.route.strParentCategory" category="$arrChildrenCategory.v_category_en" area="all" lang="all" year="all" order="all" page="1"}'>
更多
<i class="icon iconfont icon-more"></i>
</a>
<h2 class="title">
<a href='{site:vclurl parent_category="$Request.route.strParentCategory" category="$arrChildrenCategory.v_category_en" area="all" lang="all" year="all" order="all" page="1"}'>
{$arrChildrenCategory.v_category}
</a>
</h2>
</div>
</div>
<div class="stui-pannel_bd clearfix">
<div class="col-md-wide-4 col-xs-1 padding-0">
<div class="carousel carousel_default carousel_default2 col-pd is-draggable" style="height: 250px;"
tabindex="0">
{video:ranklist count="1"
v_category_en="$arrChildrenCategory.v_category_en"
sort_type="weekly"
d_key="key" d_val="Video" cache_life="3600"}
<div class="wide is-selected" >
<a href='{site:vurl v_id="$Video.v_id" v_py="$Video.v_name_en"/}'
class="stui-vodlist__thumb active lazyload-bg"
data-src="{site:cfg code='PUBLIC_COVER_DOMAIN' encode='false'/}{$Video.v_pic}"
title="{$Video.v_name ?? ''} - {$Video.v_parent_category ?? ''}{$Video.v_category ?? ''}免费高清电影在线观看"
style="background-image: url(/template/videolaoniu/images/pic.png) no-repeat; background-position:50% 50%; background-size: cover; padding-top: 65%;">
<span class="play hidden-xs"></span>
<span class="pic-tag pic-tag-h">推荐</span>
<span class="pic-text pic-text-silde text-center">{$Video.v_name}</span>
</a>
</div>
{/video:ranklist}
</div>
<div class="hidden-sm hidden-xs clearfix">
<ul class="col-xs-wide-45 stui-vodlist col-pd clearfix">
{video:ranklist count="1"
v_category_en="$arrChildrenCategory.v_category_en"
sort_type="weekly"
d_key="key" d_val="Video" cache_life="3600"}
<li>
<a class="stui-vodlist__thumb lazyload-bg"
href='{site:vurl v_id="$Video.v_id" v_py="$Video.v_name_en"/}'
title="{$Video.v_name ?? ''} - {$Video.v_parent_category ?? ''}{$Video.v_category ?? ''}免费高清电影在线观看"
data-src="{site:cfg code='PUBLIC_COVER_DOMAIN' encode='false'/}{$Video.v_pic}"
style="background-image: url(&quot;/template/videolaoniu/images/pic.png&quot;);">
<img class="lazyload-img" src="/template/videolaoniu/images/pic.png" style="display: none;"
data-src="{site:cfg code='PUBLIC_COVER_DOMAIN' encode='false'/}{$Video.v_pic}"
alt="{$Video.v_name ?? ''} - {$Video.v_parent_category ?? ''}{$Video.v_category ?? ''}免费高清电影在线观看">
<span class="play active hidden-xs"></span>
<span class="pic-tag pic-tag-h">Top1</span>
</a>
</li>
{/video:ranklist}
</ul>
<ul class="col-xs-wide-55 stui-vodlist__rank col-pd clearfix">
{video:ranklist count="12"
v_category_en="$arrChildrenCategory.v_category_en"
sort_type="weekly"
d_key="key" d_val="Video" cache_life="3600"}
{include file="public/video-list-phb" start="80"/}
{/video:ranklist}
</ul>
</div>
</div>
<div class="col-md-wide-6 col-xs-1 padding-0">
<ul class="stui-vodlist clearfix cs-list-r">
{video:list count="8" v_category_en="$arrChildrenCategory.v_category_en" sort_type="news" d_key="key"
d_val="Video" cache_life="3600"}
{include file="public/video-list-shu" start="27" col-md="4"/}
{/video:list}
</ul>
<ul class="stui-vodlist__text col-pd hidden-xs clearfix">
{video:list count="12" v_category_en="$arrChildrenCategory.v_category_en" sort_type="news" d_key="key"
d_val="Video" cache_life="3600"}
{include file="public/video-list-text" start="10" /}
{/video:list}
</ul>
</div>
</div>
<div class="stui-pannel_ft top-line visible-xs clearfix"><a class="text-muted"
href='{site:vclurl parent_category="$Request.route.strParentCategory" category="$arrChildrenCategory.v_category_en" area="all" lang="all" year="all" order="all" page="1"}'>
查看更多{$val.v_category}<i class="icon iconfont icon-more"></i></a></div>
</div>
</div>
{assign name="cfg" value="$TpStyle.template_cfg.list_layout[$topModule]"}
{assign name="limit" value="$cfg['layout']['max_items']"}
{if $topModule == 'rank'}
{video:ranklistexp count="$limit" sort_type="weekly" d_key="key" d_val="Video" cache_life="3600" v_parent_category_en="$Request.route.strParentCategory"
export_name="__LIST__" /}
{else/}
{video:listexp count="$limit" sort_type="$topModule" d_key="key" d_val="Video" cache_life="3600" v_parent_category_en="$Request.route.strParentCategory"
export_name="__LIST__" /}
{/foreach}
{/if}
{assign name="title" value="$cfg.title_text"}
{include file="module/list/title/title_A" /}
{assign name="listCfg" value="$TpStyle.template_cfg.list_layout.category_list_index"}
{include file="module/list/shell/_shell_router" /}
<!-- ================= 二级分类区块 ================= -->
{video:categorytype category_type="ONE" d_key="key" d_val="val"}
{if $val.v_category_en == $Request.route.strParentCategory}
{foreach $val.children as $i => $sub}
{video:listexp count="12"
v_parent_category_en="$Request.route.strParentCategory"
v_category_en="$sub.v_category_en"
v_lang_en="all"
v_area_en="all"
v_year="all"
sort_type="news"
d_key="d_key" d_val="Video" cache_life="3600"
export_name="__LIST__" /}
{php}
// 1⃣ 生成该二级分类的 section cfg冻结
$sectionCfg = \app\common\helper\SiteStyle::buildCategorySectionCfg(
$TpStyle['template_cfg'],
$sub['v_category_en'],
$i
);
// 2⃣ 数据源(按二级分类变量名取)
$listVar = 'arrSubPreview_' . $sub['v_category_en'];
// $__LIST__ = $listVar ?? [];
//$__LIST__ = $arrVideoNewest ?? [];
// 3⃣ Title二级分类固定 F
$title = [
'primary' => $sub['v_category'],
'secondary' => '精选推荐',
];
// 4⃣ 更多链接
$moreUrl = '/videotype-dian-ying/xi-ju-pian-all-all-all/all-page1';
{/php}
<section class="category-sub-block">
<!-- ===== TitleF===== -->
{include file="module/list/title/title_F" /}
<!-- ===== Shell + Item ===== -->
{assign name="cfg" value="$sectionCfg"}
{assign name="listCfg" value="$TpStyle.list_layout.category_list_index"}
{include file="module/list/shell/_shell_router" /}
</section>
{/foreach}
{/if}
{/video:categorytype}
</div>
</main>
{/block}
{block name="customize"}
{/block}

View File

@@ -59,7 +59,7 @@ p_val="page_data" button_num="5" cache_life="3600" func="generateSearchPager" ex
"item": {
"@type": "Movies",
"name": "{$Video.v_name}",
"url": 'https://{$DomainModel->d_domain}{site:vurl v_id="$Video.v_id" v_py="$Video.v_name_en"/}',
"url": 'https://{$DomainModel->d_domain}{site:vurl v_id='$vo.v_id' v_py='$vo.v_name_en'/}',
"description": "{$Video.v_description}",
"actor": [
{foreach $Video.v_actor as $strActorKey=>$strActor }

View File

@@ -2,9 +2,6 @@
{block name="get-data"}
{site:grm page_code="h5_rank_type" diff="0" num="100" g_key="arrGrm" /}
{/block}
{block name="title"}{site:replace code="VIDEO@GETVIDEORANKINDEX@TITLE"}{/block}
@@ -14,68 +11,8 @@
{block name="head"}
{// 社交媒体标签}
<meta property="og:title" content='{site:replace code="VIDEO@GETVIDEORANKINDEX@TITLE"}' />
<meta property="og:description" content='{site:replace code="VIDEO@GETVIDEORANKINDEX@DESCRIPTION"}' />
<meta property="og:url" content="https://{$DomainModel->d_domain}" />
<meta property="og:type" content="video.movie" />
<script type="application/ld+json">
[
{
"@context": "https://schema.org",
"@type": "CollectionPage",
"name": "{$DomainModel->d_name} - 最新排行榜推荐",
"url": "https://{$DomainModel->d_domain}",
"headline": '{site:replace code="VIDEO@GETVIDEORANKINDEX@TITLE"}',
"description": '{site:replace code="VIDEO@GETVIDEORANKINDEX@DESCRIPTION"}',
"potentialAction": {
"@type": "SearchAction",
"target": 'https://{$DomainModel->d_domain}{site:vsurl key="search_term_string" p="1"/}",
"query-input": "required name=search_term_string"
}
"hasPart": [
{video:ranklist count="5"
sort_type="weekly"
d_key="key" d_val="Video" cache_life="3600"}
{if $key < 10 }
{
"@type": "VideoObject",
"name": "{$Video.v_name}",
"description": "{$Video.v_description}",
"thumbnailUrl": '{$Video.v_pic}',
"uploadDate": "{:date('Y-m-d')}",
"url": 'https://{$DomainModel->d_domain}{site:vurl v_id="$Video.v_id" v_py="$Video.v_name_en"/}',
},
{/if}
{/video:ranklist}
]
},
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "首页",
"item": "https://{$DomainModel->d_domain}"
},
{
"@type": "ListItem",
"position": 2,
"name": "排行榜首页",
"item": "https://{$DomainModel->d_domain}{$strRankUrlTemp}"
}
]
},
]
</script>
{/block}
@@ -91,79 +28,41 @@
{block name="main"}
<div class="container">
<nav class="breadcrumb" aria-label="breadcrumb">
<ol itemscope itemtype="https://schema.org/BreadcrumbList">
<li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a href="/" itemprop="item">
<span itemprop="name">首页</span>
</a>
<meta itemprop="position" content="1" />
</li>
<li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a href='{$strRankUrlTemp}' itemprop="item">
<span itemprop="name">排行榜</span>
</a>
<meta itemprop="position" content="2" />
</li>
</ol>
</nav>
{assign name="cfg" value="$TpStyle.template_cfg.list_layout.rank_list_index"}
{assign name="listCfg" value="$TpStyle.template_cfg.list_layout.rank_list_index"}
{assign name="rankModules" value="$TpStyle.template_cfg.pages.rank_home.modules"}
{assign name="limit" value="$cfg['layout']['max_items']"}
<h1 class="view-title">
{site:replace code="VIDEO@GETVIDEORANKINDEX@H1"}
</h1>
<h4 class="view-description">{site:replace code="VIDEO@GETVIDEORANKINDEX@TEXT"}</h4>
<section class="{$TpStyle.dom_prefix}-rank-home">
<div class="row">
<div class="stui-pannel stui-pannel-bg clearfix">
<div class="stui-pannel-box">
<div class="stui-pannel_hd">
<ul class="stui-screen__list type-slide bottom-line-dot clearfix">
<li>
<a class="text-muted">分类:</a>
</li>
{video:categorytype category_type="ONE" d_key="key" d_val="val"}
<li
class="{if $Request.route.strParentCategory == $val.v_category_en}active{/if} ">
<a
href='{site:vrlurl parent_category="$val.v_category_en" category="all" sort_type="daily" page="1"/}'>
{$val.v_category}
</a>
</li>
{/video:categorytype}
</ul>
</div>
</div>
</div>
{video:ranksort d_key="key" d_val="val"}
</div>
<div class="ee356a layout-box">
<div class="e3c2c3 row">
{video:ranksort d_key="key" d_val="val"}
<div class="fb44a5 col-md-wide-25 pt-xs-0 main-right " style="position:sticky;top:-10px;padding: 10px;background: #fff;">
<div class="dfb7d2 pannel-box mt-xs-0 clearfix">
<div class="e3a1c3 box-title "><span class="dea086 title-lb"></span>
<h2>{$val}排行榜</h2>
</div>
<ul class="d6b451 txt-list txt-list-hot p-xs-0">
{video:ranklist count="20"
sort_type="weekly"
d_key="key" d_val="Video" cache_life="3600"}
{include file="public/video-list-phb" start="80"/}
{/video:ranklist}
</ul>
</div>
</div>
{/video:ranksort}
</div>
</div>
{video:ranklistexp count="$limit"
sort_type="$key"
d_key="key" d_val="Video" cache_life="3600" export_name="__LIST__" /}
</div>
{php}
$title = [
'primary' => $val.'排行榜',
'secondary' => '',
];
{/php}
{include file="module/list/title/_title_router" /}
{include file="module/list/shell/_shell_router" /}
{/video:ranksort}
</section>
{/block}
{block name="customize"}
{/block}

View File

@@ -53,7 +53,7 @@ p_val="page_data" button_num="10" cache_life="3600" export_name="arrVideoRankLis
"description": "{$Video.v_description}",
"thumbnailUrl": '{$Video.v_pic}',
"uploadDate": "{:date('Y-m-d')}",
"url": 'https://{$DomainModel->d_domain}{site:vurl v_id="$Video.v_id" v_py="$Video.v_name_en"/}',
"url": 'https://{$DomainModel->d_domain}{site:vurl v_id='$vo.v_id' v_py='$vo.v_name_en'/}',
},
{/if}
{/volist}

View File

@@ -1,7 +1,10 @@
{extend name="base" /}
{block name="get-data"}
{video:pagerexp page="$Request.get.page" limit="12"
{assign name="limit" value="$TpStyle.list_layout.search_list.layout.max_items"}
{assign name="listCfg" value="$TpStyle.list_layout.search_list"}
{video:pagerexp page="$Request.get.page" limit="$limit"
key="$Request.get.keyword"
d_key="d_key"
d_val="Video"
@@ -59,7 +62,7 @@ p_val="page_data" button_num="5" cache_life="3600" func="generateSearchPager" ex
"item": {
"@type": "Movies",
"name": "{$Video.v_name}",
"url": 'https://{$DomainModel->d_domain}{site:vurl v_id="$Video.v_id" v_py="$Video.v_name_en"/}',
"url": 'https://{$DomainModel->d_domain}{site:vurl v_id='$vo.v_id' v_py='$vo.v_name_en'/}',
"description": "{$Video.v_description}",
"actor": [
{foreach $Video.v_actor as $strActorKey=>$strActor }
@@ -96,25 +99,39 @@ p_val="page_data" button_num="5" cache_life="3600" func="generateSearchPager" ex
{block name="main"}
{include file="header" /}
{php}
// 1. 读取冻结 cfg
$cfg = $TpStyle['list_layout']['search_list'];
$searchCfg = $TpStyle['template_cfg']['pages']['search']['top_block'];
<section class="section">
<h2 class="page-title">搜索结果:{$wd}</h2>
// 2. 构建标题(不随机)
$title = [
'primary' => '',
'secondary' => '共 ' . $resData['p_data']['total'] . ' 部影片',
];
{/php}
<div class="grid">
{volist name="list" id="vo"}
<a class="card" href="/detail/{$vo.id}.html">
<div class="card-img">
<img src="{$vo.pic}">
</div>
<div class="card-title">{$vo.title}</div>
</a>
{/volist}
</div>
</section>
{include file="footer" /}
{include file="module/search/_search_header_router" /}
{// ===== Shell + Item ===== }
{assign name="__LIST__" value="$resData.data"}
{include file="module/list/shell/_shell_router" /}
{// ===== Pagination ===== }
{php}
$pagerArr = $resData['p_data']['pager'] ?? [];
$page = $resData['p_data']['page'] ?? 1;
$pages = $resData['p_data']['pages'] ?? 1;
// 从 cfg 取分页配置(你会在 SiteStyle 冻结下发)
$pagerCfg = $TpStyle['template_cfg']['components']['pager'] ?? [];
{/php}
{include file="module/pager/_pager_router" /}
{/block}
{block name="customize"}

View File

@@ -1,219 +1,36 @@
{extend name="base" /}
{block name="get-data"}
{if $Request.route.intVId && $Request.route.intVForgeId}
{video:info v_id="$Request.route.intVId" v_key="arrVideo" v_fid="$Request.route.intVForgeId" /}
{if $Request.route.intVId && $Request.route.intVForgeId}
{video:info v_id="$Request.route.intVId" v_key="arrVideo" v_fid="$Request.route.intVForgeId" export_name="arrVideo"/}
{elseif $Request.route.intVId}
{video:info v_id="$Request.route.intVId" v_key="arrVideo" /}
{video:info v_id="$Request.route.intVId" v_key="arrVideo" export_name="arrVideo"/}
{else}
{video:info v_id="$DomainModel->info_id" n_key="arrVideo" /}
{/if}
{site:grm page_code="h5_video_info" diff="$arrVideo.v_id" num="120" g_key="arrGrm" /}
{/block}
{block name="title"}
{if $DomainModel->info_id == $Request.route.intVId || empty($Request.route.intVId)}
{site:replace code="VIDEO@INDEX@INDEX@TITLE"}
{else}
{site:replace code="VIDEO@GETVIDEOINFO@TITLE" diff="$Request.route.intVId" /}
{/if}
{/block}
{block name="keywords"}
{if $DomainModel->info_id == $Request.route.intVId || empty($Request.route.intVId)}
{site:replace code="VIDEO@INDEX@INDEX@KEYWORDS"}
{else}
{site:replace code="VIDEO@GETVIDEOINFO@KEYWORDS" diff="$Request.route.intVId"}
{/if}
{/block}
{block name="description"}
{if $DomainModel->info_id == $Request.route.intVId || empty($Request.route.intVId)}
{site:replace code="VIDEO@INDEX@INDEX@DESCRIPTION"}
{else}
{site:replace code="VIDEO@GETVIDEOINFO@DESCRIPTION" diff="$Request.route.intVId"}
{/if}
{/block}
{block name="head"}
{// Open Graph 协议用于Facebook、LinkedIn等}
<meta property="og:title" content='{site:replace code="VIDEO@GETVIDEOINFO@TITLE"}'>
<meta property="og:description" content='{site:replace code="VIDEO@GETVIDEOINFO@DESCRIPTION"}'>
{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}{site:vurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en"/}'>
<meta property="og:image" content="{$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="player">
<meta name="twitter:title" content='{site:replace code="VIDEO@GETVIDEOINFO@TITLE"}'>
<meta name="twitter:description" content='{site:replace code="VIDEO@GETVIDEOINFO@DESCRIPTION"}'>
<meta name="twitter:image" content="{$arrVideo.v_pic}">
{if $Request.route.intVId && $Request.route.intVForgeId}
<link rel="canonical"
href='https://{$DomainModel->d_domain}{site:vurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en"/}'>
{video:info v_id="$DomainModel->info_id" n_key="arrVideo" export_name="arrVideo" /}
{/if}
{// 结构化数据}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "VideoObject",
"name": "{$arrVideo.v_name}",
"description": "{$arrVideo.v_description}",
"thumbnailUrl": "{$arrVideo.v_pic}",
"uploadDate": "{:date('Y-m-d')}",
"url": 'https://{$DomainModel->d_domain}{site:vurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en"/}',
"genre": ["动作", "科幻"],
"keywords": '{site:replace code="VIDEO@GETVIDEOINFO@KEYWORDS"}',
"inLanguage": [
{volist name='$arrVideo.v_lang' id='strVideoLang' key='index'}
"{$strVideoLang}",
{/volist}
],
"contentLocation": [
{volist name='$arrVideo.v_area' id='strVideoArea' key='index'}
{
"@type": "Place",
"name": "{$strVideoArea}"
},
{/volist}
],
{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" /}
"director": [
{volist name='$arrVideo.v_director' id='strVideoDirector' key='index'}
{
"@type": "Person",
"name": "{$strVideoDirector}"
}
{/volist}
],
"actor": [
{volist name='$arrVideo.v_actor' id='strVideoActor' key='index'}
{
"@type": "Person",
"name": "{$strVideoActor}"
},
{/volist}
],
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "{$arrVideo.v_score}",
},
"publisher": {
"@type": "Organization",
"name": "{$DomainModel->d_name}",
}
}
</script>
{/block}
{block name='body-class'}video-info-page{/block}
{block name="strPageCode"}
<?php $strPageCode = 'info'; ?>
{/block}
{block name="main"}
<section class="detail">
{assign name="pageCfg" value="$TpStyle.template_cfg.pages.detail"}
<div class="detail-head">
<div class="detail-cover">
<img src="{$info.pic}">
</div>
{php}
$arrBreadcrumb = [
['title'=>'首页','url'=>'/'],
['title'=>$arrVideo['v_parent_category'],'url'=>$strVciurl],
['title'=>$arrVideo['v_category'],'url'=>$strVclurl],
];
{/php}
<!-- 播放页:$pageCfg = $TpStyle['template_cfg']['pages']['play']; -->
<div class="detail-info">
<h1>{$info.title}</h1>
<div class="detail-sub">{$info.year} · {$info.area} · {$info.type}</div>
{include file="module/page/page_router" /}
<!-- 伪原创简介 -->
<p class="detail-intro">
{php}$desc = \app\common\helper\TextSpin::spin($info['intro'], $style['theme_id']);{/php}
{$desc}
</p>
<a class="btn" href="/play/{$info.id}-1-1.html">开始播放</a>
</div>
</div>
<h3 class="sec-title">剧集列表</h3>
<div class="episode-list">
{volist name="episodes" id="vo"}
<a href="/play/{$info.id}-{$vo.n}-1.html">第{$vo.n}集</a>
{/volist}
</div>
</section>
<script>
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']}`,
'v_year': `{$arrVideo['v_year']}`,
};
var strPlayType = 'default'
var boolIsPlayPage = false
document.addEventListener('DOMContentLoaded', function () {
const trigger = document.querySelector('.check-desc-btn');
if (!trigger) return; // 页面没有按钮就不继续
trigger.addEventListener('click', function () {
const parent = trigger.closest('.lvshicms-vodlist__box') || trigger.parentElement;
const description = parent.querySelector('p.v-description-centent');
if (description) {
description.classList.toggle('txt-hidden');
const icon = trigger.querySelector('.iconfont');
if (icon) {
icon.classList.toggle('icon-down');
icon.classList.toggle('icon-up');
}
trigger.setAttribute('aria-expanded', !description.classList.contains('txt-hidden'));
}
});
});
</script>
{/block}
{block name="customize"} {/block}

View File

@@ -1,191 +1,74 @@
{extend name="base" /}
{block name="get-data"}
{video:info v_id="$Request.route.intVId" v_key="arrVideo" /}
{site:grm page_code="h5_video_info" diff="$arrVideo.v_id" num="120" g_key="arrGrm" /}
{/block}
{block name="title"}
{site:replace code="VIDEO@GETVIDEOPLAY@TITLE" diff="$Request.route.intVId" /}
{/block}
{block name="keywords"}
{site:replace code="VIDEO@GETVIDEOPLAY@KEYWORDS" diff="$Request.route.intVId"}
{/block}
{block name="description"}
{site:replace code="VIDEO@GETVIDEOPLAY@DESCRIPTION" diff="$Request.route.intVId"}
{/block}
{block name="head"}
{// Open Graph 协议用于Facebook、LinkedIn等}
<meta property="og:title" content='{site:replace code="VIDEO@GETVIDEOINFO@TITLE"}'>
<meta property="og:description" content='{site:replace code="VIDEO@GETVIDEOINFO@DESCRIPTION"}'>
{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}{site:vurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en"/}'>
<meta property="og:image" content="{$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="player">
<meta name="twitter:title" content='{site:replace code="VIDEO@GETVIDEOINFO@TITLE"}'>
<meta name="twitter:description" content='{site:replace code="VIDEO@GETVIDEOINFO@DESCRIPTION"}'>
<meta name="twitter:image" content="{$arrVideo.v_pic}">
{if $Request.route.intVId && $Request.route.intVForgeId}
<link rel="canonical"
href='https://{$DomainModel->d_domain}{site:vpurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en" play_type="default" play_index="1" /}'>
{video:info v_id="$Request.route.intVId" v_key="arrVideo" v_fid="$Request.route.intVForgeId" export_name="arrVideo"/}
{elseif $Request.route.intVId}
{video:info v_id="$Request.route.intVId" 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" /}
{// 结构化数据}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "VideoObject",
"name": "{$arrVideo.v_name}",
"description": "{$arrVideo.v_description}",
"thumbnailUrl": "{$arrVideo.v_pic}",
"uploadDate": "{:date('Y-m-d')}",
"url": 'https://{$DomainModel->d_domain}{site:vurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en"/}',
"inLanguage": [
{volist name='$arrVideo.v_lang' id='strVideoLang' key='index'}
"{$strVideoLang}",
{/volist}
],
"contentLocation": [
{volist name='$arrVideo.v_area' id='strVideoArea' key='index'}
{
"@type": "Place",
"name": "{$strVideoArea}"
},
{/volist}
],
"director": [
{volist name='$arrVideo.v_director' id='strVideoDirector' key='index'}
{
"@type": "Person",
"name": "{$strVideoDirector}"
}
{/volist}
],
"actor": [
{volist name='$arrVideo.v_actor' id='strVideoActor' key='index'}
{
"@type": "Person",
"name": "{$strVideoActor}"
},
{/volist}
],
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "{$arrVideo.v_score}",
},
"publisher": {
"@type": "Organization",
"name": "{$DomainModel->d_name}",
}
}
</script>
{/block}
{block name="head-css"}
<link rel="stylesheet" href="/public/video/DPlayer.min.css">
<style type="text/css">
</style>
{/block}
{block name='body-class'}video-play-page{/block}
{block name="strPageCode"}
<?php $strPageCode = 'play'; ?>
{/block}
{block name="main"}
{assign name="pageCfg" value="$TpStyle.template_cfg.pages.play"}
<section class="play">
<div class="player-box">
{$player_code|raw}
</div>
{php}
$arrBreadcrumb = [
['title'=>'首页','url'=>'/'],
['title'=>$arrVideo['v_parent_category'],'url'=>$strVciurl],
['title'=>$arrVideo['v_category'],'url'=>$strVclurl],
];
{/php}
<!-- 播放页:$pageCfg = $TpStyle['template_cfg']['pages']['play']; -->
<h3 class="sec-title">选集</h3>
<div class="episode-list">
{volist name="episodes" id="vo"}
<a href="/play/{$info.id}-{$vo.n}-1.html" class="{eq name='now' value='$vo.n'}active{/eq}">
第{$vo.n}集
</a>
{/volist}
</div>
</section>
{include file="module/page/page_router" /}
<script>
const strMaxPlayHeight = '600px'
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>
<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="customize"}
{/block}
{block name="footer-js"}
<script type="text/javascript" src="/public/video/hls.min.js" defer></script>
<script type="text/javascript" src="/public/video/DPlayer.min.js" defer></script>
<!-- <script src="https://cdn.staticfile.org/jquery/3.7.1/jquery.min.js"></script> -->
<script src="/public/jquery/jquery-3.7.1.min.js" type="module" charset="utf-8"></script>
<script type="text/javascript" src="/public/video/hls.min.js" ></script>
<script type="text/javascript" src="/public/video/DPlayer.min.js" ></script>
<script type="text/javascript" src="/static/js/player/dplayer.init.js" ></script>
{/block}