Как получить список товаров каталога по ID, с данными о ценах и размерах скидки?

Задача - получить список товаров с заданными свойствами: Хит, Акция, Новинка и т.д.

Использую метод: CIBlockElement::GetList - с выборкой по свойству "PROPERTY_STICKERS_VALUE". Так получаю данные для вывода списка товаров, однако как получить данные с ценами со скидкой, без скидки и размером скидки не представляю.

Метод GetList позволяет получить базовую цену товара, но базовые цены заданы в Евро, а вывести цену товара на сайте необходимо сконвертированную в рублях, со скидкой и указанием её размера.

Как получить группу товаров каталога по ID с данными о ценах с конвертированными в рублях, цен со скидкой и её размерах?
  • Вопрос задан
  • 1010 просмотров
Решения вопроса 1
@voland700 Автор вопроса
Задача решена. Опишу решение, возможно кому-нибудь пригодится.

Изначально, необходимо было вывести на главной странице каталога блок с товарами каталога, по свойству PROPERTY_STICKERS – типа список, которым заданы значения Хит, Советуем, Новинки, Акции для вывода товаров с соответствующими стикерами. При этом товары должны выводится с размером скидок, указанием старой цены, ценой конвертированной из Валюты в рубли.

5ef994cd5227f620637405.jpeg

Методы битрикс CIBlockElement::GetList и CCatalogDiscount::GetList не идеальны для решения данной задачи. По моему мнению целесообразней использовать компонент catalog.section с фильтром по свойству. Для чего в параметрах компонента задан фильтр:
"USE_FILTER" => "Y",
     "FILTER_NAME" => "arrFilterAdvice",


И для получения всех товаров каталога, в которых заданы значения свойству PROPERTY_STICKERS (свойство не пустое) задан фильтр.

<? $GLOBALS['arrFilterAdvice'] = array('ACTIVE' => 'Y', '!PROPERTY_STICKERS' => false);
$APPLICATION->IncludeComponent(
	"bitrix:catalog.section", 
	"shop_window", 
	array(
          …
          "USE_FILTER" => "Y",
          "FILTER_NAME" => "arrFilterAdvice", 
          …


Таким образом получен список товаров которым заданы значения, и уже в файле result_modifier.php сортирую полученные элементы по массивам - Хит, Советуем, Новинки, Акции, добавляю в результатирующий массив $arResult для кеширования.

if(!$arResult["ADVICE"]){
	foreach($arResult["ITEMS"] as $Element){
		foreach($Element["PROPERTIES"]["STICKERS"]["VALUE_XML_ID"] as $type){		
			if($type == "HIT") $arResult["ADVICE"]["HIT"][$Element["ID"]] = $Element;
			if($type == "RECOMMEND") $arResult["ADVICE"]["RECOMMEND"][$Element["ID"]] = $Element;
			if($type == "NEW") $arResult["ADVICE"]["NEW"][$Element["ID"]] = $Element;
			if($type == "STOCK") $arResult["ADVICE"]["STOCK"][$Element["ID"]] = $Element;
		}
	}
}


Полученные данные вывожу в шаблоне компонента catalog.section в виде табов.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
alexyarik
@alexyarik
Битрикс разработчик
Используйте CCatalogDiscount::GetList и объединяйте полученный массив ID убирая значения, которых нет в вашей выборке CIBlockElement::GetList - с выборкой по свойству "PROPERTY_STICKERS_VALUE".
$dbProductDiscounts = CCatalogDiscount::GetList(
	    array("SORT" => "ASC"),
	    array("ACTIVE" => "Y"),
	    false,
	    false,
	    array("ID", "PRODUCT_ID")
	    );
	while ($arProductDiscounts = $dbProductDiscounts->Fetch()) {
		$akcii_arr[] = $arProductDiscounts["PRODUCT_ID"];
	}
	foreach($akcii_arr as $ID) {
    	$akcii_arr_[] = $ID;
	}
	$GLOBALS['arrFilterAkcii'] = array("ID"=>$akcii_arr_);
	?>
	<?$APPLICATION->IncludeComponent("bitrix:catalog.top", "", Array(
		"FILTER_NAME" => "arrFilterAkcii",	// Имя массива со значениями фильтра для фильтрации элементов
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы