Вывести значение свойства через Api битрикс

Не раз приходилось сталкиваться с задачей, когда нужно было вывести свойство инфоблока через 1с-Битрикс API. Рассмотрим такой пример : имеется инфоблок с различными футболками , задача – вывести название футболки и ткань , из которой она сделана.

Инфоблок  с футболками имеет ID=5 (рис.1)

id_infobloka

и требуется вывести свойство с символьным кодом = «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.

Рекомендуем к прочтению



18 комментариев

  • Asasin:

    А как вывести значения свойства тип список?
    плиз

    • shapito27:

      Здравствуйте, Asasin.
      Допустим у вас есть свойство «Цвет» с символьным кодом — «COLOR».
      Тогда в массив $arSelect нужно добавить — «PROPERTY_COLOR».
      Чтобы вывести значение свойства (например красный ) написать нужно так:
      print_r($arFields[PROPERTY_COLOR_VALUE]). Если вам нужно вывести ID красного цвета, то: print_r($arFields[PROPERTY_CAT_ENUM_ID]).

  • Александр:

    все бы хорошо, но как вывести в меню свойство инфоблока?

    • shapito27:

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

  • Виктор:

    Как странно. Сделал все так же, как на картинках. Тип свойства строка.
    Вывожу именно это поле, но при добавлении в строку print_r ($arFields); любого параметра к переменной $arFields ничего не выводится.

    В чем может быть проблема?

    • Виктор:

      Кажись разобрался. Типичная ошибка. Работает!
      Вот теперь только не пойму как складывать значения поля из нескольких элементов инфоблока. Может подскажете способ?

      • shapito27:

        Здравствуйте, Виктор.
        Расскажите подробнее о вашей задаче. лучше с примером.

  • Станислав:

    Доброго времени суток, а подскажите как добавить класс к диву в зависимости от значений свойств, т.е. если у свойства 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 инфоблока. Подскажите как сделать?

  • Сергей:

    Здравствуйте.
    А как для конкретного элемента вывести его свойство?

    • shapito27:

      Добавьте в переменную фильтра ID(или CODE) элемента, например вместо $arFilter = Array(«IBLOCK_ID» => 5);
      запишите
      $arFilter = Array(‘IBLOCK_ID’ => 5, ‘ID’ => 10);

  • Дмитрий:

    Здравствуйте! Похоже, что ваша статья — половина решения имеющейся задачи. А заключается она в следующем: нужно получить значение свойства элемента инфоблока и передать его в скрытое поле веб-формы, ссылка на заполнение которой должна находится на странице детального просмотра элемента. Подскажите, пожалуйста, в каком направлении двигаться дальше, чтобы реализовать такой функционал?

    • shapito27:

      Здравствуйте, Дмитрий. Как вариант на странице детального просмотра элемента в ссылку добавить get параметр id: http://thisis-blog.ru/forma.php?id=5
      а тут forma.php уже получать id и использовать функцию getList c фильтром:
      $arFilter = Array(«ID» => $_GET[‘id’]);

  • Val:

    Вопрос
    есть инфоблок каталога с 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’]);

    }
    }
    ?>

Оставить комментарий

Этот сайт защищен reCAPTCHA и применяются Политика конфиденциальности и Условия обслуживания применять.

Срок проверки reCAPTCHA истек. Перезагрузите страницу.