Задача. На сайте 1С-Битрикс необходимо вывести элемент с городом пользователя после «Ваш город:». При клике на город, должно открываться всплывающее окно со списком городов. При выборе города из списка, в элементе «Ваш город:» должен смениться на выбранный. Не сильно кретично, чтобы определялся город точно, главное — вывести города с локацией по умолчанию.
Решение. Создаем файл в папке с темой city_output.php и добавляем в него Код №1:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
<?php $location = \Bitrix\Main\Service\GeoIp\Manager::getGeoPosition(); $cityName = $location['city']['name_ru'] ?: 'Челябинск'; ?> <?php $selectedCity = $_COOKIE['selected_city'] ?? null; if ($selectedCity) { $cityName = htmlspecialchars($selectedCity); } else { $location = \Bitrix\Main\Service\GeoIp\Manager::getGeoPosition(); $cityName = $location['city']['name_ru'] ?: 'Челябинск'; } ?> <div class="city-row"> <div class="city-selector"> <span class="city-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512" width="16" height="16" style="fill: #808080;"><path d="M215.7 499.2C267 435 384 279.4 384 192C384 86 298 0 192 0S0 86 0 192c0 87.4 117 243 168.3 307.2c12.3 15.3 35.1 15.3 47.4 0zM192 128a64 64 0 1 1 0 128 64 64 0 1 1 0-128z"/></svg></span> <span class="city-line">Ваш город: <span class="city-name" onclick="openCityModal()"><?= htmlspecialchars($cityName) ?></span></span> </div> </div> <div id="cityModal" class="city-modal" style="display:none;"> <div class="city-modal-content"> <h3>Выберите ваш город</h3> <ul class="city-list"> <li onclick="selectCity('Волгоград')">Волгоград</li> <li onclick="selectCity('Воронеж')">Воронеж</li> <li onclick="selectCity('Екатеринбург')">Екатеринбург</li> <li onclick="selectCity('Казань')">Казань</li> <li onclick="selectCity('Краснодар')">Краснодар</li> <li onclick="selectCity('Красноярск')">Красноярск</li> <li onclick="selectCity('Москва')">Москва</li> <li onclick="selectCity('Нижний Новгород')">Нижний Новгород</li> <li onclick="selectCity('Новосибирск')">Новосибирск</li> <li onclick="selectCity('Ростов-на-Дону')">Ростов-на-Дону</li> <li onclick="selectCity('Омск')">Омск</li> <li onclick="selectCity('Санкт-Петербург')">Санкт-Петербург</li> <li onclick="selectCity('Пермь')">Пермь</li> <li onclick="selectCity('Уфа')">Уфа</li> <li onclick="selectCity('Челябинск')">Челябинск</li> </ul> <button class="city-modal-close" onclick="closeCityModal()">×</button> </div> </div> <script> function openCityModal() { document.getElementById('cityModal').style.display = 'block'; } function closeCityModal() { document.getElementById('cityModal').style.display = 'none'; } function selectCity(city) { document.querySelector('.city-name').textContent = city; document.cookie = "selected_city=" + encodeURIComponent(city) + "; path=/; max-age=31536000"; closeCityModal(); } </script> <style> .city-row { max-width: 1240px; margin: auto; text-align: right; padding-top: 15px; } @media(max-width: 1270px){ .city-row { padding: 15px; } } @media(max-width: 600px){ .city-row { text-align: center;; } } .city-selector { cursor: pointer; display: inline-block; font-size: 14px; } .city-name { display: inline-block; border-bottom: 1px dashed #b5b5b5; transition: 0.3s; } .city-selector:hover .city-name { border-color: transparent; } .city-modal { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.5); display: flex; justify-content: center; align-items: center; font-size: 1rem; z-index: 9999; } .city-modal-content { position: relative; background: white; padding: 20px; border-radius: 8px; max-width: 500px; margin: 25px auto; } .city-modal-content h3 { margin: 0 0 1rem; } .city-list { list-style: none; padding: 0; } .city-list li { margin: 5px 0; cursor: pointer; } @media(min-width: 601px){ ul.city-list { -webkit-column-count: 2; column-count: 2; } } .city-modal-close { position: absolute; top: 10px; right: 15px; font-size: 24px; font-weight: bold; color: #333; cursor: pointer; background: none; border: none; outline: none; z-index: 10001; transition: 0.3s; } .city-modal-close:hover {transform: rotate(25deg);} </style> |
Подключаем вывод города в необходимый шаблон:
|
1 2 3 |
<?php include($_SERVER["DOCUMENT_ROOT"]."/bitrix/templates/my_theme/city_output.php"); ?> |