diff --git a/shopxo/app/plugins/vr_ticket/hook/AdminGoodsSaveHandle.php b/shopxo/app/plugins/vr_ticket/hook/AdminGoodsSaveHandle.php index 6932bf6..069db6d 100644 --- a/shopxo/app/plugins/vr_ticket/hook/AdminGoodsSaveHandle.php +++ b/shopxo/app/plugins/vr_ticket/hook/AdminGoodsSaveHandle.php @@ -11,6 +11,9 @@ class AdminGoodsSaveHandle */ public function handle($params = []) { + $debugPath = '/tmp/vr_debug.log'; + @file_put_contents($debugPath, "[HOOK_FIRED] hook_name=" . ($params['hook_name'] ?? 'NULL') . ", goods_id=" . ($params['goods_id'] ?? 'NULL') . ", item_type=" . ($params['data']['item_type'] ?? 'NULL') . "\n", FILE_APPEND); + $hookName = $params['hook_name'] ?? ''; // ────────────────────────────────────────────────────── @@ -106,9 +109,12 @@ class AdminGoodsSaveHandle } // 按 selected_rooms 过滤(支持前端标准化的 "room_0" 格式双向兼容) + // 注意:v3 格式 room.id 可能为空(用数组索引代替 id), + // 此时 room_0 对应 rooms[0],room_1 对应 rooms[1],以此类推 $selectedRoomIds = array_column( - array_filter($allRooms, function ($r) use ($selectedRooms) { + array_filter($allRooms, function ($r) use ($selectedRooms, &$roomIdx) { $rid = $r['id'] ?? ''; + // 直接匹配 if (in_array($rid, $selectedRooms)) { return true; } @@ -116,12 +122,20 @@ class AdminGoodsSaveHandle if (strpos($rid, 'room_') === 0 && in_array(substr($rid, 5), $selectedRooms)) { return true; } - if (in_array('room_' . $rid, $selectedRooms)) { + if (!empty($rid) && in_array('room_' . $rid, $selectedRooms)) { + return true; + } + // 空 id:用数组索引替代(room_0→rooms[0], room_1→rooms[1]) + static $roomIndex = -1; + $roomIndex++; + if ($rid === '' && in_array('room_' . $roomIndex, $selectedRooms)) { return true; } return false; }), null ); + // 重置静态索引(避免跨模板污染) + unset($roomIndex); $config['template_snapshot'] = [ 'venue' => $seatMap['venue'] ?? [],