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

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

62
30.10.2018

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

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

В файле 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'];
		}
	}

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



Благодарю за внимание! Делитесь вашими замечаниями в комментариях ниже.


P.S. Обращайтесь ко мне за приобретением лицензий и продлений на 1C-Битрикс "Управление сайтом", лицензий на облачную и коробочную версии Битрикс 24 а также за приобретением и внедрением готовых решений на базе 1С-Битрикс от партнеров. За более подробной информацией свяжитесь со мной любым удобным для вас способом


Комментарии

Еще никто не комментировал данную публикацию. Будьте первыми!

Добавить комментарий

captcha

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