Не раз приходилось сталкиваться с задачей, когда нужно было вывести свойство инфоблока через 1с-Битрикс API. Рассмотрим такой пример : имеется инфоблок с различными футболками , задача – вывести название футболки и ткань , из которой она сделана.
Инфоблок с футболками имеет ID=5 (рис.1)
и требуется вывести свойство с символьным кодом = «TKAN»(рис.2).
Вот что у меня получилось:
if(CModule::IncludeModule('iblock')) { $arSort= Array("NAME"=>"ASC"); $arSelect = Array("ID","NAME", "PROPERTY_TKAN"); $arFilter = Array("IBLOCK_ID" => 5); $res = CIBlockElement::GetList($arSort, $arFilter, false, false, $arSelect); while($ob = $res->GetNextElement()){ $arFields = $ob->GetFields(); print_r($arFields['NAME']); print_r($arFields['PROPERTY_TKAN_VALUE']); } }
Главный наш помощник в получении результата функция битрикс API — CIBlockElement::GetList.
$arSort — отвечает за сортировку. Значение ‘NAME’ => ‘ASC’ означает сортировать по имени по возрастанию.
$arSelect
— массив возвращаемых полей элемента. В нашем случае доступны:
- ‘ID’
- ‘NAME’
- ‘PROPERTY_ TKAN’
Этот список можно пополнить другими свойствами.
$arFilter
– нужен для фильтрации элементов. $arFilter = Array('IBLOCK_ID'=> 5)
означает, что из всех элементов хранимых в инфоблоках сайта, мы выбираем только те, которые находятся в инфоблоке с ID=5. Этот параметр очень удобен и полезен. Например мы могли добавить такие фильтры:
$arFilter = Array('PROPERTY_ TKAN '=> 'шерсть')
– все элементы, у которых параметр ткань = шерсть.$arFilter = Array('SECTION_ID' => 55)
– все элементы, которые лежат в папке с ID=55.
Осталось лишь вывести информацию. Для этого используем цикл while с функцией GetNextElement()
.И в результате применения функции GetFields()
в массиве $arFields
будут храниться отобранные по фильтру футболки со свойствами, добавленными в массив $arSelect
.
А как вывести значения свойства тип список?
плиз
Здравствуйте, Asasin.
Допустим у вас есть свойство «Цвет» с символьным кодом — «COLOR».
Тогда в массив $arSelect нужно добавить — «PROPERTY_COLOR».
Чтобы вывести значение свойства (например красный ) написать нужно так:
print_r($arFields[PROPERTY_COLOR_VALUE]). Если вам нужно вывести ID красного цвета, то: print_r($arFields[PROPERTY_CAT_ENUM_ID]).
все бы хорошо, но как вывести в меню свойство инфоблока?
Не очень понятно что вы хотите реализовать, можно поподробней?
Скорее всего вам придется кастомизировать компонент меню, используя API функции описанные в статье.
Как странно. Сделал все так же, как на картинках. Тип свойства строка.
Вывожу именно это поле, но при добавлении в строку print_r ($arFields); любого параметра к переменной $arFields ничего не выводится.
В чем может быть проблема?
Кажись разобрался. Типичная ошибка. Работает!
Вот теперь только не пойму как складывать значения поля из нескольких элементов инфоблока. Может подскажете способ?
Здравствуйте, Виктор.
Расскажите подробнее о вашей задаче. лучше с примером.
Доброго времени суток, а подскажите как добавить класс к диву в зависимости от значений свойств, т.е. если у свойства ID=»2″ есть выбранное значение (список) напрbмер ID=»92″, то добавлять класс к div
<div class="novie b-offers-list__item> lf; не знаю как прописать это условие.
Спасибо за помощь
Если у вас не так много значений в списке, то можно статически в шаблоне написать(например символьный код вашего свойства «COLOR»):
<?
if($arFields[PROPERTY_COLOR_ENUM_ID]==92)
{?>
<div class=’novie b-offers-list__item’>
<?
}
?>
еще зависит, от того в каком шаблоне вы будете это применять, возможно $arFields изменится на другой массив.
Здравствуйте.
Стоит задача получить свойства инфоблока и вставить их в определенные места страницы. Благодаря вашей статье у меня это получилось, за что я вам очень благодарен.
Но возник такой косяк, что в блоках (элементах) темы где также выводятся свойства инфоблока, начали выводиться свойства которые я вывожу описанным в статье способом.
Подозреваю, что нужно добавить в if(CModule::IncludeModule(‘iblock’)) условие на ID инфоблока. Подскажите как сделать?
Может у вас имена переменных совпадают, и происходит перекрытие?
Здравствуйте.
А как для конкретного элемента вывести его свойство?
Добавьте в переменную фильтра ID(или CODE) элемента, например вместо $arFilter = Array(«IBLOCK_ID» => 5);
запишите
$arFilter = Array(‘IBLOCK_ID’ => 5, ‘ID’ => 10);
Здравствуйте! Похоже, что ваша статья — половина решения имеющейся задачи. А заключается она в следующем: нужно получить значение свойства элемента инфоблока и передать его в скрытое поле веб-формы, ссылка на заполнение которой должна находится на странице детального просмотра элемента. Подскажите, пожалуйста, в каком направлении двигаться дальше, чтобы реализовать такой функционал?
Здравствуйте, Дмитрий. Как вариант на странице детального просмотра элемента в ссылку добавить get параметр id: http://thisis-blog.ru/forma.php?id=5
а тут forma.php уже получать id и использовать функцию getList c фильтром:
$arFilter = Array(«ID» => $_GET[‘id’]);
Спасибо! Будем пробовать.
Вопрос
есть инфоблок каталога с id 2 в нем свойства связаных элементов наз. PREIM_BLOCK
в товаре при редактировании могу выбирать элемент в инфоблоке — статьи, например
но выводит такое — 20857522086 где 2086 и 2085 id статей, а что за 752 незнаю — что не так?
хочу вывести в товаре любую статью из другого инфоблока.
«ASC»);
$arSelect = Array(«ID», «NAME» «PROPERTY_PREIM_BLOCK»);
$arFilter = Array(«IBLOCK_ID» => 2);
$res = CIBlockElement::GetList($arSort, $arFilter, false, false, $arSelect);
while($ob = $res->GetNextElement()){
$arFields = $ob->GetFields();
print_r($arFields[‘PROPERTY_PREIM_BLOCK_VALUE’]);
}
}
?>
а статьи с Id 752 нет?
выведите print_r($arFields);
думаю станет всё ясно