Перейти к содержимому


Фотография
- - - - -

сгруппировать item`ы при выводе категории


Лучший Ответ SmetDenis , 20 September 2013 - 09:17

Боюсь что так сделать не получится. По крайней мере в jblayout renderItem()

там всегда рендерится только один конкретный материал и просто по логике никак не сгруппировать.

 

Чтобы сделать то что вы хотите нужно переписывать шаблон

\media\zoo\applications\jbuniversal\templates\catalog\renderer\items\_default.php

 

в переменной $vars['objects'] будет лежать весь набор материалов от текущей категории.

в цикле можно перебрать все материалы, сгруппировать и только после этого с помощью

$this->app->jblayout->renderItem() отрендерить материалы.

Перейти к сообщению


  • Закрытая тема Тема закрыта
В теме одно сообщение

#1 ugroomiy

ugroomiy

Отправлено 17 September 2013 - 13:49

Доброго дня добрые люди.

Помогите в борьбе с проблемой неподвластной моему уму =)

Вопрос к php программистам:

вывод item`ов в категории осуществляется в файле /media/zoo/applications/jbuniversal/framework/helpers/jblayout.php

 

Фрагмент кода:

 

Вот тут мы получаем переменную class, она соответствует типу item`а:

 

 if ($wrapperTag != 'none') {
            $class = array(
                '' . $item->type,
                );
Вот тут формируется сам item и переменная поставляется в айди и в класс будущего дива (в настройках zoo выбрано "обрамить элемент - div контейнер):
 
$htmlItem = '<' . $wrapperTag . ' id ="' . implode(' ', $class) . '" class="' . implode(' ', $class) . '">' . $htmlItem . '</' . $wrapperTag . '>';
        }


        $this->app->jbdebug->mark('jblayout::itemRender (' . $item->id . ')::finish');


        return $htmlItem;
        
    }
 

А вот как быть, если выводится три айтема, два одного типа и один другого, как сделать группировку, чтоб все айтемы одного типа попали внутрь ещё одного обрамляющего дива?

 

Приходит в голову только что-то вроде:

if ($class = 'тут подставить тип') {
$htmlItem = '<div class="123"><' . $wrapperTag . ' id ="' . implode(' ', $class) . '" class="' . implode(' ', $class) . '">' . $htmlItem . '</' . $wrapperTag . '></div>';
        }
        $this->app->jbdebug->mark('jblayout::itemRender (' . $item->id . ')::finish');
        return $htmlItem;
}
elseif ($class = 'тут подставить другой тип') {
ну и так далее

Но поскольку я не программист, то я понимаю. что написанное выше бред =)

А делает оно только одно, все айтемы выводятся в ещё одном диве с классом 123, но не группируются естветсвенно т.к. я не знаю как это сделать.

 

Если вы дочитали до этого места может подскажете куда копать дальше? =)


  • 0

#2 SmetDenis

SmetDenis

Отправлено 20 September 2013 - 09:17   Лучший Ответ

Боюсь что так сделать не получится. По крайней мере в jblayout renderItem()

там всегда рендерится только один конкретный материал и просто по логике никак не сгруппировать.

 

Чтобы сделать то что вы хотите нужно переписывать шаблон

\media\zoo\applications\jbuniversal\templates\catalog\renderer\items\_default.php

 

в переменной $vars['objects'] будет лежать весь набор материалов от текущей категории.

в цикле можно перебрать все материалы, сгруппировать и только после этого с помощью

$this->app->jblayout->renderItem() отрендерить материалы.


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.





Click to return to top of page in style!