Переключение контекстов

Приветствую!

Делаю мультиязычный сайт по данной статье Переключение контекстов мультиязычного сайта

В итоге по 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

В чем может быть проблема?
Кирилл
25 февраля 2016, 12:00
modx.pro
1
10 107
0

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

Григорий Коленько
25 февраля 2016, 15:14
0
Настройки контекстов прописал?
    Кирилл
    25 февраля 2016, 15:23
    0
    да, настройки контекстов такие же, как в статье

    Мне кажется тут с чпу что-то связано. У меня только friendly_urls подключено. Может еще какие настройки нужно подключить?

    htaccess, как я понимаю, трогать не нужно?
      Григорий Коленько
      25 февраля 2016, 16:33
      0
      Если включаешь чпу, то в htaccess раскомментировать пару строчек надо. Я уже не помню что там. У меня свой, но всю инфу можешь найти в официальном мануале modx по поводу чпу
        Кирилл
        25 февраля 2016, 19:30
        0
        С этим разобрался, спасибо. А не подскажешь, как теперь быть с pdoResources?

        Теперь id родительского документа разный в каждом контексте, как выводить меню в одном шаблоне?

        [[pdoResources?
            &parents=`ВОТ ЗДЕСЬ, ЧТО ПРОПИСАТЬ`
            &depth=`0`
            &tpl=`ListRowTpl`
        ]]
          Евгений
          25 февраля 2016, 19:51
          0
          [[++cultureKey:is=`ru`:then=`
          	[[pdoResources?
              	&parents=`parents для русского меню`
          	...
          	]]
          `]]
          [[++cultureKey:is=`en`:then=`
          	[[pdoResources?
              	&parents=`parents для англицкого меню`
          	...
          	]]
          `]]
          … итд
          Как-то так наверно, я так делал, работает
            Кирилл
            25 февраля 2016, 20:17
            0
            Спасибо. Думал, что есть более изящное решение :)
            Наумов Алексей
            25 февраля 2016, 20:41
            0
            Я создавал у каждого контекста свои настройки и использовал их, например [[++articles_section]], [[++catalog_root]], думаю принцип ясен.

            Очень часто хватало [[*parent]] или [[pdoField]] в режиме top или topLevel.
              Кирилл
              25 февраля 2016, 20:57
              0
              Как вариант, спасибо.
              Григорий Коленько
              26 февраля 2016, 01:55
              0
              Бейбл установлен? Если да, то вот, как вариант rtfm.modx.com/extras/revo/babel/babel.babeltranslation
                Наумов Алексей
                26 февраля 2016, 10:40
                0
                Да, поддержку, схема работает :) Пользовался, но код начинает выглядеть наворочено :)
                  Григорий Коленько
                  26 февраля 2016, 12:55
                  2
                  0
                  Да, знаю. У меня для этого есть решение. Во первых мне очень не нравится, что этот сниппет работает через 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`
                                          ]]
                  В результате, ты всегда в плейсхолдере получаешь айди ресурса из текущего контекста. Без лишних запросов
                    Наумов Алексей
                    26 февраля 2016, 14:26
                    0
                    Интересный подход, в копилку.
                      Серый
                      16 марта 2021, 16:50
                      0
                      Коллега, я возможно не правильно применяю ваш код, мне нужно получить массив через запятую ID оригинальных ресурсов. Возможно я по неопытности что-то не так настроил в плагине (я создал плагин и проставил галки OnDocFormRender, OnDocFormSave. Назвал его Babel-Array. Затем сделал сниппет и назвал его getBabelAliasId.
                      Ни [[getBabelAliasId?&input=`15`]] ни [[+id_15]] ничего мне не дают. Что я могу в теории не так делать?
                      Я полагал, что вызывая [[getBabelAliasId?&input=`1, 2, 3`]] получу массив ID переведенных ресурсов (11,12,13), возможно что-то делаю не так?
                      Сам я дизайнер, обратиться особо с этим не к кому((
          Сергей Фещуков
          25 февраля 2016, 20:10
          0
          Ой, там по ссылке всё есть. Извините
            Кирилл
            26 февраля 2016, 15:10
            0
            А как вставить тег в словарь?

            У меня есть текст: Some text
            another text

            Но из словаря так и вставляется с
            как вы в такой ситуации действуете?

            ЗЫ. Через настройки контекста делать не очень удобно
              Григорий Коленько
              26 февраля 2016, 15:12
              0
              Лексиконы же есть. Они обрабатываются в зависимости от cultureKey прописанного в контексте
                Кирилл
                26 февраля 2016, 15:16
                0
                да я через лексиконы и делаю, но если вставить туда тег (в моем случае < бр >) то он так и вставляется как
                text text < бр > text text
                  Владимир
                  26 февраля 2016, 15:26
                  0
                  Смотрите: modx.pro/help/794/#comment-7019 например, разные чанки, в зависимости от контекста
                    Кирилл
                    26 февраля 2016, 15:31
                    0
                    Спасибо, полезно! Но жаль, что всё в разных местах получается. Часть перевода в сниппетах, часть в словарях…
                      Владимир
                      26 февраля 2016, 15:33
                      0
                      Если у вас такой объем текста, что приходится переносы строк вставлять, то в словарь это вряд ли уместно пихать. Мне так кажется
                        Кирилл
                        26 февраля 2016, 15:36
                        +1
                        Да в том то и дело, что одна небольшая строка, но по дизайну переносится на две. Думаю, нужно просто ограничить ширину контейнера. Что тоже не очень хорошо, но что поделать )
                  Кирилл
                  29 февраля 2016, 15:59
                  0
                  Из-за чего могут не срабатывать некоторые лексиконы?
                  есть
                  [[%service_1]]
                  [[%service_2]]
                  [[%service_3]]


                  Срабатывает только [[%service_1]] и [[%service_3]] а [[%service_2]] на английском языке выводится в двух контекстах. В словаре записи разные, проверил уже несколько раз. Такая же ситуация и с копирайтом.
                Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                22