Слайдер Bootstrap3
Вывод изображений ms2Gallery в типовом слайдере Bootstrap3 с помощью pdoResources.
Вызов на странице
Готовый вызов со стандартным оформлением из примера на сайте Bootstrap3.
<div id="carousel-example-generic" class="carousel slide" data-ride="carousel">
<!-- Indicators -->
<ol class="carousel-indicators">
[[+indicators]]
</ol>
<!-- Wrapper for slides -->
<div class="carousel-inner">
[[!pdoResources?
&class=`msResourceFile`
&loadModels=`ms2gallery`
&sortby=`rank`
&sortdir=`ASC`
&totalVar=`slider.total`
&tplFirst=`@INLINE <div class="item active">
<img src="[[+url]]" alt="">
<div class="carousel-caption">
<h3>[[+name]]</h3>
<p>[[+description]]</p>
</div>
</div>`
&tpl=`@INLINE <div class="item">
<img src="[[+url]]" alt="">
<div class="carousel-caption">
<h3>[[+name]]</h3>
<p>[[+description]]</p>
</div>
</div>`
&where=`{"msResourceFile.resource_id":[[*id]], "msResourceFile.path:LIKE":"%360x270%"}`
]]
</div>
[[!GenerateIndicators?
&input=`[[+slider.total]]`
&toPlaceholder=`indicators`
]]
<!-- Controls -->
<a class="left carousel-control" href="#carousel-example-generic" role="button" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left"></span>
</a>
<a class="right carousel-control" href="#carousel-example-generic" role="button" data-slide="next">
<span class="glyphicon glyphicon-chevron-right"></span>
</a>
</div>
По умолчанию сниппет выводит картинки текущего ресурса в разрешении 360x270, но вы можете указать свои собственные критерии выборки в параметр &where=``:
&where=`{"msResourceFile.resource_id:IN":[1,2,3,4,5]", "msResourceFile.parent":0}`
Это выведет большие картинки из ресурсов с первого по пятый.
Сниппет GenerateIndicators
Сниппет принимает общее количество картинок слайдера и генерирует индикаторы для переключения:
<?php
if (empty($tpl)) {
$tpl = '@INLINE <li data-target="#carousel-example-generic" data-slide-to="[[+idx]]" [[+class]]></li>';
}
if (empty($input)) {
return '';
}
$pdo = $modx->getService('pdoTools');
$output = '';
for ($i = 0; $i < $input; $i++) {
$data = array(
'class' => $i === 0 ? 'class="active"' : '',
'idx' => $i
);
$output .= $pdo->getChunk($tpl, $data);
}
if (!empty($toPlaceholder)) {
$modx->setPlaceholder($toPlaceholder, $output);
}
else {
return $output;
}
Вы можете передавать свои параметры &tpl и &toPlaceholder, если нужно.
Логика работы
pdoResources выводит картинки по заданным условиям и выставляет плейсхолдер с их общим количеством на страницу. Его принимает сниппет GenerateIndicators и генерирует индикаторы для переключения изображений.
Сниппет генерации должен вызываться после pdoResources, чтобы в плейсхолдере [[+slider.total]]
уже было число. А сами индикаторы должны выводиться до изображений, поэтому сниппет выводит их в плейсхолдер [[+indicators]]
.