pdoTools и Localizator, дружба
        Есть локализация на сайте вида:
pdoTools генерирует ссылки на ресурсы не учитывая этого, что логично.
>>Попытка прописать base приводит к тому, что все стили и картинки отваливаются.
 
Вопрос: Как можно их подружить?!
>>Я себе это представляю, как некий плагин, который бы реагировал бы на изменения локализации.
 
И в зависимости от config.cultureKey, подставляло бы в ссылки сгенерированные pdoTools-ом ключ локали (ru, en, uz).
Вывожу топ меню так:
https://codepen.io/pinocorp/pen/odPmJw?editors=1010
 
При этом есть сниппет который выводит кнопки переключения локализации, может через него что-нибудь сделать?
https://codepen.io/pinocorp/pen/BxOMOO
    
    
                                                                                
            http://celestaclub.ru/en/
pdoTools генерирует ссылки на ресурсы не учитывая этого, что логично.
<a href="produkcziya/">Products</a>>>Приводит к тому, что идет переадресация на главную страницу.>>Попытка прописать base приводит к тому, что все стили и картинки отваливаются.
Вопрос: Как можно их подружить?!
>>Я себе это представляю, как некий плагин, который бы реагировал бы на изменения локализации.
И в зависимости от config.cultureKey, подставляло бы в ссылки сгенерированные pdoTools-ом ключ локали (ru, en, uz).
{$_modx->config.cultureKey} Вывожу топ меню так:
https://codepen.io/pinocorp/pen/odPmJw?editors=1010
При этом есть сниппет который выводит кнопки переключения локализации, может через него что-нибудь сделать?
https://codepen.io/pinocorp/pen/BxOMOO
Комментарии: 17
                Сниппет вывода, панельки переключения языков.
                    <?php
$output = "";
// определяем есть ли языки через "папки"
$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) {
            $uri = str_replace("{$path}/", "", $uri);
        }
    }
}
$languages = $modx->getIterator('localizatorLanguage');
foreach($languages as $language) {
    if(mb_substr($language->http_host, -1) == '/') {
        $link = $language->http_host . $uri;
    } else {
        $link = $language->http_host . '/' . $uri;
    }
    $langIMG = array(
        'rus' =>'assets/templates/UZVALVE/img/ru_flag.png',
        'eng' =>'assets/templates/UZVALVE/img/en_flag.jpeg',
        'uzb' =>'assets/templates/UZVALVE/img/uz_leng.png'
    );
    $lang = explode("/", $link);
    if($lang[1] == 'uz'){
        $image = $langIMG['uzb'];
    }
    elseif($lang[1] =='en'){
        $image = $langIMG['eng'];
    }
    else{
        $image = $langIMG['rus'];
    }
    $output .= "<li><a href=\"http://{$link}\"><img src=\"{$image}\" alt=\"russian_language\" title=\"{$language->name}\"></a></li>";
}
return $output;            
                Как вывожу topmenu:
                    {'pdoMenu' | snippet : [
	'parents' => 0,
	'level' => 3,
	'templates'=>-6,
	'tplOuter'=>'@INLINE <ul>{$wrapper}</ul>',
	'tpl'=>'@INLINE <li><a href="{$link}">{$menutitle}</a>{$wrapper}</li> ',
	'tplParentRow'=>'@INLINE <li class="main_menu__parent"><a href="{$link}">{$menutitle}</a>{$wrapper}</li>',
	'where' => '{ "localizator.key" : "' ~ ('localizator_key' | option) ~ '"}',
	'select' => '{ "localizator" : "modResource.*, localizator.*, modResource.id" }',
	'leftJoin' => '{
		"localizator" : {
			"class" : "localizatorContent",
			"alias" : "localizator",
			"on" : "localizator.resource_id = modResource.id"
			}
	}']}            
                Вообще, изначально советую внимательно документацию по Localizator почитать, там полно всяких хитрых штук.
А касаемо вопроса ниже.
Функционал вывода меню с языками можно сделать гораздо проще, и даже без сниппета.
А касательно темы, как сделать собственный генератор ссылок. Вообще с помощью PDOTools Localizator очень неплохо генерит URL, вы, видимо, не разобрались с компонентом до конца.
Ну а если нужно прям делать URL на определенные страницы, то могу посоветовать сделать плагин на событие pdoToolsOnFenomInit с таким кодом:
А вызывать это так:
                    А касаемо вопроса ниже.
Функционал вывода меню с языками можно сделать гораздо проще, и даже без сниппета.
//Делаем массив на Fenom типа такого: 
{var $langs = [
	'en' => [
		'img' => 'assets/templates/UZVALVE/img/en_flag.jpeg',
		'alt' => 'alt text',
		'some properties' => 'some properties 1'
	],
	'ru' => [
		'img' => 'assets/templates/UZVALVE/img/ru_flag.jpeg'
	]
]}
//Далее просто подставляем значение из текущей опции
{var $lang = ('localizator_key' | option)}
<li>
<a href=""><img src="{$langs[$lang['img']]}" alt="{$langs[$lang['alt']]}"></a></li>Ну или типа того. Гораздо понятнее, проще, и универсальнее. А касательно темы, как сделать собственный генератор ссылок. Вообще с помощью PDOTools Localizator очень неплохо генерит URL, вы, видимо, не разобрались с компонентом до конца.
Ну а если нужно прям делать URL на определенные страницы, то могу посоветовать сделать плагин на событие pdoToolsOnFenomInit с таким кодом:
switch ($modx->event->name) {
    case 'pdoToolsOnFenomInit':
        /** @var Fenom $fenom
          Мы получаем переменную $fenom при его первой инициализации и можем вызывать его методы.
          Например, добавим модификатор вывода имени домена сайта из произвольной ссылки.
         */
        $fenom->addModifier('locUrl', function ($input) use ($modx) {
            if ($modx->localizator_key != 'ru') {
                $output = $modx->localizator_key.'/'.$modx->makeUrl($input);
            } else {
                $output = $modx->makeUrl($input);
            }
            return strtolower($output);
        });
        break;
}Где RU — это ваш основной язык. Можно еще удобнее сделать и лучше, но я это так, для примера.А вызывать это так:
<a href="/{'5'|locUrl}">Magazin</a>И будет вам счастье.            
                Спасибо) 
Вы меня явно спасли)
Проблема локализатора в том, что у него нет документации, кроме:
1. Ссылки на гит.
2. Кучи тикетов в разных форумах, и комментов под основным его постом.
Если есть что-то еще, более структурированное, то я буду только рад почитать.
 
                    Вы меня явно спасли)
Проблема локализатора в том, что у него нет документации, кроме:
1. Ссылки на гит.
2. Кучи тикетов в разных форумах, и комментов под основным его постом.
Если есть что-то еще, более структурированное, то я буду только рад почитать.
Вообще с помощью PDOTools Localizator очень неплохо генерит URL, вы, видимо, не разобрались с компонентом до конца.Можете объяснить? Если не сложно.
                С этим не могу сейчас помочь, надо разбираться, вспоминать, извините            
                    
                И на этом спасибо)            
                    
                Я вроде как понял как можно перевести все, кроме значений дополнительных полей и тп. 
Кстати, у меня вопрос насчет доп полей.
Их как лучше переводить?
По аналогии с вашим меню с языками?
Migx(ключи) в migx(значения) и из него декодировать массив?
                    Кстати, у меня вопрос насчет доп полей.
Их как лучше переводить?
По аналогии с вашим меню с языками?
Migx(ключи) в migx(значения) и из него декодировать массив?
                А поля… Ну есть вариант делать автоперевод через функционал Яндекс.Переводчика, заложенного в локализатор. 
Или можно делать все поля MIGX, да. Я так делал:
                    Или можно делать все поля MIGX, да. Я так делал:
{if ('localizator_key'|option)!='ru'}
    {var $key = ('localizator_key'|option)~'_'}
{/if}
<div class="container">
    <div class="row">
        {var $principles = $_modx->resource.principles|fromJSON}
        {foreach $principles as $p}
            <div class="col-xs-12 col-md-4">
                <h3>--{$key~'title'}--</h3>
                <h2>{$p[$key~'title']}</h2>
                <p>{$p[$key~'text']}</p>
            </div>
        {/foreach}
    </div>
</div>Только у меня каждое поле MIGX было en_field и ru_field например            
                Ну я сейчас именно так же пилю, с точно таким же подходом к полям.            
                    
                У меня просто локаль на русском без подставки /ru/
может быть из-за этого я не дружу с ними?
                    может быть из-за этого я не дружу с ними?
                Нет, не обязательно так должно быть. Надо ковыряться, пробовать… У меня несколько сайтов на Localizator'е работают, нормально вполне себе, и ссылки и всё остальное.            
                    
                Может быть с опытом будет и у меня так же)
Это мой первый сайт на модиксе собранный мною с нуля и сразу на fenom и мультиязычный)
                    Это мой первый сайт на модиксе собранный мною с нуля и сразу на fenom и мультиязычный)
                Продолжайте в том же духе и через полгода цены вам не будет))            
                    
                Мой вариант вывода перевода в мигсах
 
Админка:

Вкладка формы(поля контейнера для значений):
Разметка колонок(поле тоже):
                    Админка:

Вкладка формы(поля контейнера для значений):
[
  {
    "caption": "Заголовок",
    "fields": [
      {
        "field": "lang",
        "caption": "Локализация",
        "inputTVtype": "listbox",
        "inputOptionValues": "Русский==ru||English==en||O'zbek==uz"
      },
      {
        "field": "text",
        "caption": "Заголовок",
        "inputTV": "block_menu"
      }
    ]
  }
] Разметка колонок(поле тоже):
[{
  "header": "Локализация",
  "width":"50",
  "dataIndex": "lang"
}] «inputTV»: «block_menu»Подключил доп поле, которое не к какому шаблону не присовил.
                Вывод в моем случае такой:
                    {var $key = $modx->localizator_key}
{set $rows = json_decode(20|resource:'loc_sidebar', true)}
{foreach $rows as $row}
            {if $key == $row.lang}
                {set $vals = json_decode($row.text, true)}
                {foreach $vals as $val}
                    <a href="{$_modx->makeUrl($val.id)}"><img src="{$val.image}" alt=""><span>{$val.text}</span></a>
                {/foreach}
            {/if}
{/foreach}            
                Плагин на OnMODXInit
в нем подгружаете свой класс на основе pdoFetch в котором переопределяете makeUrl
в makeUrl вносите изменения в url согласно вашим правилам.
Все.
                    в нем подгружаете свой класс на основе pdoFetch в котором переопределяете makeUrl
в makeUrl вносите изменения в url согласно вашим правилам.
Все.
                Благодарствую.            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.