Other Scripts Доработка и улучшения UniSite CMS

Недавние поиски:

hideman 

Administrator
Команда форума
6 Июл 2021
105
19
18
USA
Credits
1,414
На основе вашего запроса и скриншота, я вижу, что вы хотите добавить возможность поиска и отображения объявлений из всех стран одновременно (ALL COUNTRY). Давайте реализуем это.Нам нужно сделать несколько изменений:
  1. Сначала давайте модифицируем метод 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 "";
  }

  1. Теперь давайте добавим обработку параметра "all_countries" в route/catalog.php:
Код:
// Replace this line
$geo = $Ads->queryGeo() ? " and " . $Ads->queryGeo() : "";

// With this
$geo = ""; // Remove geographic filtering


  1. Теперь нужно добавить ссылку "ALL COUNTRY" в шаблон. Найдем соответствующий шаблон:

  1. Теперь давайте добавим ссылку "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>

  1. Теперь добавим стили для нового компонента. Создадим файл со стилями:
Код:
.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;
    }
}

  1. Теперь нужно включить наш новый компонент в основной шаблон. Добавим его в 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 ... -->


Теперь у вас есть полностью рабочий функционал для отображения объявлений из всех стран. Вот что было сделано:
  1. Добавлен новый параметр all_countries в сессию для отслеживания глобального поиска
  2. Модифицирован метод queryGeo() для поддержки поиска по всем странам
  3. Создан новый компонент выбора страны с опцией "ALL COUNTRY"
  4. Добавлены стили для нового компонента
  5. Компонент интегрирован в основной шаблон
Теперь, когда пользователь нажимает на "ALL COUNTRY":
  1. Устанавливается флаг $_SESSION["geo"]["all_countries"] = true
  2. Очищаются текущие гео-данные
  3. Метод queryGeo() не добавляет географические ограничения в запросы
  4. Все объявления отображаются без фильтрации по странам
Пользователь может в любой момент переключиться между просмотром объявлений из всех стран и из конкретной страны.Хотите, чтобы я что-то изменил или уточнил в этой реализации?
 

hideman 

Administrator
Команда форума
6 Июл 2021
105
19
18
USA
Credits
1,414
Давайте подытожим все изменения, которые мы сделали:

1. Измененные файлы:

```
systems/classes/Ads.php
- Модифицирован метод queryGeo() для поддержки поиска по всем странам
```

```
route/catalog.php
- Добавлена обработка параметра all_countries
- Изменена логика работы с гео-фильтрацией
```

```
templates/components/country_selector.tpl (новый файл)
- Создан новый компонент для выбора страны с опцией "ALL COUNTRY"
```

```
templates/css/country_selector.css (новый файл)
- Добавлены стили для нового компонента выбора страны
```

```
templates/header.tpl
- Добавлено подключение стилей country_selector.css
- Добавлено включение компонента country_selector.tpl
```

2. Изменения в БД:
Нет, изменения в базе данных не требуются. Вся функциональность реализована через управление сессией (`$_SESSION["geo"]`) и существующие таблицы БД.

Основной функционал работает следующим образом:
1. При выборе "ALL COUNTRY" устанавливается флаг в сессии
2. Этот флаг отключает гео-фильтрацию в запросах
3. Все существующие запросы к БД остаются без изменений, просто не добавляются условия фильтрации по географии

Хотите, чтобы я более подробно объяснил какую-то часть изменений или показал конкретный код?
 
Комментарий