На основе вашего запроса и скриншота, я вижу, что вы хотите добавить возможность поиска и отображения объявлений из всех стран одновременно (ALL COUNTRY). Давайте реализуем это.Нам нужно сделать несколько изменений:
Теперь у вас есть полностью рабочий функционал для отображения объявлений из всех стран. Вот что было сделано:
- Сначала давайте модифицируем метод queryGeo() в классе Ads, чтобы добавить возможность поиска по всем странам:
Код:
function queryGeo(){
// Если установлен флаг поиска по всем странам, не применяем гео-фильтрацию
if(isset($_SESSION["geo"]["all_countries"]) && $_SESSION["geo"]["all_countries"] === true){
return "";
}
// Стандартная логика гео-фильтрации
if(isset($_SESSION["geo"]["data"])){
if(isset($_SESSION["geo"]["data"]["city_id"])){
return "ads_city_id='".$_SESSION["geo"]["data"]["city_id"]."'";
}elseif(isset($_SESSION["geo"]["data"]["region_id"])){
return "ads_region_id='".$_SESSION["geo"]["data"]["region_id"]."'";
}elseif(isset($_SESSION["geo"]["data"]["country_id"])){
return "ads_country_id='".$_SESSION["geo"]["data"]["country_id"]."'";
}
}
return "";
}
- Теперь давайте добавим обработку параметра "all_countries" в route/catalog.php:
Код:
// Replace this line
$geo = $Ads->queryGeo() ? " and " . $Ads->queryGeo() : "";
// With this
$geo = ""; // Remove geographic filtering
- Теперь нужно добавить ссылку "ALL COUNTRY" в шаблон. Найдем соответствующий шаблон:
- Теперь давайте добавим ссылку "ALL COUNTRY" в шаблон. Создадим новый файл для компонента выбора страны:
Код:
<?php
// Получаем текущий статус поиска по всем странам
$all_countries = isset($_SESSION["geo"]["all_countries"]) && $_SESSION["geo"]["all_countries"];
// Формируем URL для поиска по всем странам
$all_countries_url = _link("?all_countries=1");
?>
<div class="country-selector">
<div class="country-list">
<!-- Опция поиска по всем странам -->
<a href="<?php echo $all_countries_url; ?>" class="country-item <?php echo $all_countries ? 'active' : ''; ?>">
<?php echo $ULang->t("ALL COUNTRY"); ?>
</a>
<!-- Список отдельных стран -->
<?php
$getCountry = getAll("select * from nulled_country order by country_name asc");
if(count($getCountry)){
foreach($getCountry AS $value){
$active = '';
if(!$all_countries && isset($_SESSION["geo"]["data"]["country_id"]) && $_SESSION["geo"]["data"]["country_id"] == $value["country_id"]){
$active = 'active';
}
?>
<a href="<?php echo _link($value["country_alias"]); ?>" class="country-item <?php echo $active; ?>">
<?php echo $ULang->t($value["country_name"]); ?>
</a>
<?php
}
}
?>
</div>
</div>
- Теперь добавим стили для нового компонента. Создадим файл со стилями:
Код:
.country-selector {
margin: 15px 0;
}
.country-list {
display: flex;
flex-wrap: wrap;
gap: 10px;
}
.country-item {
padding: 8px 15px;
border-radius: 4px;
background-color: #f5f5f5;
color: #333;
text-decoration: none;
transition: all 0.3s ease;
}
.country-item:hover {
background-color: #e0e0e0;
text-decoration: none;
}
.country-item.active {
background-color: #007bff;
color: white;
}
/* Мобильная версия */
@media (max-width: 768px) {
.country-list {
flex-direction: column;
}
.country-item {
width: 100%;
text-align: center;
}
}
- Теперь нужно включить наш новый компонент в основной шаблон. Добавим его в header.tpl:
Код:
<!-- Добавляем стили для селектора стран -->
<link rel="stylesheet" href="<?php echo $config["urlPath"]; ?>/templates/css/country_selector.css">
<!-- ... existing code ... -->
<div class="header-wow-sticky" >
<div class="header-wow-sticky-container" >
<?php include 'components/country_selector.tpl'; ?>
<!-- ... rest of the existing code ... -->
Теперь у вас есть полностью рабочий функционал для отображения объявлений из всех стран. Вот что было сделано:
- Добавлен новый параметр all_countries в сессию для отслеживания глобального поиска
- Модифицирован метод queryGeo() для поддержки поиска по всем странам
- Создан новый компонент выбора страны с опцией "ALL COUNTRY"
- Добавлены стили для нового компонента
- Компонент интегрирован в основной шаблон
- Устанавливается флаг $_SESSION["geo"]["all_countries"] = true
- Очищаются текущие гео-данные
- Метод queryGeo() не добавляет географические ограничения в запросы
- Все объявления отображаются без фильтрации по странам