fix(videoGpt1): normalize seo pages and fallback services

This commit is contained in:
root
2026-04-17 13:02:00 +08:00
parent dd3cbf09cc
commit 56644e7f50
19 changed files with 253 additions and 173 deletions

View File

@@ -18,6 +18,4 @@ $title = $Slot['title_text'] ?? null;
{// ===== Shell + Item ===== }
{include file="module/list/shell/_shell_router" /}
</section>
</section>
</section>

View File

@@ -38,7 +38,7 @@
<label>跳到</label>
<input class="{$TpStyle.dom_prefix}-pg-inp" type="number" min="1" max="{$pages}" value="{$page}">
<button class="{$TpStyle.dom_prefix}-pg-btn" type="button"
onclick="(function(btn){var wrap=btn.parentNode;var inp=wrap.querySelector('input');var max=parseInt(wrap.getAttribute('data-pages')||1);var p=parseInt(inp.value||1);p=Math.max(1,Math.min(max,p));var u='{:$first_url ?? '#'}';if(!u){return;}u=u.replace(/page\d+$/i,'page'+p);window.location.href=u;})(this)">确定</button>
onclick="(function(btn){var wrap=btn.parentNode;var inp=wrap.querySelector('input');var max=parseInt(wrap.getAttribute('data-pages')||1);var p=parseInt(inp.value||1);var u='{:$first_url ?? '#'}';p=Math.max(1,Math.min(max,p));if(!u||u==='#'){return;}if(/[?&]page=\\d+/i.test(u)){u=u.replace(/([?&]page=)\\d+/i,'$1'+p);}else if(/[?&]page=\\{page\\}/i.test(u)){u=u.replace(/([?&]page=)\\{page\\}/i,'$1'+p);}else if(/-\\{page\\}(?=$|[?#])/i.test(u)){u=u.replace(/-\\{page\\}(?=$|[?#])/i,'-'+p);}else{u=u.replace(/-(\\d+)(?=$|[?#])/,'-'+p);}window.location.href=u;})(this)">确定</button>
</div>
</nav>
{/case}
@@ -118,7 +118,7 @@
<label>跳到</label>
<input class="{$TpStyle.dom_prefix}-pg-inp" type="number" min="1" max="{$pages}" value="{$page}">
<button class="{$TpStyle.dom_prefix}-pg-btn" type="button"
onclick="(function(btn){var wrap=btn.parentNode;var inp=wrap.querySelector('input');var max=parseInt(wrap.getAttribute('data-pages')||1);var p=parseInt(inp.value||1);p=Math.max(1,Math.min(max,p));var u='{:$first_url ?? '#'}';if(!u){return;}u=u.replace(/page\d+$/i,'page'+p);window.location.href=u;})(this)">确定</button>
onclick="(function(btn){var wrap=btn.parentNode;var inp=wrap.querySelector('input');var max=parseInt(wrap.getAttribute('data-pages')||1);var p=parseInt(inp.value||1);var u='{:$first_url ?? '#'}';p=Math.max(1,Math.min(max,p));if(!u||u==='#'){return;}if(/[?&]page=\\d+/i.test(u)){u=u.replace(/([?&]page=)\\d+/i,'$1'+p);}else if(/[?&]page=\\{page\\}/i.test(u)){u=u.replace(/([?&]page=)\\{page\\}/i,'$1'+p);}else if(/-\\{page\\}(?=$|[?#])/i.test(u)){u=u.replace(/-\\{page\\}(?=$|[?#])/i,'-'+p);}else{u=u.replace(/-(\\d+)(?=$|[?#])/,'-'+p);}window.location.href=u;})(this)">确定</button>
</div>
</div>
{/case}
@@ -198,7 +198,7 @@
<label>跳到</label>
<input class="{$TpStyle.dom_prefix}-pg-inp" type="number" min="1" max="{$pages}" value="{$page}">
<button class="{$TpStyle.dom_prefix}-pg-btn" type="button"
onclick="(function(btn){var wrap=btn.parentNode;var inp=wrap.querySelector('input');var max=parseInt(wrap.getAttribute('data-pages')||1);var p=parseInt(inp.value||1);p=Math.max(1,Math.min(max,p));var u='{:$first_url ?? '#'}';if(!u){return;}u=u.replace(/page\d+$/i,'page'+p);window.location.href=u;})(this)">确定</button>
onclick="(function(btn){var wrap=btn.parentNode;var inp=wrap.querySelector('input');var max=parseInt(wrap.getAttribute('data-pages')||1);var p=parseInt(inp.value||1);var u='{:$first_url ?? '#'}';p=Math.max(1,Math.min(max,p));if(!u||u==='#'){return;}if(/[?&]page=\\d+/i.test(u)){u=u.replace(/([?&]page=)\\d+/i,'$1'+p);}else if(/[?&]page=\\{page\\}/i.test(u)){u=u.replace(/([?&]page=)\\{page\\}/i,'$1'+p);}else if(/-\\{page\\}(?=$|[?#])/i.test(u)){u=u.replace(/-\\{page\\}(?=$|[?#])/i,'-'+p);}else{u=u.replace(/-(\\d+)(?=$|[?#])/,'-'+p);}window.location.href=u;})(this)">确定</button>
</div>
</footer>
{/case}
@@ -278,7 +278,7 @@
<label>跳到</label>
<input class="{$TpStyle.dom_prefix}-pg-inp" type="number" min="1" max="{$pages}" value="{$page}">
<button class="{$TpStyle.dom_prefix}-pg-btn" type="button"
onclick="(function(btn){var wrap=btn.parentNode;var inp=wrap.querySelector('input');var max=parseInt(wrap.getAttribute('data-pages')||1);var p=parseInt(inp.value||1);p=Math.max(1,Math.min(max,p));var u='{:$first_url ?? '#'}';if(!u){return;}u=u.replace(/page\d+$/i,'page'+p);window.location.href=u;})(this)">确定</button>
onclick="(function(btn){var wrap=btn.parentNode;var inp=wrap.querySelector('input');var max=parseInt(wrap.getAttribute('data-pages')||1);var p=parseInt(inp.value||1);var u='{:$first_url ?? '#'}';p=Math.max(1,Math.min(max,p));if(!u||u==='#'){return;}if(/[?&]page=\\d+/i.test(u)){u=u.replace(/([?&]page=)\\d+/i,'$1'+p);}else if(/[?&]page=\\{page\\}/i.test(u)){u=u.replace(/([?&]page=)\\{page\\}/i,'$1'+p);}else if(/-\\{page\\}(?=$|[?#])/i.test(u)){u=u.replace(/-\\{page\\}(?=$|[?#])/i,'-'+p);}else{u=u.replace(/-(\\d+)(?=$|[?#])/,'-'+p);}window.location.href=u;})(this)">确定</button>
</div>
</section>
{/case}
@@ -358,7 +358,7 @@
<label>跳到</label>
<input class="{$TpStyle.dom_prefix}-pg-inp" type="number" min="1" max="{$pages}" value="{$page}">
<button class="{$TpStyle.dom_prefix}-pg-btn" type="button"
onclick="(function(btn){var wrap=btn.parentNode;var inp=wrap.querySelector('input');var max=parseInt(wrap.getAttribute('data-pages')||1);var p=parseInt(inp.value||1);p=Math.max(1,Math.min(max,p));var u='{:$first_url ?? '#'}';if(!u){return;}u=u.replace(/page\d+$/i,'page'+p);window.location.href=u;})(this)">确定</button>
onclick="(function(btn){var wrap=btn.parentNode;var inp=wrap.querySelector('input');var max=parseInt(wrap.getAttribute('data-pages')||1);var p=parseInt(inp.value||1);var u='{:$first_url ?? '#'}';p=Math.max(1,Math.min(max,p));if(!u||u==='#'){return;}if(/[?&]page=\\d+/i.test(u)){u=u.replace(/([?&]page=)\\d+/i,'$1'+p);}else if(/[?&]page=\\{page\\}/i.test(u)){u=u.replace(/([?&]page=)\\{page\\}/i,'$1'+p);}else if(/-\\{page\\}(?=$|[?#])/i.test(u)){u=u.replace(/-\\{page\\}(?=$|[?#])/i,'-'+p);}else{u=u.replace(/-(\\d+)(?=$|[?#])/,'-'+p);}window.location.href=u;})(this)">确定</button>
</div>
</aside>
{/case}
@@ -438,7 +438,7 @@
<label>跳到</label>
<input class="{$TpStyle.dom_prefix}-pg-inp" type="number" min="1" max="{$pages}" value="{$page}">
<button class="{$TpStyle.dom_prefix}-pg-btn" type="button"
onclick="(function(btn){var wrap=btn.parentNode;var inp=wrap.querySelector('input');var max=parseInt(wrap.getAttribute('data-pages')||1);var p=parseInt(inp.value||1);p=Math.max(1,Math.min(max,p));var u='{:$first_url ?? '#'}';if(!u){return;}u=u.replace(/page\d+$/i,'page'+p);window.location.href=u;})(this)">确定</button>
onclick="(function(btn){var wrap=btn.parentNode;var inp=wrap.querySelector('input');var max=parseInt(wrap.getAttribute('data-pages')||1);var p=parseInt(inp.value||1);var u='{:$first_url ?? '#'}';p=Math.max(1,Math.min(max,p));if(!u||u==='#'){return;}if(/[?&]page=\\d+/i.test(u)){u=u.replace(/([?&]page=)\\d+/i,'$1'+p);}else if(/[?&]page=\\{page\\}/i.test(u)){u=u.replace(/([?&]page=)\\{page\\}/i,'$1'+p);}else if(/-\\{page\\}(?=$|[?#])/i.test(u)){u=u.replace(/-\\{page\\}(?=$|[?#])/i,'-'+p);}else{u=u.replace(/-(\\d+)(?=$|[?#])/,'-'+p);}window.location.href=u;})(this)">确定</button>
</div>
</nav>
{/case}
@@ -518,7 +518,7 @@
<label>跳到</label>
<input class="{$TpStyle.dom_prefix}-pg-inp" type="number" min="1" max="{$pages}" value="{$page}">
<button class="{$TpStyle.dom_prefix}-pg-btn" type="button"
onclick="(function(btn){var wrap=btn.parentNode;var inp=wrap.querySelector('input');var max=parseInt(wrap.getAttribute('data-pages')||1);var p=parseInt(inp.value||1);p=Math.max(1,Math.min(max,p));var u='{:$first_url ?? '#'}';if(!u){return;}u=u.replace(/page\d+$/i,'page'+p);window.location.href=u;})(this)">确定</button>
onclick="(function(btn){var wrap=btn.parentNode;var inp=wrap.querySelector('input');var max=parseInt(wrap.getAttribute('data-pages')||1);var p=parseInt(inp.value||1);var u='{:$first_url ?? '#'}';p=Math.max(1,Math.min(max,p));if(!u||u==='#'){return;}if(/[?&]page=\\d+/i.test(u)){u=u.replace(/([?&]page=)\\d+/i,'$1'+p);}else if(/[?&]page=\\{page\\}/i.test(u)){u=u.replace(/([?&]page=)\\{page\\}/i,'$1'+p);}else if(/-\\{page\\}(?=$|[?#])/i.test(u)){u=u.replace(/-\\{page\\}(?=$|[?#])/i,'-'+p);}else{u=u.replace(/-(\\d+)(?=$|[?#])/,'-'+p);}window.location.href=u;})(this)">确定</button>
</div>
</div>
{/case}
@@ -598,7 +598,7 @@
<label>跳到</label>
<input class="{$TpStyle.dom_prefix}-pg-inp" type="number" min="1" max="{$pages}" value="{$page}">
<button class="{$TpStyle.dom_prefix}-pg-btn" type="button"
onclick="(function(btn){var wrap=btn.parentNode;var inp=wrap.querySelector('input');var max=parseInt(wrap.getAttribute('data-pages')||1);var p=parseInt(inp.value||1);p=Math.max(1,Math.min(max,p));var u='{:$first_url ?? '#'}';if(!u){return;}u=u.replace(/page\d+$/i,'page'+p);window.location.href=u;})(this)">确定</button>
onclick="(function(btn){var wrap=btn.parentNode;var inp=wrap.querySelector('input');var max=parseInt(wrap.getAttribute('data-pages')||1);var p=parseInt(inp.value||1);var u='{:$first_url ?? '#'}';p=Math.max(1,Math.min(max,p));if(!u||u==='#'){return;}if(/[?&]page=\\d+/i.test(u)){u=u.replace(/([?&]page=)\\d+/i,'$1'+p);}else if(/[?&]page=\\{page\\}/i.test(u)){u=u.replace(/([?&]page=)\\{page\\}/i,'$1'+p);}else if(/-\\{page\\}(?=$|[?#])/i.test(u)){u=u.replace(/-\\{page\\}(?=$|[?#])/i,'-'+p);}else{u=u.replace(/-(\\d+)(?=$|[?#])/,'-'+p);}window.location.href=u;})(this)">确定</button>
</div>
</footer>
{/case}
@@ -678,7 +678,7 @@
<label>跳到</label>
<input class="{$TpStyle.dom_prefix}-pg-inp" type="number" min="1" max="{$pages}" value="{$page}">
<button class="{$TpStyle.dom_prefix}-pg-btn" type="button"
onclick="(function(btn){var wrap=btn.parentNode;var inp=wrap.querySelector('input');var max=parseInt(wrap.getAttribute('data-pages')||1);var p=parseInt(inp.value||1);p=Math.max(1,Math.min(max,p));var u='{:$first_url ?? '#'}';if(!u){return;}u=u.replace(/page\d+$/i,'page'+p);window.location.href=u;})(this)">确定</button>
onclick="(function(btn){var wrap=btn.parentNode;var inp=wrap.querySelector('input');var max=parseInt(wrap.getAttribute('data-pages')||1);var p=parseInt(inp.value||1);var u='{:$first_url ?? '#'}';p=Math.max(1,Math.min(max,p));if(!u||u==='#'){return;}if(/[?&]page=\\d+/i.test(u)){u=u.replace(/([?&]page=)\\d+/i,'$1'+p);}else if(/[?&]page=\\{page\\}/i.test(u)){u=u.replace(/([?&]page=)\\{page\\}/i,'$1'+p);}else if(/-\\{page\\}(?=$|[?#])/i.test(u)){u=u.replace(/-\\{page\\}(?=$|[?#])/i,'-'+p);}else{u=u.replace(/-(\\d+)(?=$|[?#])/,'-'+p);}window.location.href=u;})(this)">确定</button>
</div>
</section>
{/case}
@@ -758,7 +758,7 @@
<label>跳到</label>
<input class="{$TpStyle.dom_prefix}-pg-inp" type="number" min="1" max="{$pages}" value="{$page}">
<button class="{$TpStyle.dom_prefix}-pg-btn" type="button"
onclick="(function(btn){var wrap=btn.parentNode;var inp=wrap.querySelector('input');var max=parseInt(wrap.getAttribute('data-pages')||1);var p=parseInt(inp.value||1);p=Math.max(1,Math.min(max,p));var u='{:$first_url ?? '#'}';if(!u){return;}u=u.replace(/page\d+$/i,'page'+p);window.location.href=u;})(this)">确定</button>
onclick="(function(btn){var wrap=btn.parentNode;var inp=wrap.querySelector('input');var max=parseInt(wrap.getAttribute('data-pages')||1);var p=parseInt(inp.value||1);var u='{:$first_url ?? '#'}';p=Math.max(1,Math.min(max,p));if(!u||u==='#'){return;}if(/[?&]page=\\d+/i.test(u)){u=u.replace(/([?&]page=)\\d+/i,'$1'+p);}else if(/[?&]page=\\{page\\}/i.test(u)){u=u.replace(/([?&]page=)\\{page\\}/i,'$1'+p);}else if(/-\\{page\\}(?=$|[?#])/i.test(u)){u=u.replace(/-\\{page\\}(?=$|[?#])/i,'-'+p);}else{u=u.replace(/-(\\d+)(?=$|[?#])/,'-'+p);}window.location.href=u;})(this)">确定</button>
</div>
</aside>
{/case}
@@ -834,4 +834,4 @@
</ol>
</footer>
{/default}
{/switch}
{/switch}

View File

@@ -327,7 +327,7 @@
<label>跳到</label>
<input class="{$TpStyle.dom_prefix}-pg-inp" type="number" min="1" max="{$pages}" value="{$page}">
<button class="{$TpStyle.dom_prefix}-pg-btn" type="button"
onclick="(function(btn){var wrap=btn.parentNode;var inp=wrap.querySelector('input');var max=parseInt(wrap.getAttribute('data-pages')||1);var p=parseInt(inp.value||1);p=Math.max(1,Math.min(max,p));var u='{:$first_urll ?? '#'}';if(!u){return;}u=u.replace(/page\d+$/i,'page'+p);window.location.href=u;})(this)">确定</button>
onclick="(function(btn){var wrap=btn.parentNode;var inp=wrap.querySelector('input');var max=parseInt(wrap.getAttribute('data-pages')||1);var p=parseInt(inp.value||1);var u='{:$first_urll ?? '#'}';p=Math.max(1,Math.min(max,p));if(!u||u==='#'){return;}if(/[?&]page=\\d+/i.test(u)){u=u.replace(/([?&]page=)\\d+/i,'$1'+p);}else if(/[?&]page=\\{page\\}/i.test(u)){u=u.replace(/([?&]page=)\\{page\\}/i,'$1'+p);}else if(/-\\{page\\}(?=$|[?#])/i.test(u)){u=u.replace(/-\\{page\\}(?=$|[?#])/i,'-'+p);}else{u=u.replace(/-(\\d+)(?=$|[?#])/,'-'+p);}window.location.href=u;})(this)">确定</button>
</div>
</div>
@@ -745,7 +745,7 @@
<label>跳到</label>
<input class="{$TpStyle.dom_prefix}-pg-inp" type="number" min="1" max="{$pages}" value="{$page}">
<button class="{$TpStyle.dom_prefix}-pg-btn" type="button"
onclick="(function(btn){var wrap=btn.parentNode;var inp=wrap.querySelector('input');var max=parseInt(wrap.getAttribute('data-pages')||1);var p=parseInt(inp.value||1);p=Math.max(1,Math.min(max,p));var u='{:$first_urll ?? '#'}';if(!u){return;}u=u.replace(/page\d+$/i,'page'+p);window.location.href=u;})(this)">确定</button>
onclick="(function(btn){var wrap=btn.parentNode;var inp=wrap.querySelector('input');var max=parseInt(wrap.getAttribute('data-pages')||1);var p=parseInt(inp.value||1);var u='{:$first_urll ?? '#'}';p=Math.max(1,Math.min(max,p));if(!u||u==='#'){return;}if(/[?&]page=\\d+/i.test(u)){u=u.replace(/([?&]page=)\\d+/i,'$1'+p);}else if(/[?&]page=\\{page\\}/i.test(u)){u=u.replace(/([?&]page=)\\{page\\}/i,'$1'+p);}else if(/-\\{page\\}(?=$|[?#])/i.test(u)){u=u.replace(/-\\{page\\}(?=$|[?#])/i,'-'+p);}else{u=u.replace(/-(\\d+)(?=$|[?#])/,'-'+p);}window.location.href=u;})(this)">确定</button>
</div>
</div>
@@ -875,4 +875,4 @@
</footer>
{/default}
{/switch}
{/switch}

View File

@@ -4,7 +4,7 @@
{if !empty($arrGrm[$key + [start]])}
{$arrGrm[$key+[start]]|raw}
{/if}
<a href='{site:vurl v_id='$vo.v_id' v_py='$vo.v_name_en'/}'
<a 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 ?? ''}免费高清电影在线观看">
<span class='badge
{eq name="$key" value="1"}badge-first {/eq}

View File

@@ -5,7 +5,7 @@
{$arrGrm[$key+[start]]|raw}
{/if}
<a class="stui-vodlist__thumb "
href='{site:vurl v_id='$vo.v_id' v_py='$vo.v_name_en'/}'
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 ?? ''}免费高清电影在线观看"
>
<img class="lazyload-img" src="/static/img/loading.webp" data-src="{site:cfg code='PUBLIC_COVER_DOMAIN' encode='false'/}{$Video.v_pic}"
@@ -15,7 +15,7 @@
</a>
<div class="stui-vodlist__detail">
<h3 class="title text-overflow">
<a href='{site:vurl v_id='$vo.v_id' v_py='$vo.v_name_en'/}'
<a 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 ?? ''}免费高清电影在线观看">
{$Video.v_name}
</a>

View File

@@ -4,7 +4,7 @@
{$arrGrm[$key+[start]]|raw}
{/if}
<a class="top-line-dot text-overflow"
href='{site:vurl v_id='$vo.v_id' v_py='$vo.v_name_en'/}'
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 ?? ''}免费高清电影在线观看">
<i class="icon iconfont icon-more pull-right text-muted"></i>
{$Video.v_name}

View File

@@ -36,7 +36,7 @@
{// 社交媒体标签}
<meta property="og:title" content='{site:seotkd code="title" page="category_list" /}' />
<meta property="og:description" content='{site:seotkd code="description" page="category_list" /}' />
<meta property="og:url" content="https://{$DomainModel->d_domain}" />
<meta property="og:url" content='https://{$DomainModel->d_domain}{site:vclurl parent_category="$Request.route.strParentCategory" category="$Request.route.strCategory" page="$Request.route.intPage" /}' />
{switch $Request.route.strParentCategory }
{case 'dian-ying' }
<meta property="og:type" content="video.movie" />
@@ -64,27 +64,13 @@
"@context": "https://schema.org",
"@type": "CollectionPage",
"name": "{$DomainModel->d_name} - 最新{site:getval code="strVideoParentCategoryName" /}推荐",
"url": "https://{$DomainModel->d_domain}",
"url": "https://{$DomainModel->d_domain}{site:vclurl parent_category="$Request.route.strParentCategory" category="$Request.route.strCategory" page="$Request.route.intPage" /}",
"description": "{site:seotkd code="description" page="category_list" /}",
"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",
@@ -109,7 +95,7 @@
"item": "https://{$DomainModel->d_domain}{site:vclurl parent_category="$Request.route.strParentCategory" category="$Request.route.strCategory" page="$Request.route.intPage"}"
}
]
},
}
]
</script>
@@ -130,6 +116,16 @@
{include file="module/list/shell/_shell_router" /}
{video:seocopy scene="category_list"
parent_category="$Request.route.strParentCategory"
category="$Request.route.strCategory"
page="$resData.p_data.page|default=1"
total="$resData.p_data.total|default=0"
pages="$resData.p_data.pages|default=1"
visible="$resData.data|count"
export_name="seoCopy" /}
{include file="module/seo_copy/collection" /}
{// ===== Pagination ===== }
{php}
$pagerArr = $resData['p_data']['pager'] ?? [];
@@ -144,4 +140,4 @@
</main>
{/block}
{/block}

View File

@@ -14,9 +14,9 @@
<meta name="robots" content="index,follow">
<link rel="canonical" href='https://{$DomainModel->d_domain}{site:vciurl parent_category="$Request.route.strParentCategory" /}'>
<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}" />
<meta property="og:title" content='{site:seotkd code="title" page="category_index" /}' />
<meta property="og:description" content='{site:seotkd code="description" page="category_index" /}' />
<meta property="og:url" content='https://{$DomainModel->d_domain}{site:vciurl parent_category="$Request.route.strParentCategory" /}' />
{switch $Request.route.strParentCategory }
{case 'dian-ying' }
<meta property="og:type" content="video.movie" />
@@ -39,37 +39,17 @@
<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"}",
"url": "https://{$DomainModel->d_domain}{site:vciurl parent_category="$Request.route.strParentCategory" /}",
"description": "{site:seotkd code='description' page='category_index' /}",
"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_parent_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",
@@ -88,7 +68,7 @@
"item": "https://{$DomainModel->d_domain}{site:vciurl parent_category="$Request.route.strParentCategory" /}"
}
]
},
}
]
</script>
{/block}
@@ -170,6 +150,10 @@
{/video:categorytype}
{video:seocopy scene="category_index"
parent_category="$Request.route.strParentCategory"
export_name="seoCopy" /}
{include file="module/seo_copy/collection" /}
</main>
@@ -178,4 +162,4 @@
{block name="customize"}
{/block}
{/block}

View File

@@ -11,6 +11,15 @@
{block name="head"}
<meta name="robots" content="index,follow">
<link rel="canonical" href='https://{$DomainModel->d_domain}{site:vciurl parent_category="$Request.route.strParentCategory" /}'>
<meta property="og:title" content='{site:seotkd code="title" page="category_home" /}' />
<meta property="og:description" content='{site:seotkd code="description" page="category_home" /}' />
<meta property="og:url" content="https://{$DomainModel->d_domain}" />
<meta property="og:type" content="website" />
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content='{site:seotkd code="title" page="category_home" /}'>
<meta name="twitter:description" content='{site:seotkd code="description" page="category_home" /}'>
{/block}
@@ -44,4 +53,4 @@
{/block}
{block name="customize"}
{/block}
{/block}

View File

@@ -5,20 +5,28 @@
{/block}
{block name="title"}{site:seotkd code="title" page="rank_index" /}{/block}
{block name="keywords"}{site:seotkd code="keywords" page="rank_index" /}{/block}
{block name="keywords"}{php}
$strRankKeywords = trim((string)($DomainModel->d_keywords ?: $DomainModel->d_name));
$strRankKeywords = $strRankKeywords !== ''
? $strRankKeywords . ',热门榜单,视频排行'
: trim((string)$DomainModel->d_name) . ',热门榜单,视频排行';
{/php}{$strRankKeywords}{/block}
{block name="description"}{site:seotkd code="description" page="rank_index" /}{/block}
{block name="head"}
{php}
$strRankCanonicalUrl = 'https://' . $DomainModel->d_domain . $strRankUrlTemp;
{/php}
<meta name="robots" content="index,follow">
<link rel="canonical" href='https://{$DomainModel->d_domain}{$strRankUrlTemp}'>
<link rel="canonical" href='{$strRankCanonicalUrl}'>
{// 社交媒体标签}
<meta property="og:title" content='{site:seotkd code="title" page="rank_index" /}' />
<meta property="og:description" content='{site:seotkd code="description" page="rank_index" /}' />
<meta property="og:url" content="https://{$DomainModel->d_domain}" />
<meta property="og:type" content="video.movie" />
<meta property="og:url" content="{$strRankCanonicalUrl}" />
<meta property="og:type" content="website" />
<script type="application/ld+json">
[
@@ -27,7 +35,7 @@
"@context": "https://schema.org",
"@type": "CollectionPage",
"name": "{$DomainModel->d_name} - 最新排行榜推荐",
"url": "https://{$DomainModel->d_domain}",
"url": "{$strRankCanonicalUrl}",
"headline": '{site:seotkd code="title" page="rank_index" /}',
"description": '{site:seotkd code="description" page="rank_index" /}',
"potentialAction": {
@@ -35,24 +43,6 @@
"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",
@@ -71,7 +61,7 @@
"item": "https://{$DomainModel->d_domain}{$strRankUrlTemp}"
}
]
},
}
]
</script>
@@ -105,6 +95,9 @@
{include file="module/list/shell/_shell_router" /}
{/foreach}
{video:seocopy scene="rank_index" export_name="seoCopy" /}
{include file="module/seo_copy/collection" /}
</section>
{/block}
@@ -113,4 +106,4 @@
{block name="customize"}
{/block}
{/block}

View File

@@ -12,19 +12,35 @@ p_val="page_data" button_num="10" cache_life="3600" export_name="arrVideoRankLis
{site:grm page_code="h5_rank_list_type" diff="$Request.route.intPage" num="100" g_key="arrGrm" /}
{site:helper func="initVideoRankListTKD" /}
{php}
$strRankListKeywordsBase = trim((string)($DomainModel->d_keywords ?: $DomainModel->d_name));
$strRankListKeywordsOrder = trim((string)($strOrderName ?? '热门'));
$strRankListKeywords = $strRankListKeywordsBase !== ''
? $strRankListKeywordsBase . ',' . $strRankListKeywordsOrder . '榜单,视频排行'
: trim((string)$DomainModel->d_name) . ',' . $strRankListKeywordsOrder . '榜单,视频排行';
$strRankListDescCategory = trim((string)(\app\model\ConverterMovel::getVal('strVideoParentCategoryName') ?? '影视'));
if ($strRankListDescCategory === '') {
$strRankListDescCategory = '影视';
}
$strRankListDescOrder = $strRankListKeywordsOrder !== '' ? $strRankListKeywordsOrder : '热门';
$strRankListDescription = trim((string)$DomainModel->d_name) . '整理' . $strRankListDescOrder . $strRankListDescCategory . '榜单入口,方便继续查看热度内容、详情页与播放页。';
{/php}
{/block}
{block name="title"}{site:seotkd code="title" page="rank_list" /}{/block}
{block name="keywords"}{site:seotkd code="title" page="rank_list" /}{/block}
{block name="description"}{site:seotkd code="title" page="rank_list" /}{/block}
{block name="keywords"}{$strRankListKeywords}{/block}
{block name="description"}{$strRankListDescription}{/block}
{block name="head"}
<meta name="robots" content="index,follow">
<link rel="canonical" href='https://{$DomainModel->d_domain}{site:vrlurl parent_category="$Request.route.strParentCategory" category="$Request.route.strCategory" sort_type="$Request.route.strSortType" page="1"/}'>
{// 社交媒体标签}
<meta property="og:title" content='{site:seotkd code="title" page="rank_list" /}' />
<meta property="og:description" content='{site:seotkd code="title" page="rank_list" /}' />
<meta property="og:url" content="https://{$DomainModel->d_domain}" />
<meta property="og:description" content='{$strRankListDescription}' />
<meta property="og:url" content='https://{$DomainModel->d_domain}{site:vrlurl parent_category="$Request.route.strParentCategory" category="$Request.route.strCategory" sort_type="$Request.route.strSortType" page="1"/}' />
<meta property="og:type" content="video.movie" />
@@ -35,30 +51,14 @@ p_val="page_data" button_num="10" cache_life="3600" export_name="arrVideoRankLis
"@context": "https://schema.org",
"@type": "CollectionPage",
"name": "{$DomainModel->d_name} - 最新排行榜推荐",
"url": "https://{$DomainModel->d_domain}",
"url": "https://{$DomainModel->d_domain}{site:vrlurl parent_category="$Request.route.strParentCategory" category="$Request.route.strCategory" sort_type="$Request.route.strSortType" page="1"/}",
"headline": '{site:seotkd code="title" page="rank_list" /}',
"description": '{site:seotkd code="title" page="rank_list" /}',
"description": '{$strRankListDescription}',
"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="arrVideoRankList" id="Video" key="key"}
{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='$vo.v_id' v_py='$vo.v_name_en'/}',
},
{/if}
{/volist}
]
},
{
"@context": "https://schema.org",
@@ -83,7 +83,7 @@ p_val="page_data" button_num="10" cache_life="3600" export_name="arrVideoRankLis
"item": "https://{$DomainModel->d_domain}{site:vrlurl parent_category="$Request.route.strParentCategory" category="$Request.route.strCategory" sort_type="$Request.route.strSortType" page="1"/}"
}
]
},
}
]
</script>
@@ -129,6 +129,17 @@ p_val="page_data" button_num="10" cache_life="3600" export_name="arrVideoRankLis
</h1>
<h4 class="view-description">{site:replace code="VIDEO@GETVIDEORANKLIST@TEXT"}</h4>
{video:seocopy scene="rank_list"
sort_type="$Request.route.strSortType"
parent_category="$Request.route.strParentCategory"
category="$Request.route.strCategory"
page="1"
total="0"
pages="1"
visible="$arrVideoRankList|count"
export_name="seoCopy" /}
{include file="module/seo_copy/collection" /}
<div class="row">
<div class="stui-pannel stui-pannel-bg clearfix">
<div class="stui-pannel-box">
@@ -200,4 +211,4 @@ p_val="page_data" button_num="10" cache_life="3600" export_name="arrVideoRankLis
{/block}
{block name="customize"}
{/block}
{/block}

View File

@@ -18,20 +18,27 @@ p_val="page_data" button_num="5" cache_life="3600" func="generateSearchPager" ex
{block name="description"}{site:seotkd code="description" page="search" /}{/block}
{block name="head"}
{php}
$strSearchKeyword = trim((string)($Request->get('keyword', '')));
$urlBuilder = new \app\common\helper\UrlBuilder($TpStyle);
$strSearchCanonicalUrl = $strSearchKeyword !== ''
? 'https://' . $DomainModel->d_domain . $urlBuilder->searchResult($strSearchKeyword)
: 'https://' . $DomainModel->d_domain;
{/php}
<meta name="robots" content="index,follow">
<link rel="canonical" href='https://{$DomainModel->d_domain}{site:vsurl key="$Request.get.keyword" p="1"/}'>
<link rel="canonical" href='{$strSearchCanonicalUrl}'>
<meta property="og:title" content='{site:seotkd code="title" page="search" /}'>
<meta property="og:description" content='{site:seotkd code="description" page="search" /}'>
<meta property="og:url" content='https://{$DomainModel->d_domain}{site:vsurl key="search_term_string" p="1"/}'>
<meta property="og:url" content='{$strSearchCanonicalUrl}'>
<meta property="og:type" content="website">
<meta property="og:site_name" content='{$DomainModel->d_name}'>
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content='{site:seotkd code="title" page="search" /}'>
<meta name="twitter:description" content='{site:seotkd code="description" page="search" /}'>
<meta name="twitter:image:alt" content="动作电影 搜索结果第1页">
<meta name="twitter:image:alt" content="{if $strSearchKeyword !== ''}{$strSearchKeyword|raw} 搜索结果第{$resData.p_data.page|default=1}页{else/}{$DomainModel->d_name|raw} 搜索结果{/if}">
{// 结构化数据}
<script type="application/ld+json">
@@ -41,7 +48,7 @@ p_val="page_data" button_num="5" cache_life="3600" func="generateSearchPager" ex
"name": "{$DomainModel->d_name}",
"url": "https://{$DomainModel->d_domain}",
"alternateName": "{$DomainModel->d_domain}",
"description": "{site:replace code="VIDEO@INDEX@INDEX@DESCRIPTION"}",
"description": "{site:seotkd code='description' page='home' /}",
"potentialAction": {
"@type": "SearchAction",
"target": 'https://{$DomainModel->d_domain}{site:vsurl key="search_term_string" p="1"/}',
@@ -52,41 +59,9 @@ p_val="page_data" button_num="5" cache_life="3600" func="generateSearchPager" ex
{
"@type": "CollectionPage",
"name": "{$DomainModel->d_name} - {$DomainModel->d_logo_text}",
"url": "https://{$DomainModel->d_domain}",
"url": "{$strSearchCanonicalUrl}",
"alternateName": "{$DomainModel->d_domain}",
"description": '{site:seotkd code="description" page="search" /}',
"mainEntity": {
"@type": "ItemList",
"itemListElement": [
{volist name="resData.data" id="Video" key="key"}
{if $key < 5 }
{
"@type": "ListItem",
"position": {$key},
"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"/}',
"description": "{$Video.v_description}",
"actor": [
{foreach $Video.v_actor as $strActorKey=>$strActor }
{if $strActorKey < 5 }
{ "@type": "Person", "name": "{$strActor}" },
{/if}
{/foreach}
],
"numberOfEpisodes": {$Video.v_play_url|count},
"image": "{$Video.v_pic}",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "{$Video.v_score}",
}
}
},
{/if}
{/volist}
]
}
"description": '{site:seotkd code="description" page="search" /}'
}
]
</script>
@@ -112,6 +87,14 @@ p_val="page_data" button_num="5" cache_life="3600" func="generateSearchPager" ex
{assign name="__LIST__" value="$resData.data"}
{include file="module/list/shell/_shell_router" /}
{video:seocopy scene="search"
keyword="$Request.get.keyword"
page="$resData.p_data.page|default=1"
total="$resData.p_data.total|default=0"
pages="$resData.p_data.pages|default=1"
visible="$resData.data|count"
export_name="seoCopy" /}
{include file="module/seo_copy/collection" /}
{// ===== Pagination ===== }
{php}
@@ -129,4 +112,4 @@ $pagerCfg = $TpStyle['template_cfg']['components']['pager'] ?? [];
{/block}
{block name="customize"}
{/block}
{/block}

View File

@@ -3,9 +3,9 @@
{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" export_name="arrVideo"/}
{elseif $Request.route.intVId}
{video:info v_id="$Request.route.intVId" v_key="arrVideo" export_name="arrVideo"/}
{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}
@@ -26,11 +26,11 @@
{/block}
{block name="title"}{if $DomainModel->info_id == $Request.route.intVId || empty($Request.route.intVId)}{site:replace code="VIDEO@INDEX@INDEX@TITLE" /}{else/}{site:seotkd code="title" page="detail" /}{/if}{/block}
{block name="title"}{if !empty($arrVideo.v_id) && ((int)$arrVideo.v_id !== (int)$DomainModel->info_id || !empty($Request.route.strPinyin))}{site:seotkd code="title" page="detail" /}{else/}{site:seotkd code="title" page="home" /}{/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:seotkd code="keywords" page="detail" /}{/if}{/block}
{block name="keywords"}{if !empty($arrVideo.v_id) && ((int)$arrVideo.v_id !== (int)$DomainModel->info_id || !empty($Request.route.strPinyin))}{site:seotkd code="keywords" page="detail" /}{else/}{site:seotkd code="keywords" page="home" /}{/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:seotkd code="description" page="detail" /}{/if}{/block}
{block name="description"}{if !empty($arrVideo.v_id) && ((int)$arrVideo.v_id !== (int)$DomainModel->info_id || !empty($Request.route.strPinyin))}{site:seotkd code="description" page="detail" /}{else/}{site:seotkd code="description" page="home" /}{/if}{/block}
{block name="head"}