| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906 |
- {include file="header" /}
- {if $m_style==1}
- <link rel="stylesheet" href="/assets/xtu/show-product.css?v=202608304-mobilefix6">
- {else}
- <link rel="stylesheet" href="/assets/xtu/show-product-bai.css?v=202620804-mobilefix6">
- {/if}
- <main class="show-product-page">
- <section class="show-product-hero">
- <div class="show-product-hero-media">
- <img src="{$thumb3}" alt="{$title}">
- </div>
- <div class="show-product-hero-overlay"></div>
- <div class="show-product-hero-content">
- <div class="show-product-hero-copy">
- {if !empty($title1)}
- <div class="show-product-hero-subtitle">{$title1}</div>
- {/if}
- <h1>{$title}</h1>
- {if !empty($title2)}
- <div class="show-product-hero-tagline">{$title2}</div>
- {/if}
- <div class="show-product-hero-actions">
- {if !empty($shopurl)}
- <a class="show-product-hero-btn show-product-hero-btn-light" href="{$shopurl}" target="_blank">{:cms_t('buy_now','立即购买')}</a>
- {/if}
- {if !empty($video)}
- <button class="show-product-hero-btn show-product-hero-btn-dark js-product-video-open" type="button" data-video="{$video}">
- {:cms_t('watch_video','观看视频')}
- <i class="bi bi-play-fill"></i>
- </button>
- {/if}
- </div>
- </div>
- </div>
- </section>
- <div class="show-product-video-modal" id="showProductVideoModal" hidden>
- <div class="show-product-video-modal__backdrop" data-product-modal-close></div>
- <div class="show-product-video-modal__dialog" role="dialog" aria-modal="true" aria-label="{:cms_t('watch_video','观看视频')}">
- <button class="show-product-video-modal__close" type="button" aria-label="{:cms_t('close','关闭')}" data-product-modal-close>×</button>
- <div class="show-product-video-modal__body">
- <video class="show-product-video-modal__player" controls playsinline preload="metadata"></video>
- </div>
- </div>
- </div>
- <?php $where = "project_id=".$id; ?>
- {yzn module="cms" action="lists" catid="9" where="$where" order="listorder asc,id desc" num="1" return="productBlocks" moreinfo="1"}
- {volist name="productBlocks" id="block"}
- <section class="show-product-story-section">
- <div class="content-1300-wrap">
- <div class="show-product-story-copy text-center">
- {if !empty($block.title_2_1)}
- <h2 class="spx-reveal">{$block.title_2_1}</h2>
- {/if}
- </div>
- <div class="show-product-story-media">
- {if !empty($block.thumb_2_pc)}
- <img class="show-product-story-image is-pc" src="{$block.thumb_2_pc}" alt="{$title}">
- {/if}
- {if !empty($block.thumb_2_wap)}
- <img class="show-product-story-image is-wap" src="{$block.thumb_2_wap}" alt="{$title}">
- {/if}
- </div>
- <div class="show-product-story-copy show-product-story-copy-bottom text-center">
- {if !empty($block.title_2_2)}
- <p class="spx-reveal spx-reveal--delay-1">{$block.title_2_2}</p>
- {/if}
- {if !empty($shopurl)}
- <div class="show-product-story-action">
- <a href="{$shopurl}" target="_blank" class="show-product-story-link">{:cms_t('learn_more','了解更多')}</a>
- </div>
- {/if}
- </div>
- </div>
- </section>
- <section class="spx-stage-three js-spx-stage-three">
- <div class="content-1300-wrap">
- <div class="spx-stage-three-copy">
- <div class="spx-stage-three-copy-switch">
- {if !empty($block.title_3_1)}
- <div class="spx-stage-three-title-layer js-spx-stage-three-title-layer">
- <h2 class="spx-stage-three-title">{$block.title_3_1|nl2br=###|raw}</h2>
- </div>
- {/if}
- <div class="spx-stage-three-texts js-spx-stage-three-texts">
- {if !empty($block.title_3_2)}
- <h3 class="spx-stage-three-subtitle">{$block.title_3_2|nl2br=###|raw}</h3>
- {/if}
- {if !empty($block.title_3_3)}
- <p class="spx-stage-three-text">{$block.title_3_3|nl2br=###|raw}</p>
- {/if}
- </div>
- </div>
- {if !empty($block.thumb_3_pc)}
- <div class="spx-stage-three-media">
- <img class="spx-stage-three-image" src="{$block.thumb_3_pc}" alt="{$title}">
- </div>
- {/if}
- </div>
- </div>
- </section>
- <section class="spx-stage-four js-spx-stage-four">
- <div class="content-1300-wrap">
- <div class="spx-stage-four-head">
- <div class="spx-stage-four-head-left">
- {if !empty($block.title_4_3)}
- <div class="spx-stage-kicker spx-reveal">{$block.title_4_3|nl2br=###|raw}</div>
- {/if}
- {if !empty($block.title_4_1)}
- <h2 class="spx-stage-four-title spx-reveal spx-reveal--delay-1">{$block.title_4_1|nl2br=###|raw}</h2>
- {/if}
- </div>
- <div class="spx-stage-four-head-right">
- {if !empty($block.title_4_2)}
- <div class="spx-stage-four-desc spx-reveal spx-reveal--delay-2">{$block.title_4_2|nl2br=###|raw}</div>
- {/if}
- </div>
- </div>
- <?php
- $stageFourMedia = !empty($block['thumb_4']) ? $block['thumb_4'] : (!empty($block['video_4']) ? $block['video_4'] : (!empty($block['thumb_4_wap']) ? $block['thumb_4_wap'] : (!empty($block['thumb_4_pc']) ? $block['thumb_4_pc'] : '')));
- $stageFourMediaExt = $stageFourMedia ? strtolower(pathinfo(parse_url($stageFourMedia, PHP_URL_PATH), PATHINFO_EXTENSION)) : '';
- $stageFourMediaIsVideo = in_array($stageFourMediaExt, ['mp4', 'webm', 'ogg', 'mov', 'm4v']);
- ?>
- <div class="spx-stage-four-compare spx-stage-four-compare-single">
- <div class="spx-stage-four-card spx-stage-four-card-single">
- <div class="spx-stage-four-card-media">
- {if !empty($stageFourMedia)}
- {if $stageFourMediaIsVideo}
- <video class="spx-stage-four-video" src="<?php echo $stageFourMedia; ?>" autoplay muted loop playsinline preload="metadata"></video>
- {else /}
- <img class="spx-stage-four-image" src="<?php echo $stageFourMedia; ?>" alt="{$title}">
- {/if}
- {/if}
- </div>
- </div>
- </div>
- </div>
- </section>
- <?php
- $stageFiveMedia = !empty($block['thumb_5']) ? $block['thumb_5'] : '';
- $stageFiveMediaExt = $stageFiveMedia ? strtolower(pathinfo(parse_url($stageFiveMedia, PHP_URL_PATH), PATHINFO_EXTENSION)) : '';
- $stageFiveMediaIsVideo = in_array($stageFiveMediaExt, ['mp4', 'webm', 'ogg', 'mov', 'm4v']);
- ?>
- <section class="spx-stage-five js-spx-stage-five">
- <div class="content-1300-wrap">
- <div class="spx-stage-five-copy text-center">
- {if !empty($block.title_5_3)}
- <div class="spx-stage-kicker spx-stage-five-kicker spx-reveal">{$block.title_5_3|nl2br=###|raw}</div>
- {/if}
- {if !empty($block.title_5_1)}
- <h2 class="spx-stage-five-title spx-reveal spx-reveal--delay-1">{$block.title_5_1|nl2br=###|raw}</h2>
- {/if}
- {if !empty($block.title_5_2)}
- <div class="spx-stage-five-desc spx-reveal spx-reveal--delay-2">{$block.title_5_2|nl2br=###|raw}</div>
- {/if}
- </div>
- {if !empty($stageFiveMedia)}
- <div class="spx-stage-five-media">
- {if $stageFiveMediaIsVideo}
- <video class="spx-stage-five-video" src="<?php echo $stageFiveMedia; ?>" autoplay muted loop playsinline preload="metadata"></video>
- {else /}
- <img class="spx-stage-five-image" src="<?php echo $stageFiveMedia; ?>" alt="{$title}">
- {/if}
- </div>
- {/if}
- </div>
- </section>
- <?php
- $stageSixRaw = $block['thumb_6'] ?? [];
- $stageSixSlides = [];
- if (is_array($stageSixRaw)) {
- $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($stageSixRaw));
- foreach ($iterator as $item) {
- if (is_string($item)) {
- $item = trim($item);
- if ($item !== '') {
- $stageSixSlides[] = $item;
- }
- }
- }
- } else {
- $stageSixRaw = trim((string)$stageSixRaw);
- if ($stageSixRaw !== '') {
- $stageSixSlides = preg_split('/[\r\n,|]+/', $stageSixRaw);
- $stageSixSlides = array_values(array_filter(array_map('trim', $stageSixSlides)));
- }
- }
- ?>
- <section class="spx-stage-six js-spx-stage-six">
- <div class="content-1300-wrap">
- <div class="spx-stage-six-head">
- <div class="spx-stage-six-head-left">
- {if !empty($block.title_6_1)}
- <h2 class="spx-stage-six-title spx-reveal">{$block.title_6_1|nl2br=###|raw}</h2>
- {/if}
- </div>
- <div class="spx-stage-six-head-right">
- {if !empty($block.title_6_2)}
- <div class="spx-stage-six-desc spx-reveal spx-reveal--delay-1">{$block.title_6_2|nl2br=###|raw}</div>
- {/if}
- </div>
- </div>
- {if !empty($stageSixSlides)}
- <div class="spx-stage-six-slider js-stage-six-slider">
- <div class="spx-stage-six-track">
- {volist name="stageSixSlides" id="slide" key="slideIndex"}
- <div class="spx-stage-six-slide{if $slideIndex == 1} is-active{/if}">
- <img class="spx-stage-six-image" src="{$slide}" alt="{$title}">
- </div>
- {/volist}
- {if count($stageSixSlides) > 1}
- <button class="spx-stage-six-arrow spx-stage-six-arrow-prev" type="button" data-stage-six-prev aria-label="上一张">
- <i class="bi bi-chevron-left" aria-hidden="true"></i>
- </button>
- <button class="spx-stage-six-arrow spx-stage-six-arrow-next" type="button" data-stage-six-next aria-label="下一张">
- <i class="bi bi-chevron-right" aria-hidden="true"></i>
- </button>
- <div class="spx-stage-six-dots spx-stage-six-dots-inside">
- {volist name="stageSixSlides" id="slide" key="slideIndex"}
- <button class="spx-stage-six-dot{if $slideIndex == 1} is-active{/if}" type="button" data-stage-six-dot="{$slideIndex - 1}" aria-label="Slide {$slideIndex}"></button>
- {/volist}
- </div>
- {/if}
- </div>
- </div>
- {/if}
- </div>
- </section>
- <?php
- $stageSevenMedia = !empty($block['thumb_7']) ? $block['thumb_7'] : '';
- $stageSevenMediaExt = $stageSevenMedia ? strtolower(pathinfo(parse_url($stageSevenMedia, PHP_URL_PATH), PATHINFO_EXTENSION)) : '';
- $stageSevenMediaIsVideo = in_array($stageSevenMediaExt, ['mp4', 'webm', 'ogg', 'mov', 'm4v']);
- ?>
- <section class="spx-stage-seven js-spx-stage-seven">
- <div class="content-1300-wrap">
- <div class="spx-stage-seven-copy text-center">
- {if !empty($block.title_7_1)}
- <h2 class="spx-stage-seven-title spx-reveal">{$block.title_7_1|nl2br=###|raw}</h2>
- {/if}
- {if !empty($block.title_7_2)}
- <div class="spx-stage-seven-desc spx-reveal spx-reveal--delay-1">{$block.title_7_2|nl2br=###|raw}</div>
- {/if}
- </div>
- {if !empty($stageSevenMedia)}
- <div class="spx-stage-seven-media">
- {if $stageSevenMediaIsVideo}
- <video class="spx-stage-seven-video" src="<?php echo $stageSevenMedia; ?>" autoplay muted loop playsinline preload="metadata"></video>
- {else /}
- <img class="spx-stage-seven-image" src="<?php echo $stageSevenMedia; ?>" alt="{$title}">
- {/if}
- </div>
- {/if}
- </div>
- </section>
- <?php
- $stageEightMediaRaw = $block['thumb_8'] ?? [];
- $stageEightLabelRaw = $block['tag_8'] ?? [];
- $stageEightContentRaw = $block['title_8_2'] ?? [];
- $spxFlatten = function ($value) {
- $result = [];
- if (is_array($value)) {
- $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($value));
- foreach ($iterator as $item) {
- if (is_string($item)) {
- $item = trim($item);
- if ($item !== '') {
- $result[] = $item;
- }
- }
- }
- } else {
- $value = trim((string)$value);
- if ($value !== '') {
- $result = preg_split('/[\r\n|]+/', $value);
- $result = array_values(array_filter(array_map('trim', $result)));
- }
- }
- return $result;
- };
- $stageEightMediaList = $spxFlatten($stageEightMediaRaw);
- $stageEightLabelList = $spxFlatten($stageEightLabelRaw);
- $stageEightContentList = $spxFlatten($stageEightContentRaw);
- $stageEightItems = [];
- $stageEightCount = max(count($stageEightMediaList), count($stageEightLabelList), count($stageEightContentList));
- for ($i = 0; $i < $stageEightCount; $i++) {
- $media = $stageEightMediaList[$i] ?? '';
- $label = $stageEightLabelList[$i] ?? '';
- $content = $stageEightContentList[$i] ?? '';
- if ($media === '' && $label === '' && $content === '') {
- continue;
- }
- $ext = $media ? strtolower(pathinfo(parse_url($media, PHP_URL_PATH), PATHINFO_EXTENSION)) : '';
- $stageEightItems[] = [
- 'media' => $media,
- 'label' => $label,
- 'content' => $content,
- 'is_video' => in_array($ext, ['mp4', 'webm', 'ogg', 'mov', 'm4v']),
- ];
- }
- ?>
- <section class="spx-stage-eight js-stage-eight">
- <div class="content-1300-wrap">
- <div class="spx-stage-eight-copy text-center">
- {if !empty($block.title_8_1)}
- <h2 class="spx-stage-eight-title spx-reveal">{$block.title_8_1|nl2br=###|raw}</h2>
- {/if}
- </div>
- {if !empty($stageEightItems)}
- <div class="spx-stage-eight-tabs js-stage-eight-tabs">
- <div class="spx-stage-eight-media-wrap">
- {volist name="stageEightItems" id="item" key="itemIndex"}
- <div class="spx-stage-eight-panel{if $itemIndex == 1} is-active{/if}" data-stage-eight-panel="{$itemIndex - 1}">
- {if !empty($item.media)}
- {if $item.is_video}
- <video class="spx-stage-eight-video" src="{$item.media}" autoplay muted loop playsinline preload="metadata"></video>
- {else /}
- <img class="spx-stage-eight-image" src="{$item.media}" alt="{$title}">
- {/if}
- {/if}
- </div>
- {/volist}
- </div>
- <div class="spx-stage-eight-nav" role="tablist" aria-label="第八屏切换标签">
- {volist name="stageEightItems" id="item" key="itemIndex"}
- <button class="spx-stage-eight-tab{if $itemIndex == 1} is-active{/if}" type="button" data-stage-eight-tab="{$itemIndex - 1}" role="tab" aria-selected="{if $itemIndex == 1}true{else /}false{/if}">
- {$item.label|default='标签'}
- </button>
- {/volist}
- </div>
- <div class="spx-stage-eight-content-wrap">
- {volist name="stageEightItems" id="item" key="itemIndex"}
- <div class="spx-stage-eight-content{if $itemIndex == 1} is-active{/if}" data-stage-eight-content="{$itemIndex - 1}">
- {$item.content|default=''}
- </div>
- {/volist}
- </div>
- </div>
- {/if}
- </div>
- </section>
- <?php
- $stageNineMedia = !empty($block['thumb_9']) ? (is_string($block['thumb_9']) ? $block['thumb_9'] : '') : '';
- $stageNineMediaExt = $stageNineMedia ? strtolower(pathinfo(parse_url($stageNineMedia, PHP_URL_PATH), PATHINFO_EXTENSION)) : '';
- $stageNineMediaIsVideo = in_array($stageNineMediaExt, ['mp4', 'webm', 'ogg', 'mov', 'm4v']);
- ?>
- <section class="spx-stage-nine js-stage-nine">
- <div class="spx-stage-nine-sticky">
- <div class="content-1300-wrap">
- <div class="spx-stage-nine-title-layer">
- {if !empty($block.title_9)}
- <h2 class="spx-stage-nine-title spx-reveal">{$block.title_9|nl2br=###|raw}</h2>
- {/if}
- </div>
- {if !empty($stageNineMedia)}
- <div class="spx-stage-nine-media">
- {if $stageNineMediaIsVideo}
- <video class="spx-stage-nine-video" src="<?php echo $stageNineMedia; ?>" preload="metadata" muted></video>
- {else /}
- <img class="spx-stage-nine-image" src="<?php echo $stageNineMedia; ?>" alt="{$title}">
- {/if}
- </div>
- {/if}
- <div class="spx-stage-nine-overlay-copy">
- {if !empty($block.title_10_1)}
- <h3 class="spx-stage-nine-subtitle spx-reveal spx-reveal--delay-1">{$block.title_10_1|nl2br=###|raw}</h3>
- {/if}
- {if !empty($block.title_10_2)}
- <div class="spx-stage-nine-desc spx-reveal spx-reveal--delay-2">{$block.title_10_2|nl2br=###|raw}</div>
- {/if}
- {if !empty($block.thumb_10)}
- <div class="spx-stage-nine-media">
-
- <img class="spx-stage-nine-image" src="{$block.thumb_10}">
-
- </div>
- {/if}
- </div>
- </div>
- </div>
- </section>
- <?php
- $stageTenMediaRaw = $block['thumb_11'] ?? [];
- $stageTenTitle = !empty($block['title_11_1']) ? $block['title_11_1'] : '';
- $stageTenLabelsRaw = $block['title_11_2'] ?? [];
- $stageTenMediaList = $spxFlatten($stageTenMediaRaw);
- $stageTenLabelList = $spxFlatten($stageTenLabelsRaw);
- $stageTenItems = [];
- $stageTenCount = max(count($stageTenMediaList), count($stageTenLabelList));
- for ($i = 0; $i < $stageTenCount; $i++) {
- $media = $stageTenMediaList[$i] ?? '';
- $label = $stageTenLabelList[$i] ?? '';
- if ($media === '' && $label === '') {
- continue;
- }
- $ext = $media ? strtolower(pathinfo(parse_url($media, PHP_URL_PATH), PATHINFO_EXTENSION)) : '';
- $stageTenItems[] = [
- 'media' => $media,
- 'label' => $label,
- 'is_video' => in_array($ext, ['mp4', 'webm', 'ogg', 'mov', 'm4v']),
- ];
- }
- ?>
- {if !empty($stageTenItems) || !empty($stageTenTitle)}
- <section class="spx-stage-ten js-stage-ten">
- <div class="content-1300-wrap">
- <div class="spx-stage-ten-container">
- <div class="spx-stage-ten-media">
- <div class="spx-stage-ten-media-container">
- {volist name="stageTenItems" id="item" key="itemIndex"}
- <div class="spx-stage-ten-panel{if $itemIndex == 1} is-active{/if}" data-stage-ten-panel="{$itemIndex - 1}">
- {if !empty($item.media)}
- {if $item.is_video}
- <video class="spx-stage-ten-video" src="{$item.media}" muted playsinline preload="metadata" loop></video>
- <button class="spx-stage-ten-sound-toggle" type="button" data-stage-ten-sound aria-label="切换声音">
- <i class="bi bi-volume-mute-fill" aria-hidden="true"></i>
- </button>
- {else /}
- <img class="spx-stage-ten-image" src="{$item.media}" alt="{$title}">
- {/if}
- {/if}
- </div>
- {/volist}
- </div>
- </div>
- <div class="spx-stage-ten-content">
- {if !empty($stageTenTitle)}
- <h2 class="spx-stage-ten-title spx-reveal">{$stageTenTitle|nl2br=###|raw}</h2>
- {/if}
- {if !empty($stageTenItems)}
- <div class="spx-stage-ten-tabs" role="tablist" aria-label="第十屏切换标签">
- {volist name="stageTenItems" id="item" key="itemIndex"}
- <button class="spx-stage-ten-tab{if $itemIndex == 1} is-active{/if}" type="button" data-stage-ten-tab="{$itemIndex - 1}" role="tab" aria-selected="{if $itemIndex == 1}true{else /}false{/if}">
- {$item.label|default='选项'|trim}
- </button>
- {/volist}
- </div>
- {/if}
- </div>
- </div>
- </div>
- </section>
- {/if}
- <?php
- $stageElevenItems = [];
- $stageElevenSourceMap = [
- [
- 'title' => trim((string)($block['title_12_1'] ?? '')),
- 'content' => trim((string)($block['title_12_2'] ?? '')),
- 'media' => trim((string)($block['thumb_12_1'] ?? '')),
- ],
- [
- 'title' => trim((string)($block['title_12_3'] ?? '')),
- 'content' => trim((string)($block['title_12_4'] ?? '')),
- 'media' => trim((string)($block['thumb_12_2'] ?? '')),
- ],
- ];
- foreach ($stageElevenSourceMap as $stageElevenItem) {
- if ($stageElevenItem['title'] === '' && $stageElevenItem['content'] === '' && $stageElevenItem['media'] === '') {
- continue;
- }
- $ext = $stageElevenItem['media'] ? strtolower(pathinfo(parse_url($stageElevenItem['media'], PHP_URL_PATH), PATHINFO_EXTENSION)) : '';
- $stageElevenItem['is_video'] = in_array($ext, ['mp4', 'webm', 'ogg', 'mov', 'm4v']);
- $stageElevenItems[] = $stageElevenItem;
- }
- ?>
- {if !empty($stageElevenItems)}
- <section class="spx-stage-eleven js-stage-eleven">
- <div class="spx-stage-eleven-media-shell">
- {volist name="stageElevenItems" id="item" key="itemIndex"}
- <div class="spx-stage-eleven-panel{if $itemIndex == 1} is-active{/if}" data-stage-eleven-panel="{$itemIndex - 1}">
- {if !empty($item.media)}
- {if $item.is_video}
- <video class="spx-stage-eleven-video" src="{$item.media}" muted playsinline preload="metadata" loop></video>
- {else /}
- <img class="spx-stage-eleven-image" src="{$item.media}" alt="{$item.title|default=$title}">
- {/if}
- {/if}
- </div>
- {/volist}
- <div class="spx-stage-eleven-overlay"></div>
- </div>
- <div class="spx-stage-eleven-content-wrap">
- <div class="spx-stage-eleven-content">
- <div class="spx-stage-eleven-tabs" role="tablist" aria-label="第十一屏切换选项">
- {volist name="stageElevenItems" id="item" key="itemIndex"}
- <button class="spx-stage-eleven-tab{if $itemIndex == 1} is-active{/if}" type="button" data-stage-eleven-tab="{$itemIndex - 1}" role="tab" aria-selected="{if $itemIndex == 1}true{else /}false{/if}">
- <span class="spx-stage-eleven-tab-line" aria-hidden="true"></span>
- <span class="spx-stage-eleven-tab-body">
- <span class="spx-stage-eleven-tab-title spx-reveal">{$item.title|default='选项'|trim}</span>
- <span class="spx-stage-eleven-tab-content spx-reveal spx-reveal--delay-1">{$item.content|trim|nl2br=###|raw}</span>
- </span>
- </button>
- {/volist}
- </div>
- </div>
- </div>
- </section>
- {/if}
- <?php
- $stageTwelveTitle = trim((string)($block['title_13_1'] ?? ''));
- $stageTwelveDesc = trim((string)($block['title_13_2'] ?? ''));
- $stageTwelveMedia = trim((string)($block['thumb_13'] ?? ''));
- $stageTwelveExt = $stageTwelveMedia ? strtolower(pathinfo(parse_url($stageTwelveMedia, PHP_URL_PATH), PATHINFO_EXTENSION)) : '';
- $stageTwelveIsVideo = in_array($stageTwelveExt, ['mp4', 'webm', 'ogg', 'mov', 'm4v']);
- ?>
- {if $stageTwelveTitle !== '' || $stageTwelveDesc !== '' || $stageTwelveMedia !== ''}
- <section class="spx-stage-twelve">
- <div class="content-1300-wrap spx-stage-twelve-wrap">
- <div class="spx-stage-twelve-copy">
- {if $stageTwelveTitle !== ''}
- <h2 class="spx-stage-twelve-title spx-reveal">{$stageTwelveTitle|trim}</h2>
- {/if}
- {if $stageTwelveDesc !== ''}
- <div class="spx-stage-twelve-desc spx-reveal spx-reveal--delay-1">{$stageTwelveDesc|trim|nl2br=###|raw}</div>
- {/if}
- </div>
- {if $stageTwelveMedia !== ''}
- <div class="spx-stage-twelve-media">
- <div class="spx-stage-twelve-media-shell">
- {if $stageTwelveIsVideo}
- <video class="spx-stage-twelve-video" src="{$stageTwelveMedia}" autoplay muted playsinline preload="metadata" loop></video>
- {else /}
- <img class="spx-stage-twelve-image" src="{$stageTwelveMedia}" alt="{$stageTwelveTitle|default=$title}">
- {/if}
- </div>
- </div>
- {/if}
- </div>
- </section>
- {/if}
- <?php
- $stageThirteenTitle = trim((string)($block['title_14_1'] ?? ''));
- $stageThirteenMedia = trim((string)($block['thumb_14'] ?? ''));
- $stageThirteenDesc = trim((string)($block['title_14_2'] ?? ''));
- $stageThirteenExt = $stageThirteenMedia ? strtolower(pathinfo(parse_url($stageThirteenMedia, PHP_URL_PATH), PATHINFO_EXTENSION)) : '';
- $stageThirteenIsVideo = in_array($stageThirteenExt, ['mp4', 'webm', 'ogg', 'mov', 'm4v']);
- ?>
- {if $stageThirteenTitle !== '' || $stageThirteenMedia !== '' || $stageThirteenDesc !== ''}
- <section class="spx-stage-thirteen">
- <div class="content-1300-wrap spx-stage-thirteen-wrap">
- <div class="spx-stage-thirteen-copy spx-stage-thirteen-copy-top">
- {if $stageThirteenTitle !== ''}
- <h2 class="spx-stage-thirteen-title spx-reveal">{$stageThirteenTitle|trim}</h2>
- {/if}
- </div>
- {if $stageThirteenMedia !== ''}
- <div class="spx-stage-thirteen-media">
- <div class="spx-stage-thirteen-media-shell">
- {if $stageThirteenIsVideo}
- <video class="spx-stage-thirteen-video" src="{$stageThirteenMedia}" autoplay muted playsinline preload="metadata" loop></video>
- {else /}
- <img class="spx-stage-thirteen-image" src="{$stageThirteenMedia}" alt="{$stageThirteenTitle|default=$title}">
- {/if}
- </div>
- </div>
- {/if}
- {if $stageThirteenDesc !== ''}
- <div class="spx-stage-thirteen-copy spx-stage-thirteen-copy-bottom">
- <div class="spx-stage-thirteen-desc spx-reveal spx-reveal--delay-1">{$stageThirteenDesc|trim|nl2br=###|raw}</div>
- </div>
- {/if}
- </div>
- </section>
- {/if}
- <?php
- $stageFourteenTitle = trim((string)($block['title_15_1'] ?? ''));
- $stageFourteenDesc = trim((string)($block['title_15_2'] ?? ''));
- $stageFourteenMedia = trim((string)($block['thumb_15'] ?? ''));
- $stageFourteenExt = $stageFourteenMedia ? strtolower(pathinfo(parse_url($stageFourteenMedia, PHP_URL_PATH), PATHINFO_EXTENSION)) : '';
- $stageFourteenIsVideo = in_array($stageFourteenExt, ['mp4', 'webm', 'ogg', 'mov', 'm4v']);
- ?>
- {if $stageFourteenTitle !== '' || $stageFourteenDesc !== '' || $stageFourteenMedia !== ''}
- <section class="spx-stage-fourteen">
- <div class="spx-stage-fourteen-media-shell">
- {if $stageFourteenMedia !== ''}
- {if $stageFourteenIsVideo}
- <video class="spx-stage-fourteen-video" src="{$stageFourteenMedia}" autoplay muted playsinline preload="metadata" loop></video>
- {else /}
- <img class="spx-stage-fourteen-image" src="{$stageFourteenMedia}" alt="{$stageFourteenTitle|default=$title}">
- {/if}
- {/if}
- <div class="spx-stage-fourteen-overlay"></div>
- </div>
- <div class="spx-stage-fourteen-content-wrap">
- <div class="spx-stage-fourteen-content">
- {if $stageFourteenTitle !== ''}
- <h2 class="spx-stage-fourteen-title spx-reveal">{$stageFourteenTitle|trim}</h2>
- {/if}
- {if $stageFourteenDesc !== ''}
- <div class="spx-stage-fourteen-desc spx-reveal spx-reveal--delay-1">{$stageFourteenDesc|trim|nl2br=###|raw}</div>
- {/if}
- </div>
- </div>
- </section>
- {/if}
- <?php
- $stageFifteenTitle = trim((string)($block['title_16_1'] ?? ''));
- $stageFifteenEyebrow = trim((string)($block['title_16_3'] ?? ''));
- if ($stageFifteenEyebrow === '') {
- $stageFifteenEyebrow = trim((string)($block['title_5_3'] ?? ''));
- }
- $stageFifteenDesc = trim((string)($block['title_16_2'] ?? ''));
- $stageFifteenMedia = trim((string)($block['thumb_16'] ?? ''));
- $stageFifteenExt = $stageFifteenMedia ? strtolower(pathinfo(parse_url($stageFifteenMedia, PHP_URL_PATH), PATHINFO_EXTENSION)) : '';
- $stageFifteenIsVideo = in_array($stageFifteenExt, ['mp4', 'webm', 'ogg', 'mov', 'm4v']);
- ?>
- {if $stageFifteenTitle !== '' || $stageFifteenEyebrow !== '' || $stageFifteenDesc !== '' || $stageFifteenMedia !== ''}
- <section class="spx-stage-fifteen">
- <div class="content-1300-wrap spx-stage-fifteen-wrap">
- <div class="spx-stage-fifteen-head">
- <div class="spx-stage-fifteen-head-left">
- {if $stageFifteenEyebrow !== ''}
- <div class="spx-stage-fifteen-eyebrow spx-reveal">{$stageFifteenEyebrow|trim}</div>
- {/if}
- {if $stageFifteenTitle !== ''}
- <h2 class="spx-stage-fifteen-title spx-reveal spx-reveal--delay-1">{$stageFifteenTitle|trim}</h2>
- {/if}
- </div>
- {if $stageFifteenDesc !== ''}
- <div class="spx-stage-fifteen-desc spx-reveal spx-reveal--delay-2">{$stageFifteenDesc|trim|nl2br=###|raw}</div>
- {/if}
- </div>
- {if $stageFifteenMedia !== ''}
- <div class="spx-stage-fifteen-media">
- <div class="spx-stage-fifteen-media-shell">
- {if $stageFifteenIsVideo}
- <video class="spx-stage-fifteen-video" src="{$stageFifteenMedia}" autoplay muted playsinline preload="metadata" loop></video>
- {else /}
- <img class="spx-stage-fifteen-image" src="{$stageFifteenMedia}" alt="{$stageFifteenTitle|default=$title}">
- {/if}
- </div>
- </div>
- {/if}
- </div>
- </section>
- {/if}
- <?php
- $stageSixteenTitle = trim((string)($block['title_17_1'] ?? ''));
- $stageSixteenMedia = trim((string)($block['thumb_17'] ?? ''));
- $stageSixteenDesc = trim((string)($block['title_17_2'] ?? ''));
- $stageSixteenExt = $stageSixteenMedia ? strtolower(pathinfo(parse_url($stageSixteenMedia, PHP_URL_PATH), PATHINFO_EXTENSION)) : '';
- $stageSixteenIsVideo = in_array($stageSixteenExt, ['mp4', 'webm', 'ogg', 'mov', 'm4v']);
- ?>
- {if $stageSixteenTitle !== '' || $stageSixteenMedia !== '' || $stageSixteenDesc !== ''}
- <section class="spx-stage-sixteen">
- <div class="content-1300-wrap spx-stage-sixteen-wrap">
- <div class="spx-stage-sixteen-copy spx-stage-sixteen-copy-top">
- {if $stageSixteenTitle !== ''}
- <h2 class="spx-stage-sixteen-title spx-reveal">{$stageSixteenTitle|trim}</h2>
- {/if}
- </div>
- {if $stageSixteenMedia !== ''}
- <div class="spx-stage-sixteen-media">
- <div class="spx-stage-sixteen-media-shell">
- {if $stageSixteenIsVideo}
- <video class="spx-stage-sixteen-video" src="{$stageSixteenMedia}" autoplay muted playsinline preload="metadata" loop></video>
- {else /}
- <img class="spx-stage-sixteen-image" src="{$stageSixteenMedia}" alt="{$stageSixteenTitle|default=$title}">
- {/if}
- </div>
- </div>
- {/if}
- {if $stageSixteenDesc !== ''}
- <div class="spx-stage-sixteen-copy spx-stage-sixteen-copy-bottom">
- <div class="spx-stage-sixteen-desc spx-reveal spx-reveal--delay-1">{$stageSixteenDesc|trim|nl2br=###|raw}</div>
- </div>
- {/if}
- </div>
- </section>
- {/if}
- <?php
- $stageSeventeenTitle = trim((string)($block['title_18_1'] ?? ''));
- $stageSeventeenDesc = trim((string)($block['title_18_2'] ?? ''));
- $stageSeventeenMedia = trim((string)($block['thumb_18'] ?? ''));
- $stageSeventeenNote = trim((string)($block['title_18_3'] ?? ''));
- $stageSeventeenExt = $stageSeventeenMedia ? strtolower(pathinfo(parse_url($stageSeventeenMedia, PHP_URL_PATH), PATHINFO_EXTENSION)) : '';
- $stageSeventeenIsVideo = in_array($stageSeventeenExt, ['mp4', 'webm', 'ogg', 'mov', 'm4v']);
- ?>
- {if $stageSeventeenTitle !== '' || $stageSeventeenDesc !== '' || $stageSeventeenMedia !== '' || $stageSeventeenNote !== ''}
- <section class="spx-stage-seventeen">
- <div class="content-1300-wrap spx-stage-seventeen-wrap">
- <div class="spx-stage-seventeen-copy spx-stage-seventeen-copy-top">
- {if $stageSeventeenTitle !== ''}
- <h2 class="spx-stage-seventeen-title spx-reveal">{$stageSeventeenTitle|trim}</h2>
- {/if}
- {if $stageSeventeenDesc !== ''}
- <div class="spx-stage-seventeen-desc spx-reveal spx-reveal--delay-1">{$stageSeventeenDesc|trim|nl2br=###|raw}</div>
- {/if}
- </div>
- {if $stageSeventeenMedia !== ''}
- <div class="spx-stage-seventeen-media">
- <div class="spx-stage-seventeen-media-shell">
- {if $stageSeventeenIsVideo}
- <video class="spx-stage-seventeen-video" src="{$stageSeventeenMedia}" autoplay muted playsinline preload="metadata" loop></video>
- {else /}
- <img class="spx-stage-seventeen-image" src="{$stageSeventeenMedia}" alt="{$stageSeventeenTitle|default=$title}">
- {/if}
- </div>
- </div>
- {/if}
- {if $stageSeventeenNote !== ''}
- <div class="spx-stage-seventeen-copy spx-stage-seventeen-copy-bottom">
- <div class="spx-stage-seventeen-note spx-reveal spx-reveal--delay-2">{$stageSeventeenNote|trim|nl2br=###|raw}</div>
- </div>
- {/if}
- </div>
- </section>
- {/if}
- {/volist}
- {/yzn}
- {yzn module="cms" action="lists" catid="46" where="$where" order="listorder asc,id desc" num="5" return="stageEighteenCards" moreinfo="1"}
- {if !empty($stageEighteenCards)}
- <section class="spx-stage-eighteen">
- <div class="content-1300-wrap spx-stage-eighteen-wrap">
- <div class="spx-stage-eighteen-grid">
- {volist name="stageEighteenCards" id="card" key="cardIndex"}
- <button class="spx-stage-eighteen-card spx-stage-eighteen-card-{$cardIndex}" type="button" aria-label="{$card.title|default='查看详情'|trim}" data-stage-eighteen-trigger="{$card.id}">
- <span class="spx-stage-eighteen-card-media">
- {if !empty($card.thumb)}
- <img class="spx-stage-eighteen-card-image" src="{$card.thumb}" alt="{$card.title|default=$title}">
- {else /}
- <span class="spx-stage-eighteen-card-placeholder"></span>
- {/if}
- <span class="spx-stage-eighteen-card-overlay"></span>
- </span>
- <span class="spx-stage-eighteen-card-title">{$card.title|default='Untitled'|trim}</span>
- <span class="spx-stage-eighteen-card-plus" aria-hidden="true"><i class="bi bi-plus-lg"></i></span>
- </button>
- {/volist}
- </div>
- </div>
- </section>
- <div class="spx-stage-eighteen-modal" id="stageEighteenModal" hidden>
- <div class="spx-stage-eighteen-modal__backdrop" data-stage-eighteen-close></div>
- <div class="spx-stage-eighteen-modal__dialog" role="dialog" aria-modal="true" aria-label="{:cms_t('combo_detail','组合详情')}">
- <button class="spx-stage-eighteen-modal__close" type="button" aria-label="{:cms_t('close','关闭')}" data-stage-eighteen-close>
- <i class="bi bi-x-lg"></i>
- </button>
- <div class="spx-stage-eighteen-modal__body">
- {volist name="stageEighteenCards" id="card" key="cardIndex"}
- <?php
- $normalizeStageEighteenList = function ($value) {
- if (is_array($value)) {
- $result = [];
- foreach ($value as $item) {
- $text = trim((string)$item);
- if ($text !== '') $result[] = $text;
- }
- return $result;
- }
- $text = trim((string)$value);
- if ($text === '') return [];
- $json = json_decode($text, true);
- if (is_array($json)) {
- $result = [];
- foreach ($json as $item) {
- $itemText = trim((string)$item);
- if ($itemText !== '') $result[] = $itemText;
- }
- return $result;
- }
- $unserialized = @unserialize($text);
- if (is_array($unserialized)) {
- $result = [];
- foreach ($unserialized as $item) {
- $itemText = trim((string)$item);
- if ($itemText !== '') $result[] = $itemText;
- }
- return $result;
- }
- $parts = preg_split('/\r\n|\r|\n|\|\|\||\|/', $text);
- $result = [];
- if (is_array($parts)) {
- foreach ($parts as $item) {
- $itemText = trim((string)$item);
- if ($itemText !== '') $result[] = $itemText;
- }
- }
- return $result;
- };
- $cardTitles = $normalizeStageEighteenList($card['titles'] ?? []);
- $cardContents = $normalizeStageEighteenList($card['contents'] ?? []);
- $cardThumbs = $normalizeStageEighteenList($card['thumbs'] ?? []);
- $cardFeatureCount = max(count($cardTitles), count($cardContents), count($cardThumbs));
- ?>
- <div class="spx-stage-eighteen-modal-panel{if $cardIndex == 1} is-active{/if}" data-stage-eighteen-panel="{$card.id}">
- <div class="spx-stage-eighteen-modal-hero">
- <div class="spx-stage-eighteen-modal-media">
- {if !empty($card.thumb)}
- <img class="spx-stage-eighteen-modal-image" src="{$card.thumb}" alt="{$card.title|default=$title}">
- {else /}
- <span class="spx-stage-eighteen-modal-image spx-stage-eighteen-modal-image--placeholder"></span>
- {/if}
- <span class="spx-stage-eighteen-modal-hero-overlay"></span>
- <div class="spx-stage-eighteen-modal-copy">
- <h3 class="spx-stage-eighteen-modal-title">{$card.title|default='Untitled'|trim}</h3>
- </div>
- </div>
- </div>
- <?php if ($cardFeatureCount > 0): ?>
- <div class="spx-stage-eighteen-modal-features">
- <?php for ($featureIndex = 0; $featureIndex < $cardFeatureCount; $featureIndex++): ?>
- <?php
- $featureTitle = trim((string)($cardTitles[$featureIndex] ?? ''));
- $featureContent = trim((string)($cardContents[$featureIndex] ?? ''));
- $featureThumb = trim((string)($cardThumbs[$featureIndex] ?? ''));
- $hasFeature = $featureTitle !== '' || $featureContent !== '' || $featureThumb !== '';
- ?>
- <?php if ($hasFeature): ?>
- <?php
- $featureExt = strtolower(pathinfo(parse_url($featureThumb, PHP_URL_PATH) ?: $featureThumb, PATHINFO_EXTENSION));
- $featureIsVideo = in_array($featureExt, ['mp4', 'webm', 'ogg', 'mov', 'm4v']);
- ?>
- <div class="spx-stage-eighteen-feature<?php echo $featureIndex % 2 === 1 ? ' is-reverse' : ''; ?>">
- <div class="spx-stage-eighteen-feature-copy">
- <?php if ($featureTitle !== ''): ?>
- <h4 class="spx-stage-eighteen-feature-title"><?php echo htmlspecialchars($featureTitle, ENT_QUOTES, 'UTF-8'); ?></h4>
- <?php endif; ?>
- <?php if ($featureContent !== ''): ?>
- <div class="spx-stage-eighteen-feature-desc"><?php echo nl2br(htmlspecialchars($featureContent, ENT_QUOTES, 'UTF-8')); ?></div>
- <?php endif; ?>
- </div>
- <div class="spx-stage-eighteen-feature-media<?php echo $featureThumb === '' ? ' is-empty' : ''; ?>">
- <?php if ($featureThumb !== ''): ?>
- <?php if ($featureIsVideo): ?>
- <video class="spx-stage-eighteen-feature-video" src="<?php echo htmlspecialchars($featureThumb, ENT_QUOTES, 'UTF-8'); ?>" autoplay muted loop playsinline preload="metadata"></video>
- <?php else: ?>
- <img class="spx-stage-eighteen-feature-image" src="<?php echo htmlspecialchars($featureThumb, ENT_QUOTES, 'UTF-8'); ?>" alt="<?php echo htmlspecialchars($featureTitle !== '' ? $featureTitle : trim((string)$card['title']), ENT_QUOTES, 'UTF-8'); ?>">
- <?php endif; ?>
- <?php endif; ?>
- </div>
- </div>
- <?php endif; ?>
- <?php endfor; ?>
- </div>
- <?php endif; ?>
- </div>
- {/volist}
- </div>
- </div>
- </div>
- {/if}
- {/yzn}
- {include file="footer-links" /}
- </main>
- <script src="/assets/xtu/show-product.js?v=20260427-1848"></script>
- {include file="footer" /}
|