[localizator] Мультиязычность, СЕО, автоперевод...




Языковые версии \ сателиты без контекстов, с автоматическим переводом всех полей ресурса + сео, да еще и автоперевод лексиконов — это я уместил в названии localizator.

Зачем я это сделал: бабeл мне ниразу не подошел, долго я держал один проект на migx «локализации», но слишком он не удобен, собрал все минусы которые успел выявить и решил их в своем компоненте.

Возможности
1. Создание псевдоконтекстов «локализации» (можно вместе работать через site.ru/en/ и ch.site.ru)


2. У ресурса есть таб, где заполняются все стандартные поля ресурса + сео, далее по нажатию кнопки это все можно перевести на другие языки, поле контента пока что поддерживает только tiny mce rte.


3. Для удобства пользования лексиконами есть отдельные таб на странице компонента, где видны только лексиконы компонента. Там же выбор языка. Тут тоже есть автоматизация перевода, одно нажатие кнопки.


Локализация pdoTools
Про работу с pdoResources и pdoMenu не забыл, вот пример:
{'!pdoMenu' | snippet : [
	'parents' => 0,
	'leftJoin' => '{
		"localizator" : {
			"class" : "localizatorContent",
			"alias" : "localizator",
			"on" : "localizator.resource_id = modResource.id"
		}
	}',
	'select' => '{ "localizator" : "modResource.*, localizator.*, modResource.id" }',
        'where' => '{ "localizator.key" : "' ~ ('localizator_key' | option) ~ '"}',
]}
Итого все поля ресурса заменяются на переведенные.

Как использовать
Все поля ресурса подменяются локализированными, кроме content, он выводится через {$_modx->resource.localizator_content}.

Настройки
Для автоматизации перевода нужен api key для яндекс переводчика, получить можно тут: translate.yandex.ru/developers/keys и указать в настройке localizator_key_yandex, так же что бы переводчик понимал с какого языка переводить нужно указать ключ локализации в localizator_default_language

Стоимость
Компонент полностью бесплатен, делал для своего проекта, думаю многим облегчит жизнь.
Отправить свое спасибо можно тут: yasobe.ru/na/localizator или попросить у меня номер карты в лс :)

Демо: localizator.but1head.ru/

Компонент отправил в modstore.pro, исходники на github.com/but1head/localizator
23 апреля 2017, 23:57    but1head   
33    1258 +32

Комментарии (145)

  1. Николай Савин 24 апреля 2017, 00:35 # +1
    Интересное решение. Пока не знаю где применить, но жопой чую уверен, что пригодится и не раз.
    P.S. Ссылка на Git не работает.
    1. Sem 24 апреля 2017, 08:57 # 0
      Автору респект. Теперь мультиязычность сайтов перестанет быть головной болью, с кучей контекстов и дублей ресурсов.
      1. Василий Столейков 24 апреля 2017, 09:35 # +1
        Круто получилось!
        И никаких плагинов, контекстов и дополнительных настроек!
        1. Владимир 24 апреля 2017, 10:28 # 0
          Круто, не терпится попробовать, а на github.com/but1head/localizator — 404
          1. but1head 24 апреля 2017, 12:47 # +2
            Залил на github
            1. Владимир 24 апреля 2017, 13:17 # 0
              Спасибо! И вопрос, если не сильно отвлекаю, на рабочий сайт ставить можно?
              PS По описанию это похоже на Lingua (там тоже поля документа создаются для каждого языка. Очень интересно попробовать и сравнить, и да, сателлиты как раз делаю прямо сейчас, до чего же кстати, если все поойдет)
              1. but1head 24 апреля 2017, 13:22 # +1
                Уже вижу «A MODX's Lexicon switcher for front-end interface.», у меня одной из задач было уйти от лексиконов.
                По поводу полей — создаются только pagetitle, longtitle, menutitle, introtext, description, content, seotitle, keywords, и подменяются если нужно. В настройках можно задать только перевод определенных полей.

                Демо вполне рабочее, только там pdoTools не понимает что главная в /en/ это не / (ссылка), пока не знаю как его обучить, руками в чанке можно поправить.

                На боевой проект в теории можно, я пока перестраиваю свой проект на эту связку.
                1. Владимир 24 апреля 2017, 14:05 # 0
                  кстати, в Lingua
                  Lexicon switcher
                  — это не связано с лексиконами MODX, просто переключает поля в документе в соответствии с выбранным с фронтенда языком.
                  Даже для минишопа пробовал — было «почти» хорошо.
                  1. but1head 25 апреля 2017, 12:52 # +5
                    Перевел dev версию своего проекта, пока полет нормальный. На 11 языков правда долго переводит :)
                    Думаю добавлю в компонент кнопку «перевести все» и чтоб крон обратабывал.



                    Скорость загрузки идентична на всех языках, кэш работает для каждой версии.
                    Разницы в скорости без и с локализатором не заметил.
                    1. Владимир 25 апреля 2017, 12:55 # +2
                      «перевести все» и чтоб крон обратабывал
                      отличная идея!
                      1. Владимир 28 апреля 2017, 12:48 # 0
                        Компонент отправил в modstore.pro
                        — что-то долго не появляется. Будет ли доступен в modstore.pro?
                        1. but1head 28 апреля 2017, 18:25 # +1
                          Давно уже отправил, modstore видимо уехали в Алматы на встречу
                          1. Владимир 28 апреля 2017, 18:26 # 0
                            Точно.
                    2. Игорь Терентьев 25 июня 2017, 16:57 # 0
                      Как правильно прописать base href="{$_modx->config.site_url}" для такого варианта s9732.h8.modhost.pro/en/?
                      Сейчас у меня там выводится только домен.
                2. Алексей Федоров 24 апреля 2017, 15:10 # 0
                  баг с ссылкой на главную, всегда кидает на «голый домен»
                  В случае поддомена — нет проблемы, а с «папочными» вариантами скидывает на оригинальный язык
                  P.S.: Видел для мультиязычности на MODX проект SLI (github), но обновлялся годы назад, плюс идет поверх системы, поэтому экспериментировать с ним не решился. Нативное решение очень радует). Отключенный перевод контента — это супер))
                  1. Николай Загумённов 25 апреля 2017, 00:28 # +1
                    Афигенно! =) Очень часто делал мультиязычные сайты, на 3-4 языках. Это просто идеальное решение, без контекстов! Спасибо автору!
                    1. Константин Ильин 25 апреля 2017, 13:27 # 0
                      Однако опередил) Пишу такой же компонент…
                      1. but1head 29 апреля 2017, 16:08 # +1
                        modstore.pro/packages/utilities/localizator Пакет в модстор
                        1. Ishvan 29 апреля 2017, 19:09 # 0
                          есть сайт site.ru и есть сайт site.com так будет расширение работать?
                          1. but1head 30 апреля 2017, 00:26 # +1
                            Я даже не знаю как ответить на этот вопрос.
                            Делаете 2 псевдоконтекста и все.
                          2. Артём 01 мая 2017, 11:55 # 0
                            спасибо… компонент то что нужно! спасибо
                            1. Oleh 08 мая 2017, 11:37 # 0
                              Спасибо. Про babel можно смело забыть.
                              1. Дмитрий Храмов 30 мая 2017, 16:09 # 0
                                нельзя, к сожалению
                              2. Владимир 10 мая 2017, 22:10 # 0
                                Вообще не понял где брать все эти ключи локализаций…
                                попробовал что то сделать, нажимаю автоматический перевод пишет «Для автоматического перевода необходимо добавить хотя бы одну запись в таблицу»…
                                Что писать в localizator_default_language, ru Russian или Ru ???
                                Чот скудная документация, извините мозги после годовой работы без выходных не пашут, но хотелось бы поподробней информативней как то…
                                1. Viktor 11 июня 2017, 19:41 # 0
                                  тоже долго ковырялся пока не перепробовал все варианты
                                  попробовал что то сделать, нажимаю автоматический перевод пишет «Для автоматического перевода необходимо добавить хотя бы одну запись в таблицу»…
                                  нужно на странице локализатора добавить основной язык (допустим русский) + те, на которые нужно перевести (допустим украинский) и прописать http hosts
                                  Что писать в localizator_default_language, ru Russian или Ru ???
                                  ru

                                  после всего этого нужно на странице ресурса во вкладке локализации (почему не во вкладке «документ» — не знаю) создать «перевод» (еще одна странность вытекающая из первой, так как это не перевод, а основной текст) и заполнить все поля на основном языке, после этого уже можно жать на автоперевод

                                  вопрос создателю: будет ли в будущем возможность перевода любых полей, тв параметров, минишоповских и т.п.?

                                  спасибо за компонент!
                                2. serbeh 17 мая 2017, 12:20 # 0
                                  Восстановите, пожалуйста, демо-сайт.
                                  1. but1head 23 мая 2017, 15:15 # 0
                                    Ввиду того что компонент бесплатный, а хостинг нет, я удалил демку.
                                    Если кто-нибудь задонатит yasobe.ru/na/localizator то демка чудом оживет.
                                    1. but1head 23 мая 2017, 16:47 # 0
                                      Чудо произошло! Скоро верну демку.
                                      1. but1head 23 мая 2017, 18:25 # 0
                                        1. Женёк 24 июня 2017, 12:10 # 0
                                          s9732.h8.modhost.pro/en/category/page-1
                                          При переходе на Main — ведет на ru версию.
                                      2. Дмитрий 24 мая 2017, 16:09 # 0
                                        А можно еще одну, совсем уж нагловатую просьбу?)
                                        Можешь запилить исходники демо-сайта, я имею в виду элементы, тоже на GitHub? Я что-то не хочу быдлокодить, но в упор не понимаю, как можно сделать ссылки в меню. А так залез и смотришь, все что хочешь
                                          1. Дмитрий 24 мая 2017, 16:38 # 0
                                            А, увидел. Спасибо)
                                    2. Дмитрий Храмов 22 мая 2017, 14:47 # 0
                                      yadi.sk/d/VxBlpjwk3JQG2Z
                                      Не знаете почему вот так всё? Без подписей, надписей?
                                      1. but1head 23 мая 2017, 00:49 # 0
                                        Попробуйте переустановить
                                        1. Дмитрий Храмов 23 мая 2017, 20:09 # 0
                                          Ошибка была в том, что по умолчанию язык панели — английский у меня был. Ваш компонент имеет только русскую локализацию — очень неудобно для иностранных разработчиков
                                          1. but1head 23 мая 2017, 23:29 # +1
                                            Не делал перевод кроме русского, можете добавить на гитхаб.
                                      2. Дмитрий 23 мая 2017, 01:28 # 0
                                        Чото я не догнал немного, как включить эту прелесть…
                                        Контексты нужно создавать?
                                        Можно в паре предложений маленький «fast start»?
                                        1. but1head 23 мая 2017, 01:52 # +1
                                          1) создаем локализации (псевдоконтексты)

                                          2) в настройке localizator_default_language указываем ключ основной локализации (у меня это ru, на скрине pt)
                                          3) в настройке localizator_key_yandex указываем апи ключ яндекса, translate.yandex.ru/developers/keys

                                          Конец.
                                          Контент указывается в табе ресурса.
                                          1. Дмитрий 23 мая 2017, 02:22 # 0
                                            Хм, вроде все так и делал. Не хочет на sitename.com/en/ контент отображать, 404 отдает. хоть и настроил вроде все, и перевод ресурса сделал… Ладно, завтра еще попробую. Спасибо!
                                            1. Дмитрий 23 мая 2017, 11:55 # 0
                                              Можно еще подсказку?
                                              1. Вот главная страница. К ней сделана локализация во вкладке.

                                              2. Вот настройки модуля

                                              3. Вот системные настройки


                                              И в итоге — перехожу по адресу sitename.com/en/ — получаю 404.
                                              Где я что пропустил?
                                              1. but1head 23 мая 2017, 14:10 # 0
                                                Пришли доступы modx.pro/users/but1head/, не помню как там через /en/ делать
                                                1. but1head 23 мая 2017, 16:09 # +1
                                                  ****/en/ слэша вконце не хватало
                                          2. Кирилл 23 мая 2017, 17:44 # 0
                                            Отличное расширение! Решил проверить вместе с minishop2. Локализация срабатывает частично http://i.imgur.com/v6ev1X4.png
                                            Пробовал подгружать через {$_modx->lexicon->load('minishop2:default')} — разницы нет.
                                            1. but1head 23 мая 2017, 18:29 # +1
                                              Локализатор грузит свои словари вот так:
                                              $modx->lexicon->load($cultureKey . ':localizator:site');
                                              Следовательно вам надо (возможно синтаксис не правильный)
                                               {$_modx->lexicon->load(('cultureKey' | option) ~ ':minishop2:default')}
                                              
                                              или в плагине\сниппете
                                              $modx->lexicon->load($modx->cultureKey . ':minishop2:default');
                                              А вообще должно было «само», но видимо минишоп грузит словари раньше чем локализатор подменит язык.
                                              1. Кирилл 23 мая 2017, 18:37 # 0
                                                Спасибо! Синтаксис правильный.
                                            2. Дмитрий Храмов 24 мая 2017, 18:25 # 0
                                              Можно ли пользоваться для локализации товаров в minishop2?
                                              Пока чтото не особо выходит(
                                              1. but1head 24 мая 2017, 18:27 # 0
                                                Выше спрашивали про ms2, что у вас не выходит?
                                                Теги товаров \ тв параметры не получится, только костылями
                                                1. Дмитрий Храмов 24 мая 2017, 18:35 # 0
                                                  названия товаров, метатеги, название опций.
                                                  вообще запутался, может посмотрите доступ в админку дам, отблагодарю
                                                  1. but1head 24 мая 2017, 18:37 # +1
                                                    Все инструкции в посте есть, в комментариях тоже
                                              2. Евгений Webinmd 28 мая 2017, 11:28 # 0
                                                Есть небольшой вопрос — уточнение.
                                                Есть 2 языка RU EN
                                                Создал два псевдоконтекста, во вкладке Локализация при добавлении перевода можно выбрать эти оба.
                                                То есть получается что, чтобы создать ресурс с переводом, необходимо заполнить 3 вкладки?
                                                1* Основная (там что в основной вкладке Документ)
                                                2* RU
                                                3* EN

                                                Я правильно понял или есть какие-то тонкости?
                                                1. but1head 28 мая 2017, 16:49 # 0
                                                  У ресурса вам надо заполнить только pagetitle, далее основную локализацию т.е. RU. Потом нажать «автоматический перевод» и переведется на EN. Все.
                                                  1. Евгений Webinmd 28 мая 2017, 16:50 # 0
                                                    Спасибо
                                                2. Дмитрий Храмов 30 мая 2017, 16:01 # -2
                                                  Плагин не работает. Всё сделал по инструкции. Автор попросил 10к за локализацию простенького сайта с тремя товарами из минишопа. Гори в аду, аффтар!
                                                  1. but1head 30 мая 2017, 16:01 # +2
                                                    Ты болен, Дима.
                                                    1. Дмитрий Храмов 30 мая 2017, 16:08 # -2
                                                      да тебе говоришь, ты не понимаешь. за 5 минут бы помог бы, отблагодарил бы, тебе это 5 минут ровно стоит
                                                  2. Murashkin 02 июня 2017, 16:28 # 0
                                                    Здравствуйте. Подскажите, подойдет ли данное решениедля моего проекта. Будет сайт на 5 регионов на поддоменах типа site.ru, kazan.site.ru, spb.site.ru, nn.site.ru, ekb.site.ru. Все поддомены реализованы в одной админке на контекстах.
                                                    И у каждого такого сайта 2 языка будет. На контекстах уже не получится, насколько я понимаю, т.к. их функции заняты. Ваше решение, кажется, то, что нужно. Только еще 2 моментна не понял:
                                                    1)может ли одна страница быть на 2х языках, но иметь разный темплейт?
                                                    2)не очень понял про автоматический перевод. Обязательно ли его подключать и использовать? Можно ли заполнять pagetitle, longtitle и т.п. вручную? Потому что в будущем, возможно, будет китайский язык добавлен, и нет уверенности, что яндекс переводчик нормально переведет.
                                                    1. but1head 02 июня 2017, 16:40 # +1
                                                      Подойдет, возможно нужно будет переписать плагин, но если сделали свитч на контекстах тут тоже разберетесь.
                                                      1) Да, в плагине можно проверять $modx->localizator_key и от него менять шаблон, смотрите плагин
                                                      2) Можно вручную

                                                      Свои контексты можете удалять (хотя локализатор для одного контента сделан, т.е. разделение новостей не предусмотрено, с другой стороны если новость не переведена на псевдоконтекст то она не выводится и выдает 404).

                                                      Псевдоконтексты вам нужны такие:
                                                      http_host: site.ru, ключ языка: ru
                                                      http_host: site.ru/en/, ключ языка: en
                                                      http_host: spb.site.ru, ключ языка: ru
                                                      http_host: spb.site.ru/en/, ключ языка: en
                                                      и т.д., или en.spb.site.ru…

                                                      1. Murashkin 02 июня 2017, 16:49 # 0
                                                        спасибо, попробую разобраться
                                                        1. Aleksandr Huz 19 июня 2017, 17:05 # 0
                                                          У Вас получилось разобраться?
                                                          1. Murashkin 19 июня 2017, 17:13 # 0
                                                            Не пробовал пока, проект еще в процессе прототипирования
                                                    2. serbeh 14 июня 2017, 20:53 # 0
                                                      Расскажите, пожалуйста, где можно подробнее почитать про пространства имён, темы и т.д. в лексиконах?
                                                      У меня настроен Localizator на два языка( RU — domain.com, EN — domain.com/en/)
                                                      Столкнулся с такой проблемой, что при работе с mFilter2 и с выводом списка результатов с ajax кнопкой первая выборка нормально переводится, а после нажатия кнопки «Загрузить ещё» элементы подгружаются не с соответствующими переводами, а просто с плейсхолдерами. И на английской версии сайта(domain.com/en/), если выводить значение {$_modx->config.cultureKey}, то на «первых» результатах правильно выводится «en», а на подгруженных ajax'ом выводится «ru». Видимо при ajax запросе нужно как-то пробрасывать правильный cutureKey, вот только никак не могу понять как и куда…
                                                      1. but1head 14 июня 2017, 20:57 # 0
                                                        как вариант ставить куку lang=en, писать плагин на onhandlerequest где переключать язык на язык из куки. пока что локализатор под msearch2 не подстраивал.

                                                        логика такая, только тут еще запрос именно msearch2 бы выловить.
                                                        <?php
                                                        if($modx->event->name != 'OnHandleRequest') return;
                                                        $lang = $_COOKIE['lang'];
                                                        if(!$lang) return;
                                                        $modx->setOption('cultureKey', $lang);
                                                        1. serbeh 14 июня 2017, 21:00 # 0
                                                          Спасибо, сейчас попробую!
                                                          1. Игорь Терентьев 24 июня 2017, 01:18 # 0
                                                            Ну как, получилось? С такой же проблемой столкнулся.
                                                        2. serbeh 14 июня 2017, 21:00 # 0
                                                          И ещё вспомнил: в domain.com/en/ не выводятся записи из словаря, который заполняется на странице дополнения Localizator, тоже плейсхолдеры. Проверил на слове из словаря в пространстве имён «mSearch2» — выводится перевод. (Это тоже при выводе mFilter2) Везде, кроме mFilter2 — норм.
                                                          Получается и пространство имён нужно как-то подгружать с ajax'ом?
                                                          1. but1head 14 июня 2017, 21:04 # 0
                                                            modx.pro/components/12012-localizator-multilingual-seo-translation/#comment-81194 возможно это поможет, слэш вконце должен быть указан
                                                        3. Juli 16 июня 2017, 16:39 # 0
                                                          Добрый день.
                                                          Установила компонент, в настройкак localizator_default_language указала, API ключ яндекс добавила, В Ресурсах Локализацию сделала, но заполненные поля не подтягиваются, надо все вручною, исходя из прочитанного понямаю что должно вроде подтягиваться, в настройках также попыталась указать названия дополнительных полей, чтоб они тоже переводились, но на сайт ничего не выводится. Через en.sitename.com выводит изначальный русский текст, а через sitename.com/en/ выводит ошибку 404
                                                          Если добавить вызовы в чанки, как у вас в изходниках как github, ничего не генерируется код остается кодом.
                                                          Подскажите плиз в чем ошибка и куда копать.
                                                          1. but1head 17 июня 2017, 14:48 # 0
                                                            В вашем случае надо:
                                                            2 «контекста», ru и en. localizator_default_language = ru. У ресурса заполняется ru, нажимаете авто-перевод — получаете en. Смотрите в лог ошибок, там все должно быть написано. Возможно ключ заблокирован (не дает больше 1кк переводить в сутки). Если уж совсем все плохо контакты в профиле.
                                                          2. Aleksandr Huz 17 июня 2017, 11:35 # 0
                                                            Никита, привет!
                                                            Подскажи, пожалуйста, как вывести pdomenu, чтобы срабатывала локализация, без использования fenom?
                                                            1. but1head 17 июня 2017, 14:46 # 0
                                                              В шапке указан пример, переписать все на родной синтаксис, ('localizator_key' | option) заменить на [[++localizator_key]], должно сработать. А лучше включить феном.
                                                            2. Aleksandr Huz 17 июня 2017, 15:06 # 0
                                                              Пишу вот так, ничего не выводиться. Подскажи, пожалуйста, где ошибки?

                                                              	&leftJoin = `{
                                                                      	"localizator" : {
                                                                      		"class" : "localizatorContent",
                                                                      		"alias" : "localizator",
                                                                      		"on" : "[[*localizator.resource_id]] = [[*id]]"
                                                                      	}
                                                                      }`
                                                              	&select = `{ "localizator" : "modResource.*, localizator.*, [[*id]]" }`
                                                                      &where = `{ "[[*localizator.key"]]: "' ~ [[++localizator_key]] ~ '"}`
                                                              
                                                              1. Володя 17 июня 2017, 16:28 # 0
                                                                задайте параметр
                                                                &showLog=`1`
                                                                
                                                                и посмотрите в чем дело. Предполагаю что вот это точно криво
                                                                "on" : "[[*localizator.resource_id]] = [[*id]]"
                                                                
                                                                1. Aleksandr Huz 18 июня 2017, 11:02 # 0
                                                                  Владимир, добрый день!

                                                                  Вызываю так:
                                                                  	&leftJoin = `{
                                                                      		"localizator" : {
                                                                      			"class" : "localizatorContent",
                                                                      			"alias" : "localizator",
                                                                      			"on" : "localizator.resource_id = modResource.id"
                                                                      		}
                                                                  	    }`
                                                                  	    &select = `{ "localizator" : "modResource.*, localizator.*, modResource.id" }`
                                                                          &where = `{ "localizator.key" : "[[++localizator_key]]"}`
                                                                  
                                                                  Лог:
                                                                  "0.0027568: pdoTools loaded
                                                                  0.0000181: xPDO query object created
                                                                  0.0001328: leftJoined localizatorContent as localizator
                                                                  0.0000141: Added selection of localizatorContent: SQL_CALC_FOUND_ROWS modResource.*, localizator.*, modResource.id
                                                                  0.0000219: Processed additional conditions
                                                                  0.0002921: Added where condition: localizator.key=, modResource.parent:IN(0), OR:modResource.id:IN(0), modResource.published=1, modResource.hidemenu=0, modResource.deleted=0, modResource.context_key=web
                                                                  0.0000482: Sorted by modResource.menuindex, ASC
                                                                  0.0001478: SQL prepared "SELECT SQL_CALC_FOUND_ROWS modResource.*, localizator.*, modResource.id FROM `buffalo_modxsite_content` AS `modResource` LEFT JOIN `buffalo_modxlocalizator_content` `localizator` ON localizator.resource_id = modResource.id WHERE  ( `localizator`.`key` = '' AND  ( `modResource`.`parent` IN (0) OR `modResource`.`id` IN (0) )  AND `modResource`.`published` = 1 AND `modResource`.`hidemenu` = 0 AND `modResource`.`deleted` = 0 AND `modResource`.`context_key` = 'web' )  ORDER BY modResource.menuindex ASC "
                                                                  0.0007360: SQL executed
                                                                  0.0000601: Total rows: 0
                                                                  0.0000081: Rows fetched
                                                                  0.0000060: Returning raw data
                                                                  0.0000021: Tree was built
                                                                  0.0043030: Total time
                                                                  6 291 456: Memory usage
                                                                  

                                                                  localizator_key ничего не выводит, заменил на cultureKey, для других языков меню выводит, а вот для ru пусто.
                                                                  1. Дмитрий 18 июня 2017, 15:58 # 0
                                                                    А вы перевод-то страницы создали?
                                                                    1. Aleksandr Huz 19 июня 2017, 15:21 # 0
                                                                      для всех страниц создал переводы.
                                                                      1. Дмитрий 19 июня 2017, 15:25 # 0
                                                                        А вы выбираете страницы в том же языке, для которого создан перевод?
                                                                        1. Aleksandr Huz 19 июня 2017, 17:13 # 0
                                                                          Дмитрий,
                                                                          ситуация такая, что есть 2 контекста для регионов.
                                                                          site.ru
                                                                          site.ru/region/
                                                                          Переключение контекстов сделано по плагину Безумкина bezumkin.ru/sections/tips_and_tricks/2439/

                                                                          Настройка локализации
                                                                          1. but1head 19 июня 2017, 17:15 # +1
                                                                            Господи иисусе. Локализатор замена контекстам, вы еще babel поставьте, чтоб наверняка.
                                                                            1. Aleksandr Huz 19 июня 2017, 17:56 # 0
                                                                              Как локализатор можно использовать, если у тебя для другого региона другая инфа, и она заполнена в migx и tv?
                                                                              1. but1head 19 июня 2017, 18:25 # +1
                                                                                Написать мини сниппет который распарсит json из tv и покажет то что надо.
                                                                2. but1head 17 июня 2017, 16:31 # 0
                                                                  Как-то так
                                                                  	&leftJoin = `{
                                                                  		"localizator" : {
                                                                  			"class" : "localizatorContent",
                                                                  			"alias" : "localizator",
                                                                  			"on" : "localizator.resource_id = modResource.id"
                                                                  		}
                                                                  	}`
                                                                  	&select = `{ "localizator" : "modResource.*, localizator.*, modResource.id" }`
                                                                          &where' = `{ "localizator.key" : "[[++localizator_key]]"}`
                                                                  ]}
                                                                  1. Aleksandr Huz 18 июня 2017, 10:29 # 0
                                                                    У меня только так сработало:
                                                                    	&leftJoin = `{
                                                                        		"localizator" : {
                                                                        			"class" : "localizatorContent",
                                                                        			"alias" : "localizator",
                                                                        			"on" : "localizator.resource_id = modResource.id"
                                                                        		}
                                                                    	    }`
                                                                    	    [[++cultureKey:ne=`ru`:then=`
                                                                    		&select = `{ "localizator" : "modResource.*, localizator.*, modResource.id" }`
                                                                    		&where = `{ "localizator.key" : "[[++cultureKey]]"}`
                                                                    	   `]]
                                                                    
                                                                    [[++localizator_key]] - ничего не выводит
                                                                3. Женёк 23 июня 2017, 19:14 # 0
                                                                  С tv не работает?
                                                                  1. but1head 23 июня 2017, 19:37 # +1
                                                                    Нет, но чуть-чуть магии и плагинов решат любую задачу
                                                                    1. Женёк 23 июня 2017, 19:39 # 0
                                                                      Знаний не хватает(
                                                                      1. Алексей П 04 июля 2017, 22:39 # +1
                                                                        А можно схематично описать как с помощью «магии» можно сделать перевод для tv параметров? Нужно расширять таблицу локализатора? Перевод ведь должен где-то храниться. Или предполагается, что он будет делаться на лету?
                                                                        1. Игорь Терентьев 09 июля 2017, 20:57 # 0
                                                                          Я через MIGX в MIGX сделал. Первый уровень — выбор языка. Список языков подтягивается из компонента.
                                                                          prntscr.com/ftjy5v
                                                                          prntscr.com/ftjxlz
                                                                    2. Bor 25 июня 2017, 16:18 # 0
                                                                      Друзья, поясните, как в итоге выводить контент и как настроить pdomenu))
                                                                      Для контента нашел: {$_modx->resource.localizator_content}, но не понимаю, как это использовать))
                                                                      пока получилось только вывести pagetitle.
                                                                      Дополнение крутое.
                                                                      1. Алексей П 26 июня 2017, 23:26 # 0
                                                                        Тоже не мог вывести контент. Оказалось вся проблема из-за визуального редактора. У меня стоял ckeditor. И содержимое поля просто не сохранялось.
                                                                        С tinymce работает.
                                                                        1. Bor 26 июня 2017, 23:32 # 0
                                                                          А контент в итоге нужно выводить так — [[*content]], в локализованной версии?
                                                                          1. Алексей П 26 июня 2017, 23:37 # +1
                                                                            Нет.
                                                                            {$_modx->resource.localizator_content}
                                                                            Вот так.
                                                                            Проверь, еще должен быть включен fenom для обработки страниц (системные настройки / pdotools)
                                                                            1. Bor 26 июня 2017, 23:41 # 0
                                                                              Спасибо, заработало!
                                                                      2. Алексей П 02 июля 2017, 14:12 # 0
                                                                        У меня вопрос по поводу локализации на поддомене.
                                                                        Создал на хостинге поддомен. В настройках локализатора создал два псевдоконтекста
                                                                        site.ru
                                                                        en.site.ru
                                                                        Перехожу на en.site.ru выдает 500 ошибку
                                                                        Если делать через папку /en/ все работает
                                                                        Как корректно настроить работу через поддомен?
                                                                        1. but1head 02 июля 2017, 16:56 # 0
                                                                          Что в логах?

                                                                          Можете прислать доступ, гляну. Контакты в профиле.
                                                                        2. Алексей П 09 июля 2017, 14:39 # 0
                                                                          Проблема при работе с minishop2
                                                                          При переключении языков почему-то выводятся разные корзины. Т.е. происходит независимое добавление товаров на разных локализациях. Подозреваю, что это связано с тем, что у меня одна из локализаций сделана на поддомене.
                                                                          Как побороть эту проблему?
                                                                          1. Алексей П 09 июля 2017, 16:07 # 0
                                                                            Проблема была в том, что сессии были разные для поддомена и домена.
                                                                            Решение
                                                                            В системной настройке session_cookie_domain указал .site.com
                                                                          2. Борис 09 июля 2017, 22:03 # 0
                                                                            Классный компонент.
                                                                            Подскажите пример, как вывести переведённые поля pagetitle и description у товаров в категории минишопа?

                                                                            1. but1head 09 июля 2017, 22:05 # 0
                                                                              {$_modx->resource.pagetitle}
                                                                              {$_modx->resource.description}

                                                                              Все стандартно, компонент подменяет значения
                                                                              1. Борис 09 июля 2017, 22:26 # 0
                                                                                На странице товара так и делаю, значения подменяются.
                                                                                А как получить их в каталоге товаров, т.е через msProducts?
                                                                                1. but1head 09 июля 2017, 22:34 # +1
                                                                                  В шапке пример для pdomenu, тоже самое для msProducts
                                                                                  1. Борис 09 июля 2017, 22:43 # 0
                                                                                    Спасибо, получилось!
                                                                            2. Игорь Терентьев 11 июля 2017, 21:43 # 0
                                                                              У кого-нибудь получилось сделать чтобы при ajax-пагинации или при фильтрации через mFilter2 сохранялся текущий язык?
                                                                              Этот коммент видел, но у меня не получилось сделать modx.pro/components/12012-localizator-multilingual-seo-translation/#comment-82299
                                                                              1. Игорь Терентьев 11 июля 2017, 22:31 # 0
                                                                                Методом тыка все-таки нашел нужное событие:)
                                                                                Вот такой плагин получился (возможно что-то лишнее):
                                                                                <?php
                                                                                $eventName = $modx->event->name;
                                                                                
                                                                                switch($eventName) {
                                                                                    //case 'OnWebPageInit':
                                                                                        //if ($modx->context->get('key') == 'mgr') {return;}
                                                                                        //$modx->lexicon->load($modx->cultureKey . ':minishop2:default');
                                                                                        //break;
                                                                                    case 'OnParseDocument':
                                                                                        if ($modx->context->get('key') == 'mgr') {return;}
                                                                                        $lang = $_COOKIE['lang'];
                                                                                        if(!$lang) return;
                                                                                        $modx->setOption('cultureKey', $lang);
                                                                                        $modx->lexicon->load($lang . ':minishop2:default');
                                                                                        break;
                                                                                    case 'OnLoadWebDocument':
                                                                                        if ($modx->context->get('key') == 'mgr') {return;}
                                                                                        $value = $modx->getOption('cultureKey');
                                                                                        setcookie("lang", $value, time() + (86400 * 365));
                                                                                        break;
                                                                                }
                                                                                
                                                                                return;
                                                                                
                                                                                1. Klike 01 августа 2017, 14:59 # 0
                                                                                  Ещё при добавлении товара в корзину / изменении количества в корзине, оформление заказа можно такой плагин добавить, чтобы jGrowl сообщения в корректном языке выводились.

                                                                                  <?php
                                                                                  switch ($modx->event->name) {
                                                                                      case 'msOnBeforeAddToCart':
                                                                                      case 'msOnBeforeRemoveFromCart':
                                                                                      case 'msOnBeforeChangeInCart':
                                                                                      case 'msOnSubmitOrder':
                                                                                          $request = $_SERVER['HTTP_REFERER'];
                                                                                          $host = $find = $_SERVER['HTTP_HOST'];
                                                                                          if($request) {
                                                                                          	if(strpos($request, '/') !== false) {
                                                                                          		$request = str_replace($_SERVER['HTTP_ORIGIN'] . '/', '', $request);
                                                                                          		$tmp = explode('/', $request);
                                                                                          		$find = $host . '/' . $tmp[0] . '/';
                                                                                          	} else {
                                                                                          		$find = $host . '/' . $request;
                                                                                          	}
                                                                                          }
                                                                                          $q = $modx->newQuery('localizatorLanguage', array(
                                                                                              array('http_host' => $find),
                                                                                              array('OR:http_host:=' => $host)
                                                                                          ));
                                                                                          $q->select('cultureKey');
                                                                                          $lang = $modx->getValue($q->prepare());
                                                                                          $modx->setOption('cultureKey', $lang);
                                                                                          $modx->lexicon->load($lang . ':minishop2:cart');
                                                                                          break;
                                                                                  }
                                                                                  
                                                                                  1. Игорь Терентьев 01 августа 2017, 16:08 # 0
                                                                                    Спасибо! Этот плагин ведь не работает, если языковые версии сделаны через папки (site.ru/en/)?

                                                                                    Попытался сделать с учетом папок, но тоже не хочет работать…:
                                                                                    <?php
                                                                                    $eventName = $modx->event->name;
                                                                                    
                                                                                    switch($eventName) {
                                                                                        case 'msOnBeforeAddToCart':
                                                                                        case 'msOnBeforeRemoveFromCart':
                                                                                        case 'msOnBeforeChangeInCart':
                                                                                        case 'msOnSubmitOrder':
                                                                                            $http_host = $_SERVER['HTTP_HOST'];
                                                                                            $uri = $_SERVER['REQUEST_URI'];
                                                                                            if(substr($uri, 0, 1)) {
                                                                                                $uri = mb_substr($uri, 1);
                                                                                                $tmp = explode('/', $uri);
                                                                                                if($path = $tmp[0]) {
                                                                                                    $tmp = $modx->getObject('localizatorLanguage', array('http_host:LIKE' => "%/{$path}/"));
                                                                                                    if($tmp == '') {
                                                                                                        $tmp = $modx->getObject('localizatorLanguage', array('http_host:LIKE' => "%{$http_host}"));
                                                                                                    }
                                                                                                }
                                                                                            }
                                                                                            $lang = $tmp->key;
                                                                                            $modx->setOption('cultureKey', $lang);
                                                                                            $modx->lexicon->load($lang . ':minishop2:cart');
                                                                                            break;
                                                                                    }
                                                                                    
                                                                                    return;
                                                                                    
                                                                              2. Игорь Терентьев 15 июля 2017, 13:30 # 0
                                                                                Может есть у кого пример кода, как перенести контент ресурсов в определенную языковую версию.
                                                                                Или как через API создать перевод.
                                                                                1. Игорь Терентьев 15 июля 2017, 13:50 # 0
                                                                                  Может кому пригодится:
                                                                                  <?php
                                                                                  $local = $modx->newObject('localizatorContent');
                                                                                  $local->set('key', 'en');
                                                                                  $local->set('resource_id',35);
                                                                                  $local->set('pagetitle','TEST');
                                                                                  $local->set('content','TEST CONTENT');
                                                                                  $local->set('ative',1);
                                                                                  $local->save();
                                                                                  
                                                                                  Доступные поля можно посмотреть в БД
                                                                                  1. but1head 15 июля 2017, 13:55 # 0
                                                                                    <?php
                                                                                    $lang = 'ru',
                                                                                    $localizator = $modx->getService('localizator');
                                                                                    $resources = $modx->getIterator('modResource');
                                                                                    foreach($resources as $resource) {
                                                                                    	$tmp = $modx->getObject('localizatorContent', array('resource_id' => $resource->id, 'key' => $lang));
                                                                                    	if($tmp) {
                                                                                    		$tmp = $modx->newObject('localizatorContent');
                                                                                    		$tmp->fromArray(array(
                                                                                    			'key' => $lang,
                                                                                    			'resource_id' => $resource->id,
                                                                                    			'active' => 1,
                                                                                    			'pagetitle' => $resource->pagetitle,
                                                                                    			// ...
                                                                                    		));
                                                                                    	} else {
                                                                                    		// обновление если нужно, fromArray или ->set(key, value);
                                                                                    	}
                                                                                    	$tmp->save();
                                                                                    }
                                                                                    ну а потом уже можно вызывать процессор core/components/localizator/processors/mgr/content/translate.class.php
                                                                                    1. Игорь Терентьев 15 июля 2017, 15:06 # 0
                                                                                      Спасибо!
                                                                                      1. Игорь Терентьев 21 июля 2017, 23:07 # 0
                                                                                        Подскажи еще пожалуйста. Правильно запускаю процессор?
                                                                                        <?php
                                                                                        $resources = $modx->getIterator('modResource', array('class_key'=>'msProduct'));
                                                                                        foreach($resources as $resource) {
                                                                                            print $resource->pagetitle;
                                                                                            $processorProps = array(
                                                                                                'resource_id' => $resource->id
                                                                                            );
                                                                                            $otherProps = array(
                                                                                                'processors_path' => $modx->getOption('core_path') . 'components/localizator/processors/'
                                                                                            );
                                                                                            $response = $modx->runProcessor('mgr/content/translate', $processorProps, $otherProps);
                                                                                            return $response->response;
                                                                                        }
                                                                                        
                                                                                        На выходе получаю просто `Array`
                                                                                    2. Алексей П 20 июля 2017, 00:24 # 0
                                                                                      А как можно локализовать пункты фильтра mFilter2?
                                                                                      Для пунктов фильтрации по цвету решил вводить цвета в опции на латинице и потом через словарь выводить перевод.
                                                                                      А как быть с названиями категорий?
                                                                                      1. Игорь Терентьев 20 июля 2017, 00:33 # 0
                                                                                        Примерно так можно (на примере способов оплаты):

                                                                                        {foreach $payments as $payment}
                                                                                            <label class="payment input-parent">
                                                                                                <input type="radio" name="payment" value="{$payment.id}" id="payment_{$payment.id}" {$payment.id == $order.payment ? 'checked' : ''}>
                                                                                                {set $paymentname = 'po_pay_' ~ $payment.name | translit}
                                                                                                {$paymentname | lexicon}
                                                                                                {if $payment.description?}
                                                                                                    {set $paymentdescr = 'po_pay_descr_' ~ $payment.description | translit}
                                                                                                    <small>
                                                                                                        {$paymentdescr | lexicon}
                                                                                                    </small>
                                                                                                {/if}
                                                                                            </label>
                                                                                        {/foreach}
                                                                                        

                                                                                        translit — сниппет транслитерации.
                                                                                        1. Алексей П 20 июля 2017, 01:29 # 0
                                                                                          Получается это нужно категории тоже в словарь загонять?
                                                                                          А подтянуть перевод из локализации никак нельзя? Это же названия родительских ресурсов по сути.
                                                                                          1. Игорь Терентьев 20 июля 2017, 01:33 # 0
                                                                                            Наверное можно приджойнить.
                                                                                            Если как в топике сделать leftJoin, не работает?
                                                                                            У меня просто не было категорий в фильтре…
                                                                                            1. Алексей П 20 июля 2017, 02:10 # 0
                                                                                              У меня там уже идет leftjoin локализатора.
                                                                                              Получается надо сначала приджойнить категории, а потом джойнить к категориям и продуктам локализатор. Так чтоли?
                                                                                              Вызов фильтра:
                                                                                              {'!mFilter2' | snippet : [
                                                                                              	'paginator'=>'pdoPage@wia',
                                                                                              	'class'=>'msProduct',
                                                                                              	'element'=>'msProducts',
                                                                                              	'tplOuter'=>'wia.mFilter2.outer',
                                                                                              	'parents'=>'[[*id]]',
                                                                                              	'tpls'=>'wia.msProducts.row',
                                                                                              	'filters'=>'ms|price:number,
                                                                                              				resource|parent:categories,
                                                                                              				msoption|color:default,
                                                                                              				msoption|size:default',
                                                                                              				
                                                                                              	'tplFilter.outer.ms|price'=>'wia.mFilter2.filter.price.slider',
                                                                                              	'tplFilter.row.ms|price'=>'wia.mFilter2.filter.price.row',
                                                                                              	'tplFilter.outer.msoption|color'=>'wia.mFilter2.filter.outer',
                                                                                              	'tplFilter.row.msoption|color'=>'wia.mFilter2.filter.checkbox.color',
                                                                                              	'tplFilter.outer.msoption|size'=>'wia.mFilter2.filter.outer',
                                                                                              	'tplFilter.row.msoption|size'=>'wia.mFilter2.filter.checkbox',
                                                                                              	'tplFilter.outer.resource|parent'=>'wia.mFilter2.filter.outer',
                                                                                              	'tplFilter.row.resource|parent'=>'wia.mFilter2.filter.checkbox',
                                                                                              
                                                                                              	'includeThumbs'=>'260x237',
                                                                                              
                                                                                              	'sort'=>'id:asc',
                                                                                              	'leftJoin' => '{"localizator" : {"class" : "localizatorContent","alias" : "localizator","on" : "localizator.resource_id = msProduct.id"}}',
                                                                                              	'select' => '{ "localizator" : "msProduct.*, localizator.*, msProduct.id" }',
                                                                                              	'where' => '{ "localizator.key" : "' ~ ('localizator_key' | option) ~ '"}'
                                                                                              	
                                                                                              	
                                                                                              ]}
                                                                                              
                                                                                        2. but1head 20 июля 2017, 04:32 # 0
                                                                                          словари локализатора = родным словарям, вынес для удобства. в mfilter2 пункты добавляются в словари ms2, тут можно добавить в словари локализатора. все хранится в «теме» (или как там она) localizator — frontend.

                                                                                          про категории только джойны
                                                                                          1. Алексей П 22 июля 2017, 00:30 # 0
                                                                                            Так и не разобрался как сделать джойны для категорий в фильтре.
                                                                                            В результате сделал через сниппет. В него передается id категории, а на выходе локализованный pagetitle.
                                                                                            Не знаю насколько это правильное решение, но по крайней мере работает.
                                                                                            1. Алексей П 22 июля 2017, 01:46 # 0
                                                                                              Или еще как вариант через расширение класса mse2FiltersHandler
                                                                                          2. Алексей Яковлев 13 августа 2017, 14:51 # 0
                                                                                            Прошу прощения за уровень вопроса, но не могу разобраться, как сделать «переключатель» языков, те же флажки. Настроил три языка «по папкам», когда ввожу адрес с папкой — локализация выводится как задумано. Создал сниппет getLanguages (как здесь), вызываю его, а на выходе — пустота, и все, что в хтмл после вызова сниппета — отсутствует. Где ошибся, как правильно? За компонент и советы большое спасибо!
                                                                                            1. but1head 13 августа 2017, 15:06 # 0
                                                                                              yadi.sk/i/QddzUsVX3LwnAm
                                                                                              <?php
                                                                                              $output = "<ul>";
                                                                                              $languages = $modx->getIterator('localizatorLanguage', ['active' => 1]);
                                                                                              foreach($languages as $lang) {
                                                                                              	if($lang->key == $modx->localizator_key) continue;
                                                                                              	$url = 'http://' . $lang->http_host . $_SERVER['REQUEST_URI'];
                                                                                              	$output .= "<li><a href=\"{$url}\"><img src=\"assets/template/img/lang/{$lang->key}.svg\"><span>{$lang->name}</span></a></li>";
                                                                                              }
                                                                                              $output .= "</ul>";
                                                                                              return $output;
                                                                                              1. Алексей Яковлев 13 августа 2017, 15:17 # 0
                                                                                                Спасибо, почти работает, но если у меня урл основного языка вида хост.ру, то с адреса хост.ру/en на основной ссылка не возвращает. И на конце ссылки два слэша "//" вместо одного. Как исправить?
                                                                                                1. Игорь Терентьев 13 августа 2017, 16:01 # 0
                                                                                                  Я вот так сделал. Костыль, но работает:

                                                                                                  <base href="{if $_modx->config.cultureKey == 'el'}{$site_url = $_modx->config.site_url}{else}{$site_url = $_modx->config.site_url ~ $_modx->config.cultureKey ~ '/'}{/if}">
                                                                                                  
                                                                                                  el заменить на cultureKey основного языка.

                                                                                                  И уже ниже можно использовать {$site_url} для правильной ссылки на главную.
                                                                                                  1. Алексей Яковлев 13 августа 2017, 16:20 # 0
                                                                                                    Спасибо, но не вполне понял, как пользовать костыль. Полная картина у меня такова: основной язык сайта, в настройках — ru (чтобы «видеть» локализатор). С помощью локализатора созданы языки, основной — en c адресом хост.en, дополнительные с адресом хост.en/ru/ и т.д. При вызове вышеозначенного сниппета я с основного хоста переключаюсь на страницу с нужным языком. Но вот обратно, на аналогичную страницу с основным языком ссылка не ведет. К тому же, при переключении на те языки, что «в папках» (это срабатывает) — в адресной строке множатся косяки: хост.en/ru//fi//ru// и т.д. Как бы справиться?..
                                                                                                    1. Алексей Яковлев 13 августа 2017, 16:49 # 0
                                                                                                      То есть, знал бы синтаксис, поправил бы в сниппете, чтобы для каждого языка в локализаторе брался бы «хост языка» (хост.en, хост.en/ru/ etc...) и на ссылках-«флажках» подставлялся бы http:// + «хост языка» + [[*alias]] текущей страницы.
                                                                                                      Кажется, этого, в моем случае по крайней мере, было бы достаточно… Кодить, вот, не умею, чтоб проверить.
                                                                                                      1. Алексей Яковлев 13 августа 2017, 17:00 # 0
                                                                                                        а, ну вот так вроде получилось:
                                                                                                        <?php
                                                                                                        $output = "<div>";
                                                                                                        
                                                                                                        $languages = $modx->getIterator('localizatorLanguage', ['active' => 1]);
                                                                                                        foreach($languages as $lang) {
                                                                                                        	if($lang->key == $modx->localizator_key) continue;
                                                                                                        	$url = 'http://' . $lang->http_host;
                                                                                                        	$output .= "<a href=\"{$url}/[[*alias]].html\"><img src=\"../layout/{$lang->key}-icon.png\" style=\"width:24px\"><span>{$lang->name}</span></a>";
                                                                                                        }
                                                                                                        $output .= "</div>";
                                                                                                        return $output;
                                                                                                        Тоже, правда, костылем выглядит…
                                                                                            2. Hiddenski 21 августа 2017, 19:09 # 0
                                                                                              У кого-нибудь получилось подружить локализатор и msearch2? К babel возвращаться совсем не хочется
                                                                                              1. but1head 21 августа 2017, 19:12 # 0
                                                                                                Что именно подружить?
                                                                                                1. Hiddenski 21 августа 2017, 19:15 # 0
                                                                                                  Ваш модуль и поисковик Василия, больше ничего. Сейчас к сожалению не индексируются слова из таблицы локализатора.
                                                                                                  1. Hiddenski 21 августа 2017, 21:15 # 0
                                                                                                    Напишите сколько это будет стоить. Возьму на заметку
                                                                                                2. Борис 21 августа 2017, 23:49 # 0
                                                                                                  Использую локализатор + минишоп.
                                                                                                  Локализатор меняет значение id товара в форме с кнопкой Купить, поэтому в корзину добавляется другой товар.
                                                                                                  То есть вместо id товара выводится id записи в таблице локализатора.

                                                                                                  Подскажите, как поправить?

                                                                                                  {'msProducts' | snippet : [
                                                                                                  	'limit' => 0,
                                                                                                  	'sortby' => 'menuindex',
                                                                                                  	'leftJoin' => '{
                                                                                                  		"localizator" : {
                                                                                                  			"class" : "localizatorContent",
                                                                                                  			"alias" : "localizator",
                                                                                                  			"on" : "localizator.resource_id = msProduct.id"
                                                                                                  			}
                                                                                                  		}',
                                                                                                  	'select' => '{ "localizator" : "msProduct.id, localizator.*" }',
                                                                                                  	'where' => '{ "localizator.key" : "' ~ ('localizator_key' | option) ~ '"}',
                                                                                                  ]}
                                                                                                  
                                                                                                  1. but1head 21 августа 2017, 23:53 # +2
                                                                                                    'select' => '{ "localizator" : "modResource.*, localizator.*, msProduct.id" }',
                                                                                                    
                                                                                                  2. Николай Загумённов 02 сентября 2017, 12:19 # +2
                                                                                                    Хочу поделиться сниппетом, аналог pdoField, так как я часто пользуюсь pdoField.

                                                                                                    Сниппет getLocalizatorField

                                                                                                    <?php
                                                                                                    $sp = &$scriptProperties;
                                                                                                    
                                                                                                    $resource_id = $modx->getOption('resource_id', $sp, $modx->resource->id);
                                                                                                    $field = $modx->getOption('field', $sp, 'pagetitle');
                                                                                                    $key = $modx->getOption('key', $sp, $modx->getOption('cultureKey'));
                                                                                                    
                                                                                                    $q = $modx->newQuery( "localizatorContent" );
                                                                                                    $q->where( array( "`resource_id` = '" . $resource_id . "'", "`key` = '" . $key . "'" ) );
                                                                                                    $q->select( array( $field ) );
                                                                                                    $s = $q->prepare();  // print $q->toSQL(); die;
                                                                                                    $s->execute();
                                                                                                    $array = $s->fetch(PDO::FETCH_ASSOC);
                                                                                                    $field_value = $array[$field];
                                                                                                    
                                                                                                    return $field_value;
                                                                                                    
                                                                                                    Вызов:

                                                                                                    {'getLocalizatorField' | snippet : [ 
                                                                                                           'resource_id' => 20,
                                                                                                           'field' => 'content'
                                                                                                     ]}
                                                                                                    
                                                                                                    1. Hiddenski 11 сентября 2017, 10:26 # 0
                                                                                                      Этим получится сделать поиск через mSearch2?
                                                                                                      1. but1head 11 сентября 2017, 14:01 # +1
                                                                                                        Сомневаюсь
                                                                                                        1. Hiddenski 11 сентября 2017, 14:02 # 0
                                                                                                          У вас имеется решение? Или может предвидится?
                                                                                                          1. but1head 11 сентября 2017, 14:06 # 0
                                                                                                            Нету. Не предвидится, все исходники на github, вы можете самостоятельно решить эту проблему и поделиться ею с обществом (как я сделал с локализатором). Компонент бесплатный, мне не особо интересно сращивать его с mSearch2 бесплатно, темболее времени на это у меня нет.
                                                                                                            1. Hiddenski 11 сентября 2017, 14:08 # 0
                                                                                                              Какова стоимость? Можно даже примерно
                                                                                                              1. but1head 11 сентября 2017, 14:10 # 0
                                                                                                                темболее времени на это у меня нет.
                                                                                                      2. Алексей П 18 сентября 2017, 23:22 # 0
                                                                                                        Не пойму, как вывести локализованные SEO-теги.
                                                                                                        Пробовал так
                                                                                                        [[*seotitle]]
                                                                                                        Пусто
                                                                                                        Пробовал так
                                                                                                        {$_modx->resource.seotitle}
                                                                                                        Тоже пусто
                                                                                                        1. but1head 18 сентября 2017, 23:25 # 0
                                                                                                          del
                                                                                                          1. Алексей П 18 сентября 2017, 23:27 # 0
                                                                                                            Это что значит?
                                                                                                          2. but1head 18 сентября 2017, 23:32 # +2
                                                                                                            {$_modx->resource.seotitle} — выводит, на демо проверил, все ок.

                                                                                                            <title>{$_modx->resource.seotitle ?: $_modx->resource.longtitle ?: $_modx->resource.pagetitle}</title>
                                                                                                            
                                                                                                            1. Алексей П 18 сентября 2017, 23:38 # 0
                                                                                                              Хм… Мистика. Заработало. Видимо я — рукожоп
                                                                                                              1. Алексей П 18 сентября 2017, 23:39 # 0
                                                                                                                Спасибо)
                                                                                                            Вы должны авторизоваться, чтобы оставлять комментарии.