- Сниппет для возможности выбора города со стороны клиента (разработан для небольшого корпоративного сайта). Можно обращаться, как по адресу /spb, так и отправить POST запрос с параметром city.
- В зависимости от сессии, в которой хранится город, можно манипулировать любой информацией.
- Получаем параметры так: [+site.email+]
- Сниппет не имеет цели сделать каждую страницу сайта мультиязычной. Лишь манипулирование информацией на основе выбранного города.
Лучше всего делать города через домены 3-го уровня. Данный код показан в качестве примера
<?php
$cities = ['msk', 'spb', 'sochi'];
function setCity($cities)
{
$string = $_SERVER["REQUEST_URI"];
$pattern = '/\/([a-zA-Z-_]+).*$/';
$res = preg_match($pattern, $string, $word);
if ($_REQUEST['city'] || $word[1]) {
$city = ($_REQUEST['city']) ? $_REQUEST['city'] : $word[1];
if (!in_array($city, $cities)) {
return false;
}
$_SESSION['city'] = $city;
}
}
function getAttrs($id)
{
$modx =& $GLOBALS['modx'];
return [
'phone' => $modx->getTemplateVar('phone2', '*', $id),
'email' => $modx->getTemplateVar('email-form', '*', $id),
'address' => $modx->getTemplateVar('adres2', '*', $id),
'time' => $modx->getTemplateVar('time2', '*', $id),
'whatsapp' => $modx->getTemplateVar('whatsapp', '*', $id),
'telegram' => $modx->getTemplateVar('telegram', '*', $id)
];
}
setCity($cities);
switch ($_SESSION['city']) {
default:
case $cities[0]:
$city_name = 'Москва';
$attrs = getAttrs(1);
break;
case $cities[1]:
$city_name = 'Санкт-Петербург';
$attrs = getAttrs(9);
break;
case $cities[2]:
$city_name = 'Сочи';
$attrs = getAttrs(11);
break;
}
$modx->toPlaceholders([
'city' => $_SESSION['city'],
'city_name' => $city_name,
'phone' => $attrs['phone']['value'],
'email' => $attrs['email']['value'],
'address' => $attrs['address']['value'],
'time' => $attrs['time']['value'],
'whatsapp' => $attrs['whatsapp']['value'],
'telegram' => $attrs['telegram']['value'],
], 'site.');