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 согласно вашим правилам.
Все.
Благодарствую.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.