query("SELECT value FROM settings WHERE `key` = 'active_theme'"); $res =$stmt->fetchColumn(); if ($res) { $active_theme =$res; } } catch (Exception $e) {} $theme_dir = __DIR__ . '/themes/' .$active_theme; if (!is_dir($theme_dir)) { $active_theme = 'default';$theme_dir = __DIR__ . '/themes/default'; } $loader = new \Twig\Loader\FilesystemLoader($theme_dir); $twig = new \Twig\Environment($loader, [ 'cache' => false, ]); // Περνάμε Session και Γλώσσα στο Twig (για το header) $twig->addGlobal('session',$_SESSION); $twig->addGlobal('current_lang',$current_lang); // --- Φόρτωση Δυναμικών Κειμένων ανάλογα τη γλώσσα --- $siteTexts = []; try { $text_column = ($current_lang === 'en') ? 'text_value_en' : 'text_value_el'; $textsStmt =$pdo->query("SELECT text_key, {$text_column} as text_value FROM site_texts"); while ($row = $textsStmt->fetch(PDO::FETCH_ASSOC)) {$siteTexts[$row['text_key']] =$row['text_value']; } } catch (Exception $e) {} $twig->addGlobal('text',$siteTexts); // --- Φόρτωση Logo Site --- $site_logo = ''; try { $logoStmt =$pdo->prepare("SELECT value FROM settings WHERE `key` = 'site_logo'"); $logoStmt->execute(); $site_logo =$logoStmt->fetchColumn(); } catch (Exception $e) {} $twig->addGlobal('site_logo',$site_logo); // 1. Παίρνουμε το ID του προϊόντος από το URL $product_id = isset($_GET['id']) ? (int)$_GET['id'] : 0; if ($product_id === 0) { die("Δεν επιλέχθηκε προϊόν."); } try { // 2. Φέρνουμε τα στοιχεία του προϊόντος, την κατηγορία (Δίγλωσσα) και τον πωλητή $stmt =$pdo->prepare(" SELECT p.*, c.name_el as cat_name_el, c.name_en as cat_name_en, u.username as seller_name, pi.image_path FROM products p LEFT JOIN categories c ON p.category_id = c.id LEFT JOIN users u ON p.seller_id = u.id LEFT JOIN product_images pi ON (p.id = pi.product_id AND pi.is_primary = 1) WHERE p.id = ? "); $stmt->execute([$product_id]); $product =$stmt->fetch(PDO::FETCH_ASSOC); if (!$product) { die("Το προϊόν δεν βρέθηκε."); } // Ορισμός της σωστής γλώσσας για το όνομα της κατηγορίας του προϊόντος $product['cat_name'] = ($current_lang === 'en' && !empty($product['cat_name_en'])) ? $product['cat_name_en'] :$product['cat_name_el']; // 3. Φέρνουμε τα Δυναμικά Χαρακτηριστικά (Attributes) - Δίγλωσσα $attrStmt =$pdo->prepare(" SELECT a.name as name_el, a.name_en, a.unit, pav.value FROM product_attribute_values pav JOIN attributes a ON pav.attribute_id = a.id WHERE pav.product_id = ? ORDER BY a.name "); $attrStmt->execute([$product_id]); $attributesRaw =$attrStmt->fetchAll(PDO::FETCH_ASSOC); // Μεταφράζουμε τα χαρακτηριστικά δυναμικά $attributes = []; foreach ($attributesRaw as $attr) {$attr['name'] = ($current_lang === 'en' && !empty($attr['name_en'])) ? $attr['name_en'] :$attr['name_el']; $attributes[] =$attr; } // 4. Φέρνουμε τις Κατηγορίες για το Sidebar μενού - Δίγλωσσα $categoriesRaw =$pdo->query("SELECT * FROM categories ORDER BY sort_order ASC, name_el ASC")->fetchAll(PDO::FETCH_ASSOC); $categories = []; foreach ($categoriesRaw as $cat) {$cat['display_name'] = ($current_lang === 'en' && !empty($cat['name_en'])) ? $cat['name_en'] :$cat['name_el']; $categories[] =$cat; } // 5. Render μέσω Twig του template echo $twig->render('product.html.twig', [ 'site_title' => 'Hockey Gear CMS', 'categories' => $categories, 'product' => $product, 'attributes' => $attributes ]); } catch (Exception $e) { die("Σφάλμα συστήματος: " . $e->getMessage()); }