query("SELECT id, model_name, make_id FROM car_models")->fetch_all(MYSQLI_ASSOC); // Build WHERE $where = []; if ($model_id) { $where[] = "car_model = $model_id"; } elseif ($make_id) { $model_ids = []; foreach ($models as $model) { if ($model['make_id'] == $make_id) $model_ids[] = $model['id']; } if (empty($model_ids)) $where[] = "0"; else $where[] = "car_model IN (" . implode(',', $model_ids) . ")"; } if ($body) $where[] = "car_type = '" . $conn->real_escape_string($body) . "'"; if ($fuel_type) { $where[] = "fuel_type = '" . $conn->real_escape_string($fuel_type) . "'"; } $where[] = "price BETWEEN $min_price AND $max_price"; $where[] = "manufacture_year BETWEEN $min_year AND $max_year"; //print_r($where); if ($current_tab === 'new') $where[] = "kilometers = 0"; elseif ($current_tab === 'used') $where[] = "kilometers > 0"; $where_sql = $where ? 'WHERE ' . implode(' AND ', $where) : ''; // Sorting $order = 'ORDER BY id DESC'; if ($sort == 'low-to-high') $order = 'ORDER BY price ASC'; elseif ($sort == 'high-to-low') $order = 'ORDER BY price DESC'; elseif ($sort == 'by-latest') $order = 'ORDER BY id DESC'; elseif ($sort == 'hand-low-to-high') $order = 'ORDER BY hand ASC, id DESC'; elseif ($sort == 'hand-high-to-low') $order = 'ORDER BY hand DESC, id DESC'; elseif ($sort == 'km-low-to-high') $order = 'ORDER BY kilometers ASC, id DESC'; elseif ($sort == 'km-high-to-low') $order = 'ORDER BY kilometers DESC, id DESC'; // Pagination $count_sql = "SELECT COUNT(*) as total FROM cars_sale_inventory $where_sql"; $total_result = $conn->query($count_sql)->fetch_assoc(); $total_pages = max(1, ceil($total_result['total'] / $per_page)); // Fetch cars $sql = "SELECT * FROM cars_sale_inventory $where_sql $order LIMIT $per_page OFFSET $offset"; $cars = $conn->query($sql); // Tabs $tabs = ['All car' => '', 'New car' => 'new', 'Used car' => 'used']; $makes = $conn->query("SELECT id, make_name FROM car_makes ORDER BY make_name ASC")->fetch_all(MYSQLI_ASSOC); $models = $conn->query("SELECT id, model_name, make_id FROM car_models ORDER BY model_name ASC")->fetch_all(MYSQLI_ASSOC); $bodies = $conn->query("SELECT DISTINCT car_type FROM cars_sale_inventory WHERE car_type IS NOT NULL AND car_type <> '' ORDER BY car_type ASC")->fetch_all(MYSQLI_ASSOC); $row = $conn->query("SELECT MIN(price) as min_price, MAX(price) as max_price, MIN(manufacture_year) as min_year, MAX(manufacture_year) as max_year FROM cars_sale_inventory")->fetch_assoc(); $minPrice = (int) $row['min_price']; $maxPrice = (int) $row['max_price']; $minYear = (int) $row['min_year']; $maxYear = (int) $row['max_year']; // --- build dynamic parts array --- // 1) Build lookup maps in one go $makes = $conn->query("SELECT id, make_name FROM car_makes")->fetch_all(MYSQLI_ASSOC); $modelsMap = []; foreach ($conn->query("SELECT id, model_name FROM car_models")->fetch_all(MYSQLI_ASSOC) as $m) { $modelsMap[$m['id']] = $m['model_name']; } $makesMap = []; foreach ($makes as $m) { $makesMap[$m['id']] = $m['make_name']; } // 2) Seed dynamic parts from filters $parts = []; if ($make_id && isset($makesMap[$make_id])) { $parts[] = $makesMap[$make_id]; } if ($model_id && isset($modelsMap[$model_id])) { $parts[] = $modelsMap[$model_id]; } if ($body) { $parts[] = $body; } $parts[] = "מחיר {$min_price}-{$max_price} ₪"; $parts[] = "שנה {$min_year}-{$max_year}"; // 3) Build description $description = "רכבים למכירה: " . implode(" | ", $parts) . " – בחרו את הרכב המושלם עבורך."; // 4) Grab up to 10 titles for keywords $titles = []; $sqlTitles = "SELECT title FROM cars_sale_inventory $where_sql $order LIMIT 10"; foreach ($conn->query($sqlTitles)->fetch_all(MYSQLI_ASSOC) as $r) { $titles[] = $r['title']; } // 5) Meta‐keywords = unique filter terms + car titles $keywords = array_unique(array_merge($parts, $titles)); $keywords = implode(", ", $keywords); ?>