Одна галерея (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
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
в ресурсе ТВха бабела, через свой фильтр получающая id
Описания картинок соответственно тоже нужно заполнять в одном месте в определённом формате (ru==Картинка1||en==Picture1)
А я что то и не заметил Tv от babel ))) класс!
[[++cultureKey:is=`ru`:then=`[[+pagetitle]]`:else=`[[#[[+tv.babelLanguageLinks:getID]].pagetitle]]`]]
а в самом сниппете getID указал return $array[eng];
То есть получаем из Tv babelLanguageLinks массив вида web:3;eng:13 и вытаскиваем из него 13 после чего подпихиваем в парсер что бы получить нужное поле из этого id
GalleryMain.tpl
Сниппет тот же. В контексте «en» [[+big]] unknown