Как в инфоблоке вывести элементы ссылающиеся на инфоблок в 1С Битрикс?
Есть товар. В товаре я добавил атрибут ссылающийся на инфоблок. Инфоблок создал на основе стандартного news. Всё отлично отображается и работает. В товаре есть этот атрибут с ссылкой на элемент инфоблока. Перехожу туда - всё ок. Но теперь мне необходимо на этой странице инфоблока ниже отобразить все товары, у которых мой атрибут соответствует.
Пример:
Товар - Балтика 8ка.
Атрибут: производитель - Балтика.
На странице Балтики надо вывести Балтику 8ку и Балтику 9ку, и т.д.
Я пробовал копать в сторону свойств компонента и там нашёл "выводить материалы по теме", там указал инфоблок с товарами, код свойства ввёл своё написание атрибута т.е. "BREWERIES" но всех товаров так и не увидел.
Пробовал на страницу кинуть компонент "Список связанных элементов", выбираю тип инфоблока, выбираю инфоблок, выбираю свойство в котором хранится связь, и всё равно не выводит мои товары.
Можно поподробнее? Я так и пытался сделать. Но фильтр не смог настроить. Точнее я не смог найти это место где задать соответствие. Я подозреваю что фильтр должен быть "BREWERIES = ELEMENT_ID". Только вот где это указать??
Никита: 1. какой компонент кидать? Я так понял "Контент - Каталог - Каталог". В таком виде он выводит ВСЕ товары.
2. Как прописывается этот фильтр? Я так понял:
$arrFilter[] = array('PROPERTY_BREWERIES'=>'ELEMENT_ID');
$APPLICATION->IncludeComponent(
"bitrix:catalog",
".default",
array(
"IBLOCK_TYPE" => "catalog",
"IBLOCK_ID" => "2",
3. Как мне узнать моё значение, если оно переменное? У меня в товаре свойство имеет тип "Привязка к элементам с автозаполнением". А как они там запоминают какое значение я указал - по ID элемента инфоблока или по CODE его... я думаю всё же ID, поэтому и написал выше то соответствие
Роман Якушев: на странице с производителем выкинуть список элементов каталога, выключить кэш. Если у вас производители из инфоблоков, тогда в фильтре будет $arrFilter[] = array('PROPERTY_BREWERIES'=>$arResult['ID']);
Никита: Чёт не сработало. Компонент кидаю "bitrix.catalor.section". Имя массива со значениями фильтра для фильтрации элементов стоит по умолчанию "arrFilter". всё ок. ПЕРЕД этим компонентом прописал код который вы сказали... и не выдал ничего. Я поставил галку "Показывать все элементы, если не указан раздел", выдал все товары. странности =(
Роман Якушев: если просто надо вывести, можно через news list вывести элементы каталога, там нет заморочек. А вообще и так должно было сработать. Попробуйте для теста другие параметры, например по имени или по цене.
Никита: Я ввёл ID моего элемента инфоблока $arrFilter[] = array('PROPERTY_BREWERIES'=>318); и так сработало. Вопрос - как получить ID инфоблока на котором я в данный момент нахожусь?)
Роман Якушев: $arResult['ID'] - это айди текущего элемента инфоблока, $arParams['IBLOCK_ID'] - это ид инфоблока с вашими производителями. но думаю вам надо первое
а не лучше ли в данном случае использовать компонент каталог, в нем есть вывод связных элементов, ну или в тех же новостях, через апи выдрать связные элементы
Никита: в данном случае используются связные элементы инфоблока, у битрикса есть встроеные функционал для этого, причем это наглядно показано в стандартном компоненте каталога, да там криво, но ничто не мешает подсмотреть реализацию. Можно конечно и фильтром вывести, можно вообще написать result_modifier, но зачем все это, когда уже все придумали за нас?
Igor Karachentsev: вы же читали задачу? Мне необходимо создать раздел пивоварен и установить связи в обе стороны. в сторону от товаров к странице у меня получилось. а в обратную - от странице к товару нет. я про это и спрашивал.
В общем разобрались с Никитой, и он мне подсказал, что необходимо в шаблоне вывода новостей добавить строку указания фильтра
$GLOBALS['arrFilter'] = array('PROPERTY_BREWERIES'=>$arResult['ID']);
и ниже прописать компонент bitrix:catalog.section. в такой связке заработало.