Здравствуйте. Есть каталог с товарами. В нём имеются вложенные разделы (2 уровня разделов, 3 уровень - элементы).
Есть страница "новинки" где через catalog.section и кастомный фильтр выводится список всех товаров с активным свойством "новинка". Проблема заключается в том, что отображение товаров - таблица. И у каждой группы (раздела) различаются характеристики, которые необходимо указать в этой таблице.
По этой причине в шаблоне в result_modifier.php Я добавил такой код:
Код
// Выборка разделов каталога
$arFilter = Array('IBLOCK_ID'=>$arParams["IBLOCK_ID"], 'GLOBAL_ACTIVE'=>'Y');
$db_list = CIBlockSection::GetList(Array($by=>$order), $arFilter, true);
while($ar_result = $db_list->GetNext())
{
// Если раздел не пустой, добавляем его в массив arresult
if ($ar_result["ELEMENT_CNT"]>0){
$arResult["SECTIONS"][$ar_result["ID"]] = $ar_result;
}
}
// Сортируем элементы по разделам
foreach ($arResult["ITEMS"] as $arItem){
$arResult["SECTIONS"][$arItem["IBLOCK_SECTION_ID"]]["ITEMS"][] = $arItem;
}
Теперь возникает следующая проблема - что если товаров и разделов будет много? Значит нужна постраничная навигация. Но она нужна как в пределах одной таблицы, так и для самих таблиц.
Без аякса не обойтись. В итоге необходимо получить следующий функуиолнал - последняя строка в каждой таблице содержит ссылку "показать ещё" а после 3 отображаемых таблиц есть кнопка "посмотреть другие категории" которая подгружает новые таблицы.
За основу аяксового режима была взята эта статья без использования доп шаблона сайта (рестартбуффер). В итоге что у меня получилось - задаю в параметрах компонента колличество выводимых элементов. например 2. На странице выводятся 2 таблицы в каждой по 1 элементу. Необходимо это изменить, чтобы параметр отвечал за колличество элементов в каждой таблице. То есть например ставим параметр 2. По умолчанию на странице выводятся 3 таблицы. если для них есть 2 и более элемента, в каждой выводим по 2. остальные, если они есть, подгружаются аяксом. если изначально всего лишь 1, то выводим 1 и не выводим кнопку подгрузки. если после подгрузки осталось 0, тоже убираем кнопку.
Сейчас при щелчке на подгрузку, выводятся все элементы последовательно. не хотят фильтроваться по разделам (таблицам).
Надеюсь понятно написал. Есть у кого нибудь решение данной задачи или ссылки на полезные статьи?
Всем заранее спасибо.
"Ничто не истинно - всё дозволено." Assassin's Creed
Распишу проблему подробнее. В параметрах компонента есть поле PAGE_ELEMENT_COUNT которое отвечает за постраничную навигацию. По этому параметру в компоненте catalog.section идёт выборка элементов в указанном колличестве. При таком подходе всё что можно сделать нормальным способом, это логическую подгрузку элементов. То есть как они идут в списке, так и подгружать. Если в первом разделе 5 элементов, во втором их 2, в третьем 4, и параметр PAGE_ELEMENT_COUNT=3 получаем следующую картину:
Подгружается первый раздел (заголовок) и 3 элемента. при щелчке на кнопку аякса этот раздел дополняется 2 оставшимися элементами, и выводится следующий раздел с названием и первым элементом. При дальнейшем клике на кнопку выводится последний элемент второго раздела и третий раздел с 2 элементами. при последнем клике выводятся 2 оставшихся элемента последнего раздела.
Такой вариант не допустим по многим причинам. Основная из которых - чтобы увидеть, например, 10й раздел (детские игрушки) необходимо будет прощёлкать предыдущие 9, в которых могут быть сотни товаров. Необходимо иметь перед глазами сразу весь список разделов с небольшим колличеством товаров в каждом из них.
Но это мне мешает сделать дебильная нафигация. Единственным вариантом решающим эту проблему может быть вызов в цикле CIBlockElement::GetList что не допустимо с точки зрения нормального кода.
Задать очень большой параметр PAGE_ELEMENT_COUNT - тоже не выход из ситуации.
Нормального решения пока не придумал
"Ничто не истинно - всё дозволено." Assassin's Creed