Одна галерея (ms2gallery) для двух языков
Всех с праздником!!!
На блоге появилась задача сделать одну галерею для двух контекстов (языков) то есть что бы можно было добавлять фото только в одном месте а выводить на двух контекстах site.com/ru и site.com/en
структура:
Шаблон списка галерей
чанк GalleryArticle
Шаблон галереи
Сниппет idBabel
Принцип работы: (нужен babel и ms2gallery)
Создаем шаблоны
Создаем категорию для галерей в контексте web и подкатегории в которые добавляем фотографии
Делаем перевод этих ресурсов через babel
Создаем сниппет idBabel который подпихивает id документа из контекста «web» в &resource
В итоге получаем нормальные ссылки типа site.com/ru/gallery/album1 и site.com/en/gallery/album1
и фотографии в них только из одно контекста.
Думаю что есть и другой способ, но этот мне показался наиболее логичным.
Основные плюсы для меня
— использование ms2gallery с его удобством добавлением фотографий, их сортировки итд
— добавление фотографий только в одном месте, так как по сути у меня альбомы что для ru что для en версии одинаковые (за исключением названия альбомов)
Дополнительно в шаблоне использую словари [[%name? &topic=`mylang`]] и вывод нужных полей с условием текущего контекста [[++cultureKey:is=`ru`:then=`это`:else=`или это`]]
Критика в комментах приветствуется!
P.S. Напишите кто как решает подобные задачи
На блоге появилась задача сделать одну галерею для двух контекстов (языков) то есть что бы можно было добавлять фото только в одном месте а выводить на двух контекстах site.com/ru и site.com/en
структура:
-контекст 1
-- галерея
--- альбом 1
--- альбом 2
-контекст 2
-- gallery
--- album 1
--- album 2
Шаблон списка галерей
[[!pdoPage?
&element=`ms2GalleryResources`
&parents=`3`
&tpl=`GalleryArticle`
&includeThumbs=`360x240`
&ajaxMode=`scroll`
&limit=`6`
&sortby={"menuindex":"ASC"}
]]
[[!+page.nav]]
чанк GalleryArticle
<div class="adaptive-item">
<a href="[[+alias]]" class="">
<div class="overlay-album"></div>
<img class="responsive-image" src="[[+360x240:default=`/assets/images/nophoto.jpg`]]" alt="[[+pagetitle]]">
<div class="info-block">
<div class="backshadow"></div>
<div class="info">
<h4>[[++cultureKey:is=`ru`:then=`[[+pagetitle]]`:else=`[[+longtitle]]`]]</h4>
<span>[[dateAgo? &input=`[[*publishedon]]`]]</span>
</div>
</div>
</a>
</div>
Шаблон галереи
[[!pdoPage?
&element=`ms2Gallery`
&resource=`[[!idBabel]]`
&typeOfJoin=`inner`
&includeThumbs=`360x240`
&includeOriginal=`1`
&ajaxMode=`scroll`
&limit=`6`
&tplOuter=`@INLINE [[+rows]]`
&tplRow=`@INLINE
<div class="adaptive-item">
<a href="[[+url]]" class="swipebox">
<div class="overlay-album"></div>
<img class="responsive-image" src="[[+360x240]]" alt="[[+name]]">
</a>
</div>
`
]]
[[!+page.nav]]
Сниппет idBabel
<?php
$babel = $modx->getService('babel','Babel',$modx->getOption('babel.core_path',null,$modx->getOption('core_path').'components/babel/').'model/babel/');
if (empty($resourceId)) {
if (!empty($modx->resource) && is_object($modx->resource)) {
$resourceId = $modx->resource->get('id');
} else {
return;
}
}
$linkedResources = $babel->getLinkedResources($resourceId);
return $linkedResources[web]; //web это контекст из которого достаем id ресурса
Принцип работы: (нужен babel и ms2gallery)
Создаем шаблоны
Создаем категорию для галерей в контексте web и подкатегории в которые добавляем фотографии
Делаем перевод этих ресурсов через babel
Создаем сниппет idBabel который подпихивает id документа из контекста «web» в &resource
В итоге получаем нормальные ссылки типа site.com/ru/gallery/album1 и site.com/en/gallery/album1
и фотографии в них только из одно контекста.
Думаю что есть и другой способ, но этот мне показался наиболее логичным.
Основные плюсы для меня
— использование ms2gallery с его удобством добавлением фотографий, их сортировки итд
— добавление фотографий только в одном месте, так как по сути у меня альбомы что для ru что для en версии одинаковые (за исключением названия альбомов)
Дополнительно в шаблоне использую словари [[%name? &topic=`mylang`]] и вывод нужных полей с условием текущего контекста [[++cultureKey:is=`ru`:then=`это`:else=`или это`]]
Критика в комментах приветствуется!
P.S. Напишите кто как решает подобные задачи
Комментарии: 4
юзер заполняет картинки только в ru контексте
[[ms2Gallery? &resource=`[[*LanguageLinks:getID]]`]]
в ресурсе ТВха бабела, через свой фильтр получающая id<?php
$input = explode(';', $input);
foreach ($input as $row) {
$tmp = explode(':', $row);
$array[$tmp[0]] = $tmp[1];
}
return $array[ru];
Описания картинок соответственно тоже нужно заполнять в одном месте в определённом формате (ru==Картинка1||en==Picture1)<div class="span2 col-sm-2">
<a href="[[+360x270:default=`[[+url]]`]]" class="thumbnail" data-image="[[+url]]">
<img src="[[+120x90]]" alt="[[+description:getTXT]]" title="[[+name:getTXT]]" width="120" height="90">
</a>
</div>
<?php
$lang = $modx->getOption('cultureKey', null, 'default');
$input = explode('||', $input);
foreach ($input as $row) {
$tmp = explode('==', $row);
if ($tmp[0] == 'web') {$tmp[0] = 'sk';} // язык для стандартного контекста
$array[$tmp[0]] = $tmp[1];
}
return $array[$lang];
Спасибо.
А я что то и не заметил Tv от babel ))) класс!
А я что то и не заметил Tv от babel ))) класс!
Если нужно что бы в eng версии выводились TV или вообще какие либо поля именно из eng ресурсов, например pagetitle который у меня идет и в хлебные крошки и для eng названия альбомов то по решению Ivan Shvindin и парсера Василия я реализовал это так
[[++cultureKey:is=`ru`:then=`[[+pagetitle]]`:else=`[[#[[+tv.babelLanguageLinks:getID]].pagetitle]]`]]
а в самом сниппете getID указал return $array[eng];
То есть получаем из Tv babelLanguageLinks массив вида web:3;eng:13 и вытаскиваем из него 13 после чего подпихиваем в парсер что бы получить нужное поле из этого id
[[++cultureKey:is=`ru`:then=`[[+pagetitle]]`:else=`[[#[[+tv.babelLanguageLinks:getID]].pagetitle]]`]]
а в самом сниппете getID указал return $array[eng];
То есть получаем из Tv babelLanguageLinks массив вида web:3;eng:13 и вытаскиваем из него 13 после чего подпихиваем в парсер что бы получить нужное поле из этого id
В 2019 данный пример не работает. Пытаюсь вывести изображения галерей ресурсов с ms2Gallery. В контексте «web» (русская версия), где есть галереи всё отображается. В контекст «en» сделан перевод средствами Babel и галереи не находятся.
[[!pdoPage?
&element=`ms2GalleryResources`
&resource=`[[!idBabel]]`
&tpl=`GalleryMain`
&includeThumbs=`big`
&includeTVs=`colorpicker, exh_date`
&sortby={"menuindex":"ASC"}
&ajaxMode=`ajax`
&showLog=`1`
&limit=`0`
&ajaxTplMore=`@INLINE <button class="btn btn-brown btn-more">[[++cultureKey:is=`ru`:then=`Показать еще`:else=`Show more`]]</button>`
]]
GalleryMain.tpl<div class="slot">
<a href="[[+alias]]" class="">
<div class="overlay-album"></div>
<div class="slot_image">
<img class="responsive-image" src="[[+big]]" alt="[[+pagetitle]]">
</div>
<div class="info-block">
<div class="backshadow" style="background-color:#[[+tv.colorpicker]];"></div>
<div class="info">
<div class="panel-top">
<h4>[[+pagetitle]]</h4>
<span class="date">[[+tv.exh_date]]</span>
</div>
<div class="panel-bottom">
<span class="description">[[+description]]</span>
</div>
</div>
</div>
</a>
</div>
Сниппет тот же. В контексте «en» [[+big]] unknown
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.