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> <style>
/* VR票务 - 票务商品详情页 */ /* VR票务 - 票务商品详情页 */
@ -121,8 +121,8 @@
<div class="vr-ticket-page" id="vrTicketApp"> <div class="vr-ticket-page" id="vrTicketApp">
<!-- 商品头部 --> <!-- 商品头部 -->
<div class="vr-ticket-header"> <div class="vr-ticket-header">
<div class="vr-event-title">{$goods.title|default='VR演唱会'}</div> <div class="vr-event-title"><?php echo htmlspecialchars($goods['title'] ?? 'VR演唱会', ENT_QUOTES, 'UTF-8'); ?></div>
<div class="vr-event-subtitle">{$goods.simple_desc|default=''}</div> <div class="vr-event-subtitle"><?php echo htmlspecialchars($goods['simple_desc'] ?? '', ENT_QUOTES, 'UTF-8'); ?></div>
</div> </div>
<!-- 场次选择 --> <!-- 场次选择 -->
@ -158,12 +158,12 @@
</div> </div>
<!-- 商品详情(保留) --> <!-- 商品详情(保留) -->
{if !empty($goods.content)} <?php if (!empty($goods['content'])): ?>
<div class="vr-seat-section"> <div class="vr-seat-section">
<div class="vr-section-title">演出详情</div> <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> </div>
{/if} <?php endif; ?>
<!-- 购买栏 --> <!-- 购买栏 -->
<div class="vr-purchase-bar"> <div class="vr-purchase-bar">
@ -177,20 +177,20 @@
</div> </div>
</div> </div>
{include file="public/footer" /} <?php echo ModuleInclude('public/footer'); ?>
<script> <script>
(function() { (function() {
var app = { var app = {
goodsId: {$goods.id|default=0}, goodsId: <?php echo intval($goods['id'] ?? 0); ?>,
seatMap: {json_decode($vr_seat_template.seat_map|default='{}', true)|raw}, seatMap: <?php echo json_encode($vr_seat_template['seat_map'] ?? []); ?>,
specBaseIdMap: {json_decode($vr_seat_template.spec_base_id_map|default='{}', true)|raw}, specBaseIdMap: <?php echo json_encode($vr_seat_template['spec_base_id_map'] ?? []); ?>,
selectedSeats: [], // [{row, col, char, price, label, classes}] selectedSeats: [], // [{row, col, char, price, label, classes}]
soldSeats: {}, // {row_col: true} soldSeats: {}, // {row_col: true}
currentSession: null, currentSession: null,
sessionSpecId: null, sessionSpecId: null,
requestUrl: '{:Config("shopxo.host_url")}', requestUrl: '<?php echo Config("shopxo.host_url"); ?>',
userId: {:IsMobileLogin()}, userId: <?php echo IsMobileLogin(); ?>,
init: function() { init: function() {
this.renderSessions(); this.renderSessions();
@ -200,7 +200,7 @@
// 渲染场次列表(基于 ShopXO spec 数据) // 渲染场次列表(基于 ShopXO spec 数据)
renderSessions: function() { renderSessions: function() {
var specData = {$goods_spec_data|json_encode|raw} || []; var specData = <?php echo json_encode($goods_spec_data ?? []); ?> || [];
var html = ''; var html = '';
if (specData.length > 0) { if (specData.length > 0) {
specData.forEach(function(spec) { specData.forEach(function(spec) {
@ -448,4 +448,4 @@
})(); })();
</script> </script>
{include file="public/footer_page" /} <?php echo ModuleInclude('public/footer_page'); ?>