Достаточно частая задачка для каталога или интернет-магазина: вывести список производителей с подробными описаниями, а так же в подробном описании производителя или бренда вывести все товары, у которых заполнено свойство "Производитель." Расскажу как это сделать
Старый способ
Ранее, я уже писал заметку о том как реализовать данный функционал, посмотреть можно тут: Отсортировать элементы в Битрикс по свойству привязка к разделам
Однако, для его реализации, строго необходимо, что бы у элементов каталога была привязка либо к разделам- либо к элементам другого инфоблока, в котором собственно хранятся производители.
Вести подобный каталог достаточно тяжело, так как нужно постоянно отслеживать наличие привязки товара к элементу/разделу другого инфоблока. Если товаров под несколько тысяч, и они постоянно обновляются из 1С- это становится очень рутинной задачей.
Автоматизируем вывод товаров бренда
Намного практичнее, сделать вывод товаров в описании производителя автоматическим. Из 1С мы выгружаем товары каталога, у которых название производителя обычная строка.
Так же мы создали отдельный инфоблок с производителями, добавили их логотипы, какие-то описания и вывели в отдельном разделе на сайте. Инфоблок каталога и инфоблок производителей ни как между собой не связаны.
"-Но. Я зашел в описание производителя и хотел бы сразу видеть все товары оного" скажет нам посетитель сайта. И мы его поймем и реализуем данный функционал. Причем, все будет работать автоматически без последующего вмешательства. Выгрузилась хоть тысяча новых товаров из 1С, все, они сразу раскидаются по своим производителям.
Рассказываю в видео, для реализации понадобится вот этот кусочек кода
Намного практичнее, сделать вывод товаров в описании производителя автоматическим. Из 1С мы выгружаем товары каталога, у которых название производителя обычная строка.
$brandName = $arResult["NAME"];
$GLOBALS['arrBrandName'] = array("=PROPERTY_ИД_VALUE"=>$brandName);
Видео: вывод товаров бренда в Битрикс
У заметки есть продолжение: Отфильтровать товары бренда и вывести по разделам каталога
Цитата |
---|
Старый способ Ранее, я уже писал заметку о том как реализовать данный функционал, посмотреть можно тут: Отсортировать элементы в Битрикс по свойству привязка к разделам |
Старый способ вроде более подходит внешне, но насколько я понимаю, он не выгружается из 1С.
Может я ошибаюсь, не подскажите, как решить данную задачу?

Цитата |
---|
s.rudko@100systems.com Rudko написал: А реально ли сделать чтобы на странице с брэндами отображался товар (Где свойство фильтруется с типом строка или список), и на детальной странице карточки товара отобразить брэнд из другого инфоблока (Где свойство всегда с типом привязки к элементам инфоблока) и чтобы это все с 1С взаимодействовало автоматически? |
У вас есть инфоблок с каталогом, в котором есть свойство "Бренд", в нем указан производитель (не суть важно, строкой или прявязкой).
Есть инфоблок с брендами, где бренды это элементы и их названия один в один как в элементах каталога.
Что бы на странице бренда вывести все товары, в которых указан этот бренд использовали фильтр
Код |
---|
$GLOBALS['arrFilterBrand'] = array('PROPERTY_ИД_СВОЙСТВА_С_БРЕНДОМ_VALUE' => $arResult["NAME"]); $APPLICATION->IncludeComponent( "bitrix:catalog.section", ..... "FILTER_NAME" => "arrFilterBrand", ..... ); |
Теперь надо, в элементе каталога сделать ссылку на бренд- что бы выводился в нем не зависимо от 1С
В карточке, в нужном месте
Код |
---|
$brandData = CIBlockElement::GetList( array("ID" => "ASC"), array( "IBLOCK_ID" => "14", "NAME" => $arResult['PROPERTIES']['СВОЙСТВО_С_НАЗВАНИЕМ_БРЕНДА']['VALUE'] ), false,false, array( 'NAME', 'DETAIL_PICTURE', 'CODE' ) ); while ($arFieldsBr = $brandData->Fetch()) { $logoPath = CFile::GetPath($arFieldsBr["DETAIL_PICTURE"]); ?> Бренд: <?=$arFieldsBr['NAME']?> <a href="/brands/<?= $arFieldsBr['CODE'] ?>.php"> <img src="<?= $logoPath ?>"/> </a> <? } |
В итоге перелинковали бренды и карточки каталога между собой. Не зависимо от 1С.
Главное, что бы название бренда было написано один в один и в элементе каталога (в свойстве) и в названии бренда в инфоблоке с брендами.
Я хотел задать вопрос, может я не верно понимаю. Я пытаюсь подтянуть прилинкованый БРЭНД по названию из другого инфоблока где БРЭНД - это элемент.
Код |
---|
array("ID" => "ASC"), array( "IBLOCK_ID" => "14", "NAME" => $arResult['PROPERTIES']['СВОЙСТВО_С_НАЗВАНИЕМ_БРЕНДА']['VALUE'] ), |
Вопрос: а где указывается инфоблок где БРЭНД - это элемент, чтобы код понимал откуда ему взять элемент БРЭНДА?

Цитата |
---|
s.rudko@100systems.com Rudko написал: Вопрос: а где указывается инфоблок где БРЭНД - это элемент, чтобы код понимал откуда ему взять элемент БРЭНДА? |
$GLOBALS['arrBrandName'] = array("PROPERTY_133_VALUE"=>"Бренд" ;

Цитата |
---|
Гость написал: Доброго времени суток, фильтрует если прописать бренд в ручную, в чем может быть проблема? $GLOBALS['arrBrandName'] = array("PROPERTY_133_VALUE"=>"Бренд" ; |
Скорее всего, в названии бренда. Проверка идет по строгому совпадению названия.
Скрытый текст | ||
---|---|---|
|

Нужно корректно указать SECTION_ID или SECTION_CODE
распечатай массив из catalog.section что бы узнать точно.
Код |
---|
$this->__component->SetResultCacheKeys(['PARAM']); |

Как минимум ['NAME'] и ['ID'] там уже есть.
А вот если чего-то не хватает (например свойств) но очень надо - да, можно использовать:
Код |
---|
$cp = $this->__component; // объект компонента if (is_object($cp)) { // в arResult component_epilog передадим все отображаемые свойства $cp->SetResultCacheKeys(array( 'DISPLAY_PROPERTIES' ) ); } |