Битрикс: как узнать список разделов и элементов

Бывают ситуации, когда нужно вывести список элементов или разделов конкретного информационного блока (инфоблока). Воспользуемся CIBlockElement::GetList для элементов и CIBlockSection::GetList для разделов соответственно.

Как вывести список элементов инфоблока в 1С-Битрикс

Для этого создадим тестовую страницу в корне нашего сайта, например test.php . Код нашего файла будет иметь следующий вид:

Как видим, подключается header и footer (заголовок нам не нужен в принципе). Теперь напишем код CIBlockElement::GetList между подключением header и footer.

 

Код мы написали, теперь давайте посмотрим что мы делаем:

  • подключаем модуль iblock т.к. без него наш код может не работать;
  • задаем переменную, которая равна ID необходимого информационного блока (в моем случае это 14);
  • в переменную записываем CIBlockElement::GetList, иначе не сможем с ним работать;
  • в CIBlockElement::GetList есть массивы с данными:
    Array(«ID» => «ASC») — массив для сортировки, в нашем случае это ID по возрастанию,
    Array(«IBLOCK_ID» => $iblock_id) — массив для фильтрации — мы выбрали только по ID инфоблока,
    false, false — тут можно задать массивы для группировки элементов и выбрать параметры постраничной навигации (как правило, они не нужны, ставим каждому false),
    Array(‘ID’, ‘NAME’, ‘DETAIL_PAGE_URL’) — последний, но не менее важный массив, который вернет выбранные поля. В нашем случае он вернет ID, Имя элемента, полный путь к детальному элементу (его url).
  • выводим по очереди все наши элементы с помощью цикла.

urldecode — я использовал для правильного отображения кириллических урлов (да, их оказывается кто-то еще использует 🙂 ). $ar_fields[‘DETAIL_PAGE_URL’] — выведет вам в каждой строке ссылку на элемент, при желании, вы можете заменить DETAIL_PAGE_URL на ID или NAME и т.д. в зависимости от того, какая перед вами стоит задача.

Важно знать! Если вы не выбираете поля для последнего массива (который обычно называют arSelect), вы рискуете прилично загрузить ваш сервер, ведь он будет тащить для каждого элемента, значения всех его полей. Представьте сколько это запросов к БД.

Как узнать значения свойств инфоблока в Битриксе

Ну хорошо, мы выводим имя, id и ссылку — казалось бы, зачем весь этот цирк? А вот теперь рассмотрим случай, когда мы с помощью GetList можем узнать свойства инфоблока, конкретного элемента. Заменяем наш arSelect, он же массив с выбором полей на
Array(‘ID’, ‘NAME’, ‘DETAIL_PAGE_URL’, ‘PROREPTY_TITLE’)
где, TITLE — это символьный код вашего свойства (а приписка PROREPTY_ служит как раз для того чтобы это и указать).

Отобразить на экран свойство битрикса можно несколькими способами, в зависимости от его типа — строка это или список. Это может быть как

так и

Если у вас что-то не получается, давайте просто выведем список элементов массива:

Кстати, если у вас много элементов в массиве, то для такой цели лучше вывести всего поля первого элемента (это может быть товар, новость и т.д.). Как это сделать? Либо дописать в GetList строку

либо создать счетчик перед массивом и вывести для 1 элемента, примерно вот так:

ПС — показал где писать nTopCount 🙂

Как вывести список разделов в 1С Битрикс

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

Если вы заметили, у нас теперь массив с выбором по порядку четвертый а не пятый и добавился параметр » ACTIVE» => «Y» , который выводит только активные «разделы»(это работает и для CIBlockElement, просто в данном скрипте нашими элеменами являются разделы инфоблока). Принцип работы с CIBlockSection::GetList почти такой же, как и с CIBlockElement. В данном скрипте мы выводим символьный код разделов, предварительно преобразовав в читаемую кириллицу.

автор: Dmitriy

Занимаюсь веб-разработкой с 2011 года.

Предоставляю услуги по созданию проектов на CMS 1С-Битрикс - сайты, шаблоны и компоненты с нуля.

Другие виды работ:
  • Доработка функционала на уже существующих проектах
  • Вёрстка макетов (HTML, CSS, JavaScript, jQuery, JADE, SASS, Gulp)
  • Скрипты на PHP и JS (jQuery)

Если у вас остались вопросы, свяжитесь со мной любым удобным для вас способом или оставьте комментарий внизу.

E-mail: dmitriyribka@gmail.com
Skype: cinemacreaterus

11 комментария

  1. Когда вывожу список разделов, страница полностью не загружается, как решить??

  2. Вопрос: какого хера я это должен делать средствами api и почему столь элементарную задачу невозможно реализовать стандартными компонентами битрикса?

    1. Ну, что вам ответить на этот счет — разработчики платформы не могут учесть абсолютно все желания пользователей. Огромная часть функционала уже и так реализована «в коробке», тут вам и динамические компоненты новостей, и каталоги и т.д. Плюс, перед покупкой редакции, каждый человек в состоянии загрузить демо версию и понять что в ней присутствует. А вот понимание API битрикса — это больше для разработчиков, чтобы удовлетворить те самые выше упомянутые желания пользователей 🙂

  3. Подскажите, а как вывести список элементов одного из разделов инфоблока (например по его ID)
    Другими словами: есть инфоблок с ID=100, внутри которого созданы разделы со своими ID. Как вытянуть последний элемент определенного раздела инфоблока (по ID инфоблока и ID раздела)?

    1. Что-то в таком стиле:
      $my_elements = CIBlockElement::GetList (
      Array(«ID» => «DESC»), // сортируем по айди по убыванию
      Array(«IBLOCK_ID» => 100, «ACTIVE» => «Y», «SECTION_ID» => __АЙДИ-СЕКЦИИ__),
      false,
      Array(«nTopCount» => 1), // кажется так ограничивается кол-во, если не сработает замените «nTopCount» на «nPageSize»
      Array(‘ID’, ‘NAME’, ‘DETAIL_PAGE_URL’)
      );
      $ar_fields = $my_elements->GetNext();

      print_r($ar_fields); // свойства элемента

      1. Спасибо, уже реализовал, параметр SECTION_ID для раздела позабыл. API help помог. Еще раз спасибо.

  4. Здравствуйте. А как вывести на страницу определенный элемент инфоблока, если мы знаем ID раздела, в котором он находится и ID искомого элемента? Также, интересует, как вывести определенный раздел инфоблока, зная его ID. Спасибо

    1. чтобы вывести по айди вам нужно указать в arFilter «IBLOCK_ID» => ВАШ_ИНФОБЛОК, «ID» => ВАШ_АЙДИ ЭЛЕМЕНТА — в данном случае добавлять айди раздела нет смысла.
      а для того чтобы вывести свойства определенного раздела можно воспользоваться CIBlockSection::GetByID, если я вас правильно понял — https://dev.1c-bitrix.ru/api_help/iblock/classes/ciblocksection/getbyid.php

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *