category.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. // Αρχείο: /var/www/html/hockey-cms/category.php
  3. require_once __DIR__ . '/vendor/autoload.php';
  4. require_once __DIR__ . '/config/database.php';
  5. // Δυναμική ανάγνωση ενεργού theme
  6. $active_theme = 'default';
  7. try {
  8. $stmt =$pdo->query("SELECT value FROM settings WHERE `key` = 'active_theme'");
  9. $res =$stmt->fetchColumn();
  10. if ($res) { $active_theme =$res; }
  11. } catch (Exception $e) {}
  12. $theme_dir = __DIR__ . '/themes/' .$active_theme;
  13. if (!is_dir($theme_dir)) {
  14. $active_theme = 'default';$theme_dir = __DIR__ . '/themes/default';
  15. }
  16. $loader = new \Twig\Loader\FilesystemLoader($theme_dir);
  17. $twig = new \Twig\Environment($loader, [
  18. 'cache' => false,
  19. ]);
  20. // 1. Παίρνουμε το ID της κατηγορίας από το URL (π.χ. category.php?id=2)
  21. $cat_id = isset($_GET['id']) ? (int)$_GET['id'] : 0;
  22. if ($cat_id === 0) {
  23. header("Location: index.php");
  24. exit;
  25. }
  26. try {
  27. // 2. Φέρνουμε τα στοιχεία της συγκεκριμένης κατηγορίας
  28. $catStmt =$pdo->prepare("SELECT * FROM categories WHERE id = ?");
  29. $catStmt->execute([$cat_id]);
  30. $current_category =$catStmt->fetch();
  31. if (!$current_category) {
  32. die("Η κατηγορία δεν βρέθηκε.");
  33. }
  34. // 3. Φέρνουμε όλες τις κατηγορίες για το μενού του header
  35. $categories =$pdo->query("SELECT * FROM categories ORDER BY name")->fetchAll();
  36. // 4. Φέρνουμε ΜΟΝΟ τα προϊόντα που ανήκουν σε αυτή την κατηγορία
  37. $stmt =$pdo->prepare("
  38. SELECT p.id, p.title, p.price, p.created_at, pi.image_path
  39. FROM products p
  40. LEFT JOIN product_images pi ON (p.id = pi.product_id AND pi.is_primary = 1)
  41. WHERE p.category_id = ? AND p.status = 'available'
  42. ORDER BY p.id DESC
  43. ");
  44. $stmt->execute([$cat_id]);
  45. $products =$stmt->fetchAll();
  46. // 5. Render μέσω Twig (μπορούμε να ξαναχρησιμοποιήσουμε το index.html.twig ή να φτιάξουμε ξεχωριστό category.html.twig)
  47. // Εδώ περνάμε και το όνομα της τρέχουσας κατηγορίας για τίτλο
  48. echo $twig->render('index.html.twig', [
  49. 'site_title' => 'Hockey Gear CMS',
  50. 'categories' => $categories,
  51. 'products' => $products,
  52. 'current_category' => $current_category
  53. ]);
  54. } catch (Exception $e) {
  55. die("Σφάλμα συστήματος: " . $e->getMessage());
  56. }