Получить информацию о разделе товара в корзине

Достаточно распространенная задача, когда в корзине нужно получить информацию о разделе, в котором размещается товар, добавленный в корзину. Если у вас каталог товаров без торговых предложений - тут все просто. Но что делать, если в каталог добавляются торговые предложения? Для этого нужно немного модифицировать запрос к базе данных о категории.

Ниже представлен код, который получает информацию о категориях товаров и добавляет их в результирующий массив компонента корзины.

В файле result_modifier.php компонента корзины пишем:

$arProducts = [];
	foreach ($arResult['GRID']['ROWS'] as $arRow)
	{
		$arProducts[$arRow['PRODUCT_ID']] = [];
	}

	if (!empty($arProducts))
	{
		$arSelect = Array("ID", "IBLOCK_ID", "PROPERTY_CML2_LINK", "PROPERTY_CML2_LINK.IBLOCK_SECTION_ID", "IBLOCK_SECTION_ID");
		$arFilter = Array("ID" => array_keys($arProducts));
		$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
		$arSections = array();
		while ($arFields = $res->GetNext())
		{
			if (intval($arFields['PROPERTY_CML2_LINK_IBLOCK_SECTION_ID']) > 0)
			{

				$arSections[$arFields['PROPERTY_CML2_LINK_IBLOCK_SECTION_ID']] = [];
			} else
			{
				$arSections[$arFields['IBLOCK_SECTION_ID']]=[];
			}
			$arProducts[$arFields['ID']] = $arFields;
		}

		if (!empty($arSections))
		{
			$SectFilter = Array('ID' => array_keys($arSections),"IBLOCK_ID"=>23);
			$Sect_list = CIBlockSection::GetList(Array("NAME" => "ASC"), $SectFilter, false,
				array('ID','NAME','IBLOCK_ID','IBLOCK_SECTION_ID','SECTION_PAGE_URL'));
			while ($Section = $Sect_list->GetNext())
			{
				$arSections[$Section['ID']] = $Section;
			}

			foreach ($arProducts as $pid=>$arProduct)
			{
				$arProducts[$pid]['SECTION'] = $arSections[(
					intval($arProduct['PROPERTY_CML2_LINK_IBLOCK_SECTION_ID'])>0
				) ? $arProduct['PROPERTY_CML2_LINK_IBLOCK_SECTION_ID'] : $arProduct['IBLOCK_SECTION_ID']];
			}
		}

		foreach ($arResult['GRID']['ROWS'] as $key => $arRow)
		{
			$arIblockElement = $arProducts[$arRow['PRODUCT_ID']];
			$arResult['GRID']['ROWS'][$key]['SECTION'] = $arIblockElement['SECTION'];
		}
	}

Все, дальше в компоненте можно спокойно пользоваться нужными полями - выводить название раздела (вместе со ссылкой).

Количество показов: 2809
30.10.2018

Возврат к списку

Если вам была полезна статья можете отблагодарить автора:
Ethereum:

0x16Df809287333C49D3A237296C6248A6c08702Bc

Разработка сайта

Подайте заявку на разработку сайта на базе готового решения от компании 1С-Битрикс или одного из партнеров компании. Максимально подробно опишите, чему будет посвящен сайт, если это интернет-магазин - что он будет продавать, нужна ли мультиязычность, будут ли разные типы цен (розница, опт, крупный опт), будет ли интеграция с 1С, будет ли выгрузка товаров на различные торговые площадки...

Сопровождение сайта

Вы можете подать заявку на сопровождение вашего сайта на базе 1С-Битрикс. Сопровождение включает в себя: проверка актуальности обновлений сайта, проверка актуальности резервной копии, консультации по сайту. Опишите в заявке, какие еще объемы планируются на сопровождении и на какой срок вы планируете заключить договор на сопровождение - мы подберем подходящий вам бюджет на сопровождение

Работы по сайту

Вы можете подать заявку на выполнение определенного объема работ по сайту. Опишите в заявке объем работ. Это может быть разработка какого-то нового функционала, доработки по имеющемуся функционалу, доработки под требования сео-специалистов. На основании заявки вам будет сформирован бюджет работ, а также названы сроки на выполнение тех или иных работ.