fix: 替换 ThinkTemplate 标签为 PHP ModuleInclude
路线 B:票务模板不依赖 ThinkTemplate 解析引擎
- {include file=...} → <?php echo ModuleInclude(...) ?>
- {:Config()} / {:IsMobileLogin()} → <?php echo Config() ?> / <?php echo IsMobileLogin() ?>
- {$var|default=...} → <?php echo $var ?? 'default' ?>
- {$var|json_encode|raw} → <?php echo json_encode($var ?? []) ?>
绕过 ThinkTemplate parseTemplateFile() 路径拼接 bug(Linux view_depr=/ 导致 include 路径解析错误)
council/ProductManager
parent
bf71aa1098
commit
349ec063c1
|
|
@ -1,4 +1,4 @@
|
|||
{include file="public/head" /}
|
||||
<?php echo ModuleInclude('public/header'); ?>
|
||||
|
||||
<style>
|
||||
/* VR票务 - 票务商品详情页 */
|
||||
|
|
@ -121,8 +121,8 @@
|
|||
<div class="vr-ticket-page" id="vrTicketApp">
|
||||
<!-- 商品头部 -->
|
||||
<div class="vr-ticket-header">
|
||||
<div class="vr-event-title">{$goods.title|default='VR演唱会'}</div>
|
||||
<div class="vr-event-subtitle">{$goods.simple_desc|default=''}</div>
|
||||
<div class="vr-event-title"><?php echo htmlspecialchars($goods['title'] ?? 'VR演唱会', ENT_QUOTES, 'UTF-8'); ?></div>
|
||||
<div class="vr-event-subtitle"><?php echo htmlspecialchars($goods['simple_desc'] ?? '', ENT_QUOTES, 'UTF-8'); ?></div>
|
||||
</div>
|
||||
|
||||
<!-- 场次选择 -->
|
||||
|
|
@ -158,12 +158,12 @@
|
|||
</div>
|
||||
|
||||
<!-- 商品详情(保留) -->
|
||||
{if !empty($goods.content)}
|
||||
<?php if (!empty($goods['content'])): ?>
|
||||
<div class="vr-seat-section">
|
||||
<div class="vr-section-title">演出详情</div>
|
||||
<div class="goods-detail-content">{$goods.content}</div>
|
||||
<div class="goods-detail-content"><?php echo $goods['content']; ?></div>
|
||||
</div>
|
||||
{/if}
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- 购买栏 -->
|
||||
<div class="vr-purchase-bar">
|
||||
|
|
@ -177,20 +177,20 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
{include file="public/footer" /}
|
||||
<?php echo ModuleInclude('public/footer'); ?>
|
||||
|
||||
<script>
|
||||
(function() {
|
||||
var app = {
|
||||
goodsId: {$goods.id|default=0},
|
||||
seatMap: {json_decode($vr_seat_template.seat_map|default='{}', true)|raw},
|
||||
specBaseIdMap: {json_decode($vr_seat_template.spec_base_id_map|default='{}', true)|raw},
|
||||
goodsId: <?php echo intval($goods['id'] ?? 0); ?>,
|
||||
seatMap: <?php echo json_encode($vr_seat_template['seat_map'] ?? []); ?>,
|
||||
specBaseIdMap: <?php echo json_encode($vr_seat_template['spec_base_id_map'] ?? []); ?>,
|
||||
selectedSeats: [], // [{row, col, char, price, label, classes}]
|
||||
soldSeats: {}, // {row_col: true}
|
||||
currentSession: null,
|
||||
sessionSpecId: null,
|
||||
requestUrl: '{:Config("shopxo.host_url")}',
|
||||
userId: {:IsMobileLogin()},
|
||||
requestUrl: '<?php echo Config("shopxo.host_url"); ?>',
|
||||
userId: <?php echo IsMobileLogin(); ?>,
|
||||
|
||||
init: function() {
|
||||
this.renderSessions();
|
||||
|
|
@ -200,7 +200,7 @@
|
|||
|
||||
// 渲染场次列表(基于 ShopXO spec 数据)
|
||||
renderSessions: function() {
|
||||
var specData = {$goods_spec_data|json_encode|raw} || [];
|
||||
var specData = <?php echo json_encode($goods_spec_data ?? []); ?> || [];
|
||||
var html = '';
|
||||
if (specData.length > 0) {
|
||||
specData.forEach(function(spec) {
|
||||
|
|
@ -448,4 +448,4 @@
|
|||
})();
|
||||
</script>
|
||||
|
||||
{include file="public/footer_page" /}
|
||||
<?php echo ModuleInclude('public/footer_page'); ?>
|
||||
|
|
|
|||
Loading…
Reference in New Issue