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
Council 2026-04-20 06:23:29 +08:00
parent bf71aa1098
commit 349ec063c1
1 changed files with 14 additions and 14 deletions

View File

@ -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'); ?>