1. Сниппет для возможности выбора города со стороны клиента (разработан для небольшого корпоративного сайта). Можно обращаться, как по адресу /spb, так и отправить POST запрос с параметром city.
  2. В зависимости от сессии, в которой хранится город, можно манипулировать любой информацией.
  3. Получаем параметры так: [+site.email+]
  4. Сниппет не имеет цели сделать каждую страницу сайта мультиязычной. Лишь манипулирование информацией на основе выбранного города.

Лучше всего делать города через домены 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.');
← SQL Ошибка: Could not create table... Incorrect table name 'index' 1103Версионность файлов →