Всем привет! Столкнулся со следующей проблемой, цена товара в магазине меняется в зависимости от покупаемого количества товаров т.е. от 0 до 29 единиц - 100 рублей от 30 до 100 единиц - 80 рублей, больше 100 единиц товара 70 рублей. Такое ранжирование не очень симпатично смотреось в каталоге, выводили дубли товаров. чтобы решить данную проблему я сначала кастомизировал шаблон компонента catalog.section. При выводе создал пустой массив , в фориче проверяю если ID элемента есть в массиве - пропускаю, если нет, то добавляю ID в массив и вывожу элемент на страницу. В результате - кривой вывод , т.е. товары и постраничная навигация не согласуются. На первой странице может быть 5 товаров, на второй 3, хотя всё можно было вывести в рамках одной страницы (в настройках компонента параметр "Количество элементов на странице" равен 12). Затем кастомизировал компонент, чтобы отфильтровать дубли на этапе формирования массива $arResult. В файле кастомного компонента примерно в 520 строке есть функция получающая список элементов каталога :
| Код |
|---|
$rsElements = CIBlockElement::GetList($arSort, array_merge($arrFilter, $arFilter), false, $arNavParams, $arSelect); |
ниже идёт цикл, куда я добавил такое же условие как и в шаблоне (в шаблоне естественно это условия убрал) :
| Код |
|---|
while($obElement = $rsElements->GetNextElement())
{
$arItem = $obElement->GetFields();
if(!in_array($arItem["ID"],$UnikalniePozicii)) //Формируем массив уникальных элементов
{ ...формируем arResult... }
}
|
однако ниже есть строка формирующая постраничную навигацию:
| Код |
|---|
$arResult["NAV_STRING"] = $rsElements->GetPageNavStringEx($navComponentObject, $arParams["PAGER_TITLE"], $arParams["PAGER_TEMPLATE"], $arParams["PAGER_SHOW_ALWAYS"]); |
где $rsElements - объекта CDBResult содержащий все элементы выборки, в том числе и дубли. Строить навигацию на основе Не отфильтрованного массива, а выводить отфильтрованный - не правильно. Я попытался перестроить навигацию следующим образом:
| Код |
|---|
// создадим объект класса CDBResult
$rsDirContent = new CDBResult;
// инициализируем этот объект исходным массивом
$rsDirContent->InitFromArray($arResult["ITEMS"]);
$rsDirContent->NavStart(12);
$arResult["NAV_STRING_2"] = $rsDirContent->NavPrint("Страницы", false, "text", false); |
, но в $arResult["NAV_STRING_2"] - ничего не приходит. Как переопределить навигацию или как по другому отфильтровать дубли ? Может есть способ отфильтровать по уникальному ID ещё при выборке в :
| Код |
|---|
$rsElements = CIBlockElement::GetList($arSort, array_merge($arrFilter, $arFilter), false, $arNavParams, $arSelect); |
? Подскажите кто сталкивался! Заранее спасибо!