Распродажа повторяет комплексный компонент catalog bitrix. Как настроить массив в FILTER_NAME чтобы на распродаже выводлись только товары с скидкой?

В directory root сайта есть 2 папки catalog и sale. В catalog размещён комплексный компонент bitrix - catalog.
index.php из sale подключает через require_once index.php из папки catalog.

В админке bitrix настроены скидки на определённые товары.

Если обращение идёт к папке sale то создаётся массив arrFilter который передаётся в FILTER_NAME компонента каталог.

Вопрос в том что именно нужно передать в $arrFilter чтобы на /sale/ отобразились только товары с действующей скидкой?
  • Вопрос задан
  • 138 просмотров
Решения вопроса 1
nikolaevevge
@nikolaevevge Автор вопроса
Сейчас решил следующим образом, при этом если у Вас есть иное решение - пожалуйста, предлагайте!

require($_SERVER['DOCUMENT_ROOT'].'/local/templates/main/phpscripts/myGetBasketData.php');// класс нужен для получения Id товаров с скидкой
$myGetBasketData = new myGetBasketData;

global $arrFilter;
$arrFilter = array();
$arrFilter["=ID"] = $myGetBasketData->getProductIdDiscontAr();

далее $arrFilter передаём комплексному компоненту bitrix catalog через FILTER_NAME а именно
$APPLICATION->IncludeComponent(
"bitrix:catalog",
"new_catalog",
array(
"FILTER_NAME" => "arrFilter",
...

Метод getProductIdDiscontAr класса myGetBasketData доступен в листинге файла класса myGetBasketData.php по ссылке blog.ivru.net/?id=96

Важно! Метод возвращает массив товаров с скидкой, только тогда, когда скидка создана непосредственно на товар, то есть так как показано на скринсшоте.
5d15f4350ea9c968017210.jpeg

Алгоритм работы метода определения Id товаров с скидкой метода getProductIdDiscontAr() примерно следующий

1) получается список скидок через CSaleDiscount::GetList
2) далее в foreach Id скидок передаются в CSaleDiscount::GetByID
3) у возвращённых данных проверяется наличие и не пустота ключа массива ["CONDITIONS"]
4) если строка есть и не пустая парсятся данные от Equal";s:5:"value";a: до }
5) если такие данные найдены то они множественно парсятся от i: до ;
6) каждое второе значение это и есть Id товара на который действует скидка(эти Id собираются в массив $prodIdAr и возвращаются методом getProductIdDiscontAr)

Таким образом если у Вас скидки указаны не явно на товар а например по свойства, то метод нужно дописывать под такие скидки.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы