Переключение контекстов
Приветствую!
Делаю мультиязычный сайт по данной статье Переключение контекстов мультиязычного сайта
В итоге по site.ru/en/ получаю
Not Found
The requested URL /en/ was not found on this server.
Friendly URL's включены, кеш почистил, плагин на OnHandleRequest поставил.
MODX Revolution 2.4.2-pl
В чем может быть проблема?
Делаю мультиязычный сайт по данной статье Переключение контекстов мультиязычного сайта
В итоге по site.ru/en/ получаю
Not Found
The requested URL /en/ was not found on this server.
Friendly URL's включены, кеш почистил, плагин на OnHandleRequest поставил.
MODX Revolution 2.4.2-pl
В чем может быть проблема?
Комментарии: 22
Настройки контекстов прописал?
да, настройки контекстов такие же, как в статье
Мне кажется тут с чпу что-то связано. У меня только friendly_urls подключено. Может еще какие настройки нужно подключить?
htaccess, как я понимаю, трогать не нужно?
Мне кажется тут с чпу что-то связано. У меня только friendly_urls подключено. Может еще какие настройки нужно подключить?
htaccess, как я понимаю, трогать не нужно?
Если включаешь чпу, то в htaccess раскомментировать пару строчек надо. Я уже не помню что там. У меня свой, но всю инфу можешь найти в официальном мануале modx по поводу чпу
С этим разобрался, спасибо. А не подскажешь, как теперь быть с pdoResources?
Теперь id родительского документа разный в каждом контексте, как выводить меню в одном шаблоне?
Теперь id родительского документа разный в каждом контексте, как выводить меню в одном шаблоне?
[[pdoResources?
&parents=`ВОТ ЗДЕСЬ, ЧТО ПРОПИСАТЬ`
&depth=`0`
&tpl=`ListRowTpl`
]]
[[++cultureKey:is=`ru`:then=`
[[pdoResources?
&parents=`parents для русского меню`
...
]]
`]]
[[++cultureKey:is=`en`:then=`
[[pdoResources?
&parents=`parents для англицкого меню`
...
]]
`]]
… итдКак-то так наверно, я так делал, работает
Спасибо. Думал, что есть более изящное решение :)
Я создавал у каждого контекста свои настройки и использовал их, например [[++articles_section]], [[++catalog_root]], думаю принцип ясен.
Очень часто хватало [[*parent]] или [[pdoField]] в режиме top или topLevel.
Очень часто хватало [[*parent]] или [[pdoField]] в режиме top или topLevel.
Как вариант, спасибо.
Бейбл установлен? Если да, то вот, как вариант rtfm.modx.com/extras/revo/babel/babel.babeltranslation
Да, поддержку, схема работает :) Пользовался, но код начинает выглядеть наворочено :)
Да, знаю. У меня для этого есть решение. Во первых мне очень не нравится, что этот сниппет работает через TV, поэтому я пишу алиасы ресурсов в properties ресурса. Зачем в бейбл вообще пользуются TV, мне не ясно.
Плагин:
И снипет, который расставляет плейсхолдеры.
Т.е. ты пишешь, к примеру:
Плагин:
<?php
switch ( $modx->event->name ) {
case'OnDocFormRender':
case 'OnDocFormSave':
if ( $mode == 'new' && $modx->event->name == 'OnDocFormRender' ) {
break;
}
$tvVar = $resource->getTVValue( 'babelLanguageLinks' );
//web:92;ru:50
$tvVarArr = explode( ";", $tvVar );
$result = array();
$pagesid = array();
foreach ( $tvVarArr as $v ) {
$tmp = explode( ":", $v );
$result[ $tmp[0] ] = $tmp[1];
$pagesid[] = $tmp[1];
}
if ( $pages = $modx->getCollection( 'modResource', array( "id:IN" => $pagesid ) ) ) {
foreach ( $pages as $page ) {
$page->setProperties( array( "aliases" => $result ), 'babel' );
$page->save();
}
}
break;
}
И снипет, который расставляет плейсхолдеры.
<?php
$ids = explode( ",", $modx->getOption( 'input', $scriptProperties ) );
$context = $modx->getOption( 'context', $scriptProperties, $modx->context->key );
$toPlaceholder = $modx->getOption( 'toPlaceholder', $scriptProperties, true );
if ( count( $ids ) == 1 && $modx->resource == $ids[0] ) {
//если ресурс тот же что нам надо, то кончаем быстро :)
$properties = $modx->resource->getProperties( "babel" );
if ( isset( $toPlaceholder ) ) {
$modx->setPlaceholder( "id_$ids[0]", $properties['aliases'][ $ids[0] ] );
} else {
return $properties;
}
return;
} else {
$pages = $modx->getCollection( "modResource", array(
"id:IN" => $ids
) );
$result = array();
foreach ( $pages as $page ) {
$properties = $page->getProperties( "babel" );
if ( $toPlaceholder ) {
$id = $page->get( "id" );
$result["id_$id"] = $properties['aliases'][ $context ];
} else {
$result[] = $properties['aliases'][ $context ];
}
}
if ( $toPlaceholder ) {
$modx->setPlaceholders( $result );
return;
} else {
return implode( ",", $result );
}
}
return;
Т.е. ты пишешь, к примеру:
[[getBabelAliasId?&input=`15,4`]]
и можешь вызывать сниппет так:[[pdoMenu?
&parents=`[[+id_4]]`
&outerClass=`menu-before-outer`
&tplHere=`menuRowHere`
&tpl=`menuRow`
&includeTVs=`after_menutitle`
&tvPrefix=``
]]
[[pdoMenu?
&parents=`[[+id_15]]`
&outerClass=`menu-main-outer`
&tplHere=`menuRowHere`
&tpl=`menuRow`
]]
В результате, ты всегда в плейсхолдере получаешь айди ресурса из текущего контекста. Без лишних запросов
Интересный подход, в копилку.
Коллега, я возможно не правильно применяю ваш код, мне нужно получить массив через запятую ID оригинальных ресурсов. Возможно я по неопытности что-то не так настроил в плагине (я создал плагин и проставил галки OnDocFormRender, OnDocFormSave. Назвал его Babel-Array. Затем сделал сниппет и назвал его getBabelAliasId.
Ни [[getBabelAliasId?&input=`15`]] ни [[+id_15]] ничего мне не дают. Что я могу в теории не так делать?
Я полагал, что вызывая [[getBabelAliasId?&input=`1, 2, 3`]] получу массив ID переведенных ресурсов (11,12,13), возможно что-то делаю не так?
Сам я дизайнер, обратиться особо с этим не к кому((
Ни [[getBabelAliasId?&input=`15`]] ни [[+id_15]] ничего мне не дают. Что я могу в теории не так делать?
Я полагал, что вызывая [[getBabelAliasId?&input=`1, 2, 3`]] получу массив ID переведенных ресурсов (11,12,13), возможно что-то делаю не так?
Сам я дизайнер, обратиться особо с этим не к кому((
Ой, там по ссылке всё есть. Извините
А как вставить тег в словарь?
У меня есть текст: Some text
another text
Но из словаря так и вставляется с
как вы в такой ситуации действуете?
ЗЫ. Через настройки контекста делать не очень удобно
У меня есть текст: Some text
another text
Но из словаря так и вставляется с
как вы в такой ситуации действуете?
ЗЫ. Через настройки контекста делать не очень удобно
Лексиконы же есть. Они обрабатываются в зависимости от cultureKey прописанного в контексте
да я через лексиконы и делаю, но если вставить туда тег (в моем случае < бр >) то он так и вставляется как
text text < бр > text text
text text < бр > text text
Смотрите: modx.pro/help/794/#comment-7019 например, разные чанки, в зависимости от контекста
Спасибо, полезно! Но жаль, что всё в разных местах получается. Часть перевода в сниппетах, часть в словарях…
Если у вас такой объем текста, что приходится переносы строк вставлять, то в словарь это вряд ли уместно пихать. Мне так кажется
Да в том то и дело, что одна небольшая строка, но по дизайну переносится на две. Думаю, нужно просто ограничить ширину контейнера. Что тоже не очень хорошо, но что поделать )
Из-за чего могут не срабатывать некоторые лексиконы?
есть
Срабатывает только [[%service_1]] и [[%service_3]] а [[%service_2]] на английском языке выводится в двух контекстах. В словаре записи разные, проверил уже несколько раз. Такая же ситуация и с копирайтом.
есть
[[%service_1]]
[[%service_2]]
[[%service_3]]
Срабатывает только [[%service_1]] и [[%service_3]] а [[%service_2]] на английском языке выводится в двух контекстах. В словаре записи разные, проверил уже несколько раз. Такая же ситуация и с копирайтом.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.