В продолжение темы работы с xPDO.
Я уже довольно долго не использую стандартные сниппеты [[galAlbum]], [[galItem]] и т.п. Блин, реально все заморочено. А кастомный вывод какой-то сделать — это вообще высший пилотаж. Но компонент Gallery использую очень активно, чисто для управления галереями в админке, а вывод галерей пишу сам.
Вот сегодня сделал очередную галерейку и хочу показать листинг сниппет.
<?php
$output = '';
// Получаем все элементы
$q = $modx->newQuery('galItem');
$q->join('galAlbumItem', 'AlbumItems');
$q->where(array(
'AlbumItems.album' => $album,
));
if(!$items = $modx->getCollection('galItem', $q)){
return;
}
// Регистрируем скрипты
$assets_url = $modx->getOption('assets_url', null);
$modx->regClientCSS("{$assets_url}js/lib/colorbox/style/1/colorbox.css");
$modx->regClientStartupScript("{$assets_url}js/lib/colorbox/jquery.colorbox-min.js");
$modx->regClientStartupScript("<script type=\"text/javascript\">
$(document).ready(function(){
//Examples of how to assign the ColorBox event to elements
$('.gallery').colorbox({
rel:'gallery'
,'current': ''
});
});
</script>", true);
// Проходим по каждому элементу и набиваем в шаблоны
$x = 0;
$inRow = 3;
$rowClass = "row flow";
$itemClass = "columns four";
$rowOutput = '';
foreach($items as $item){
$x++;
// print_r($item->toArray());
$item = $modx->getChunk('SiteGalleryItemTpl', array(
'class' => $itemClass,
'title' => $item->get('name'),
'src' => $item->get('absoluteImage'),
));
$rowOutput .= $item;
if($x == $inRow){
$output .= $modx->getChunk('SiteGalleryRowTpl', array(
'class' => $rowClass,
'wrapper' => $rowOutput,
));
$x = 0;
$rowOutput = '';
}
}
return $output;
Чанк SiteGalleryRowTpl
<code><div class="[[+class]]">[[+wrapper]]</div>
<div class="galItem [[+class]]">
<div class="title"><span>[[+title]]</span></div>
<a href="[[+src]]" class="gallery" title="[[+title]]">
<img src="/assets/components/site_gallery/connector.php?action=web/image/gallery/small&src=[[+src]]"/>
</a>
</div>
Как видно, для кастомной галереи не нужно писать много кода.