Сергей Сычев 26 октября 2014 0 9
День добрый. Странная ситуация.
Имеется вот такой код в шаблоне


[[!Gallery? &album=`1` &activeCls=`active` &thumbTpl=`NewGalItemThumb` &useCss=`1`]]


И простой шаблон в чанке NewGalItemThumb

 div class="[[+cls]]"
img src="[[+thumbnail]]" alt="[[+name]]"
/div


Если я правильно понимаю документация, то [[+cls]] должно возвращать `active` один раз в самом начале но этого не происходит, а выводит класс по умолчанию "gal-item".

Что самое интересное, позавчера все работало, смог сделать карусель на Бутстрапе, но спустя сутки работать перестало.

Может кто нибудь сталкивался с подобноый ситуацией или может есть какие нибудь мысли ?


9 комментариев
С
Сергей Сычев 26 октября 2014г в 16:27 #
вышел из положения вот такой конструкциеей



[[+name]]

С
Сергей Сычев 26 октября 2014г в 16:28 #
забыл что ваш движок теги хавает и просит еще... повторяю:


div class="[[+id:if=`[[+id]]`:is=`1`:then=`item activ`:else=`item`]]"

img class="[[+imgCls]]" src="[[+thumbnail]]" alt="[[+name]]" /

/div
Fi1osof1
Fi1osof 26 октября 2014г в 16:34 #
забыл что ваш движок теги хавает и просит еще... повторяю:

Да, дойдут руки, подправим. А пока, если что, выкладывайте листинги на гистхаб или типа того.
Fi1osof1
Fi1osof 26 октября 2014г в 16:32 #
А дайте ссылку на документацию, где указано, что можно передавать параметр activeCls. Я его в сниппете Gallery не наблюдаю.
P.S. И хотите иметь полный контроль над Gallery, осваивайте это.
С
Сергей Сычев 26 октября 2014г в 16:34 #
http://rtfm.modx.com/extras/revo/gallery/gallery.gallery


itemCls The CSS class to use for each item. gal-item
activeCls The CSS class to add if the item is the "active" item. gal-item-active
Fi1osof1
Fi1osof 26 октября 2014г в 16:40 #
Что интересно, да, должен учитываться и выводиться. Вот такой код в нем есть:
$highlightItem = $modx->getOption($imageGetParam,$_REQUEST,false);
/** @var galItem $item */
foreach ($data['items'] as $item) {
$itemArray = $item->toArray();
$itemArray['idx'] = $idx;
$itemArray['cls'] = $itemCls;
if ($itemArray['id'] == $highlightItem) {
$itemArray['cls'] .= ' '.$activeCls;
}

Но, как следует из кода, этот класс будет выводиться только тогда, когда указан id элемента в запросе ($_REQUEST). Так что если вы рассчитываете на то, что будет выводиться активный просто при выводе галереи, получается, это не сработает. Ваша конструкция должна больше отвечать поставленной вами цели.
С
Сергей Сычев 26 октября 2014г в 16:36 #
п.с. за ссылку спасибо.

С
Сергей Сычев 27 октября 2014г в 04:23 #
Все же конструкция не подошла, так так как [[+id]] который используется в условиях возвращает порядковый номер картинок в целом а не с начала альбома.

Что бы добиться добавления класса в [[+cls]] к первому элементу пришлось вмешаться в скрипт галереи


$item_id=0; // добавлена переменная
foreach ($data['items'] as $item) {

$itemArray = $item->toArray();
$itemArray['idx'] = $idx;
$itemArray['cls'] = $itemCls;

$item_id++; // увеличиваем
if ($item_id == 1) { // проверяем является ли эллемент первым в массиве
$itemArray['cls'] .= ' '.$activeCls;// добавляем класс
}

if ($itemArray['id'] == $highlightItem) {
$itemArray['cls'] .= ' '.$activeCls;
}


Возникает вопрос, можно было решить задачу как то боле правильно ?

Fi1osof1
Fi1osof 27 октября 2014г в 04:27 #
Можно. Я же писал: хотите иметь полный контроль над Gallery, осваивайте это.
А сниппет Gallery править - не православно. Хотя бы копию его тогда сделайте и творите с ним, что хотите.
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.