search.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <?php
  2. // Αρχείο: /var/www/html/hockey-cms/search.php
  3. if (session_status() === PHP_SESSION_NONE) { session_start(); }
  4. require_once __DIR__ . '/vendor/autoload.php';
  5. require_once __DIR__ . '/config/database.php';
  6. // --- Μηχανισμός Αλλαγής Γλώσσας ---
  7. if (isset($_GET['lang']) && in_array($_GET['lang'], ['el', 'en'])) {
  8. $_SESSION['lang'] =$_GET['lang'];
  9. }
  10. $current_lang =$_SESSION['lang'] ?? 'el';
  11. // --- Φόρτωση Settings (Theme, Logo, Title) ---
  12. $active_theme = 'default';
  13. $site_logo = '';$site_title = 'Hockey CMS';
  14. try {
  15. $stmtSettings =$pdo->query("SELECT `key`, value FROM settings WHERE `key` IN ('active_theme', 'site_logo', 'site_title')");
  16. while ($row =$stmtSettings->fetch(PDO::FETCH_ASSOC)) {
  17. if ($row['key'] === 'active_theme' && !empty($row['value'])) {
  18. $active_theme = trim($row['value']);
  19. } elseif ($row['key'] === 'site_logo') {
  20. $site_logo =$row['value'];
  21. } elseif ($row['key'] === 'site_title' && !empty($row['value'])) {
  22. $site_title = trim($row['value']);
  23. }
  24. }
  25. } catch (Exception $e) {}
  26. $theme_dir = __DIR__ . '/themes/' .$active_theme;
  27. if (!is_dir($theme_dir)) {
  28. $active_theme = 'default';$theme_dir = __DIR__ . '/themes/default';
  29. }
  30. $loader = new \Twig\Loader\FilesystemLoader($theme_dir);
  31. $twig = new \Twig\Environment($loader, [
  32. 'cache' => false,
  33. ]);
  34. $twig->addGlobal('session',$_SESSION);
  35. $twig->addGlobal('current_lang',$current_lang);
  36. $twig->addGlobal('site_logo',$site_logo);
  37. // --- Φόρτωση Δυναμικών Κειμένων Site ---
  38. $siteTexts = [];
  39. try {
  40. $text_column = ($current_lang === 'en') ? 'text_value_en' : 'text_value_el';
  41. $textsStmt =$pdo->query("SELECT text_key, {$text_column} as text_value FROM site_texts");
  42. while ($row = $textsStmt->fetch(PDO::FETCH_ASSOC)) {$siteTexts[$row['text_key']] =$row['text_value'];
  43. }
  44. } catch (Exception $e) {}
  45. $twig->addGlobal('text',$siteTexts);
  46. // 1. Παίρνουμε τον όρο αναζήτησης
  47. $search_query = isset($_GET['q']) ? trim($_GET['q']) : '';
  48. try {
  49. // 2. Φόρτωση κατηγοριών για το sidebar
  50. $categories = [];
  51. try {
  52. $categoriesRaw =$pdo->query("SELECT id, parent_id, name_el, name_en, sort_order FROM categories ORDER BY sort_order ASC, name_el ASC")->fetchAll(PDO::FETCH_ASSOC);
  53. foreach ($categoriesRaw as $cat) {$cat['display_name'] = ($current_lang === 'en' && !empty($cat['name_en'])) ? $cat['name_en'] :$cat['name_el'];
  54. $categories[] =$cat;
  55. }
  56. } catch (Exception $e) {}
  57. $products = [];
  58. if (!empty($search_query)) {
  59. $words = preg_split('/\s+/', mb_strtolower($search_query, 'UTF-8'));
  60. $words = array_filter($words, function($w) { return mb_strlen(trim($w)) > 0; });
  61. if (!empty($words)) {
  62. $whereClauses = [];$params = [];
  63. foreach ($words as $word) {$like = '%' . $word . '\%';$whereClauses[] = "(LOWER(p.title) LIKE ? OR LOWER(p.description) LIKE ? OR LOWER(p.search_tags) LIKE ?)";
  64. array_push($params,$like, $like,$like);
  65. }
  66. $searchCondition = "(" . implode(" OR ", $whereClauses) . ")";
  67. $sql = "
  68. SELECT p.id, p.title, p.price, p.created_at, pi.image_path
  69. FROM products p
  70. LEFT JOIN product_images pi ON (p.id = pi.product_id AND pi.is_primary = 1)
  71. WHERE p.status = 'available' AND " . $searchCondition . "
  72. ORDER BY p.id DESC
  73. ";
  74. // --- DEBUG SECTION ---
  75. echo "<div style='background:#111; color:#0f0; padding:15px; font-family:monospace; z-index:99999; position:relative;'>";
  76. echo "<strong>DEBUG INFO:</strong><br>";
  77. echo "Search Query: " . htmlspecialchars($search_query) . "<br>";
  78. echo "SQL: " . htmlspecialchars($sql) . "<br>";
  79. echo "Params: "; print_r($params);
  80. echo "</div>";
  81. // ---------------------
  82. $stmt = $pdo->prepare($sql);
  83. $stmt->execute($params);
  84. $products =$stmt->fetchAll(PDO::FETCH_ASSOC);
  85. echo "<div style='background:#111; color:#ff0; padding:15px; font-family:monospace; z-index:99999; position:relative;'>";
  86. echo "Products Found Count: " . count($products) . "<br>";
  87. echo "</div>";
  88. }
  89. }
  90. // 4. Αποστολή δεδομένων στο Twig
  91. echo $twig->render('index.html.twig', [
  92. 'site_title' => $site_title,
  93. 'categories' => $categories,
  94. 'products' => $products,
  95. 'search_query' => $search_query
  96. ]);
  97. } catch (Exception $e) {
  98. die("Σφάλμα αναζήτησης: " . $e->getMessage());
  99. }