Мультиязычность в Modx 2.3.1

Привет всем. Сегодня еле как разобрался с мультиязычность в новом Modx.
В итоге мне помог плагин — bezumkin.ru/sections/tips_and_tricks/2439/
Еще подключил лексиконы, чтобы не мучиться с шаблонами для разных версий языка.

<?php
// Работаем только на фронтенде и только с friendly urls
if ($modx->event->name != 'OnHandleRequest' || $modx->context->key == 'mgr' || !$modx->getOption('friendly_urls')) {return;}

// Получаем запрашиваемый url
$alias = $modx->getOption('request_param_alias', null, 'alias', true);
$request = &$_REQUEST[$alias];

// Выбираем контексты с настройкой base_url
$q = $modx->newQuery('modContextSetting', array('key' => 'base_url', 'value:!=' => ''));
$q->select('context_key,value');

$modx->getService('lexicon','modLexicon');
$modx->lexicon->load('langtext:ru');

$contexts = array();
$tstart = microtime(true);
if ($q->prepare() && $q->stmt->execute()) {
	// Учитываем наш запрос в БД
	$modx->queryTime += microtime(true) - $tstart;
	$modx->executedQueries++;
	// Разбираем результаты
	while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
		$base_url = trim($row['value'], '/');
		$context = $row['context_key'];
		// Если запрос начинается с base_url какого-то контекста
		if (preg_match('/^('.$base_url.')\//i', $request)) {
			// То переключаемся на этот контекст
			// Web инициализируется в index.php - на него переключаться не нужно
			if ($context != 'web') {
				$modx->switchContext($context);
				$modx->getService('lexicon','modLexicon');
				$modx->lexicon->load('langtext:en');
			}
			// Вырезаем base_url из запроса, чтобы MODX нашел ресурс по uri
			$request = preg_replace('/^'.$base_url.'\//', '', $request);
			// Дело сделано - выходим из цикла
			break;
		}
	}
}
Раньше я для переключения контекстов я пользовался этим кодом:
<?php
$lankey = substr($_SERVER['REQUEST_URI'], 1, 2);
if($modx->context->get('key') != "mgr") {
	switch ($lankey) {
		case 'en':
			$modx->switchContext('en');
			$modx->setOption('cultureKey', 'en');
		break;
		
		default:
			$modx->switchContext('web');
			$modx->setOption('cultureKey', 'ru');
		break;
	}
}
Но что то никак не срабатывало. Может кто знает почему не работает этот маленький плагин?
Или я что то упустил, при создании контекстов.
Николай Загумённов
11 сентября 2014, 14:31
modx.pro
1 988
0
Поблагодарить автора Отправить деньги

Комментарии: 4

Григорий Коленько
11 сентября 2014, 23:31
1
0
Есть потрясающий плагин Lingua. Решает все проблемы из коробки.
    Николай Загумённов
    12 сентября 2014, 19:58
    0
    ОГРОМНЕЙШЕЕ СПАСИБО ЗА КОПМОНЕНТ!!!
    Мучения с контекстами окончены. Аминь!
    adminixi
    29 апреля 2016, 03:02
    0
    Помогите настроить мультиязычность, за вознаграждение.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    4