Подробная инструкция по внедрению динамического выбора города с выводом в URL
- Подготовьте список городов с падежами
В начало
index.php(или отдельный PHP-файл, который потом подключите черезrequire_once) создайте массив городов с названиями в разных падежах:$cities = [ 'kzn' => [ 'name' => 'Казань', 'imen' => 'Казань', // именительный 'rodit' => 'Казани', // родительный 'dat' => 'Казани', // дательный 'vin' => 'Казань', // винительный 'tvorit' => 'Казанью',// творительный 'predl' => 'Казани', // предложный ], // ... другие города ];Совет: если городов много, храните массив в отдельном файле
/local/include/cities.phpи подключайте черезrequire_onceв начале index.php. - Добавьте обработку города в URL в .htaccess
Для поддержки адресов вида
/kzn/,/msk/и т.д., отредактируйте .htaccess в корне сайта (до правила/bitrix/urlrewrite.php) и добавьте строку:RewriteRule ^([a-z]{3})/?$ /index.php?CITY_CODE=$1 [L,QSA]Это правило передаст трехбуквенный алиас (например, kzn, msk, spb) как параметр
CITY_CODEвindex.php. Для городов с другим алиасом измените регулярку. - Определите выбранный город в PHP-коде
В самом начале index.php (до подключения header.php) напишите:
$cityCode = $_GET['CITY_CODE'] ?? null; // Можно добавить автодетект по IP, куки или сессию if ($cityCode && isset($cities[$cityCode])) { $currentCity = $cities[$cityCode]; // Запоминаем город в сессии или куки $_SESSION['USER_CITY'] = $currentCity['name']; setcookie('USER_CITY', $currentCity['name'], time() + 3600 * 24 * 30, '/'); } else { // Город по умолчанию $currentCity = $cities['kzn']; $cityCode = 'kzn'; }Если пользователь выбирает город через попап, сохраняйте его выбор и читайте значение из куки или сессии.
- Динамически подставляйте город в тайтл, description и контент
После подключения
header.phpиспользуйте:$APPLICATION->SetTitle('Разработка сайтов на Битриксе в ' . $currentCity['predl']); $APPLICATION->SetPageProperty('description', 'Создание сайтов на Битриксе в ' . $currentCity['rodit'] . ' — профессионально и под ключ.');Для вывода города в тексте сайта:
<?php echo 'Разработка сайтов на Битриксе в ' . $currentCity['predl']; ?>Если используете в include-файле, добавьте
global $currentCity, $cityCode;в начале файла. - Используйте динамические изображения и контент под город
Если хотите менять картинку или контент:
<img src="/local/images/cities/<?= $cityCode ?>.jpg" alt="<?= $currentCity['imen'] ?>">Картинки должны быть заранее загружены в
/local/images/cities/и названы по коду города. - Добавьте попап для ручного выбора города (опционально)
Реализуйте попап (например,
/local/include/city_popup.php) и JS, который отправляет выбранный город и делает редирект на нужный алиас:// После выбора города: window.location.href = '/' + selectedCityCode + '/'; - Проверьте работу на всех этапах
- Откройте
/,/kzn/,/msk/— контент должен меняться. - Проверьте работу попапа и смену города.
- Убедитесь, что в <title> и description подставляется правильный город.
- Проверьте подстановку города в тексте и картинках.
- Проверьте, что после смены города выбор сохраняется (куки/сессия).
- Откройте
Возможные улучшения
- Автоматическое определение города по IP (через SypexGeo/SxGeo).
- Централизованный контроллер (
/local/tools/detect_city.php) для работы с выбором города. - Для SEO избегайте дублей страниц — при смене города делайте 301 редирект на нужный URL.
- Если городов много, добавьте поиск и быстрый выбор в попапе.
Пример вывода города
<?php
echo 'Доставка осуществляется по ' . $currentCity['rodit'];
?>