| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- <?php
- // Αρχείο: /var/www/html/hockey-cms/product.php
- if (session_status() === PHP_SESSION_NONE) { session_start(); }
- require_once __DIR__ . '/vendor/autoload.php';
- require_once __DIR__ . '/config/database.php';
- // --- Μηχανισμός Αλλαγής Γλώσσας (Language Switcher) ---
- if (isset($_GET['lang']) && in_array($_GET['lang'], ['el', 'en'])) {
- $_SESSION['lang'] =$_GET['lang'];
- }
- $current_lang =$_SESSION['lang'] ?? 'el';
- // Δυναμική ανάγνωση ενεργού theme από τη βάση
- $active_theme = 'default';
- try {
- $stmt =$pdo->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());
- }
|