Работа с инфоблоками - techart/bitrix.tao GitHub Wiki

Bitrix.TAO представляет собой дополнительный слой API поверх стандартного API Битрикса. Причем, после установки, ТАО позволяет сразу начать применять функционал. Т.е. вызовы методов ТАО будут работать на равне с битриксовыми.

Например, в компоненте вывода новостей заменяем числовое значение ID блока на вызов метода TAO.Bitrix.

<?$APPLICATION->IncludeComponent("bitrix:news", ".default", array(
...
"IBLOCK_ID" => \TAO::infoblock('news')->getId(),
...
);

И это будет работать. Единственное, необходимо в настройках инфоблока поменять символьный код на читабельный.

Обращение к инфоблоку

Большим недостатком Битрикса является идентификация инфоблока числовым автоинкрементным идентификатором, который нельзя использовать в php-коде в силу того, что никто не гарантирует его соответствие в разных копиях проекта.

Символьный код у инфоблоков есть, но Битрикс не требует его обязательности и уникальности, хотя не понятно кому в здравом уме потребуется делать одинаковые символьные коды у нескольких инфоблоков.

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

$ib = \TAO::infoblock('cats'); // получили объект инфоблока коты :)

Также, можно обратиться по ID инфоблока.

$ib = \TAO::infoblock(3); // опять получили объект инфоблока коты :)

Получение списка записей

Список записей в стандратном формате битрикса можно получить при помощи метода getRows().

$rows = \TAO::infoblock('cats')->getRows($args);

где $args - ассоциативный массив параметров выборки, состоящий из следующих параметров:

  • filter - идентичен параметру arFilter стандартной функции CIBlockElement::GetList [http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockelement/getlist.php]
  • order - идентичен параметру arOrder стандартной функции CIBlockElement::GetList [http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockelement/getlist.php]
  • fields - идентичен параметру arSelectFields стандартной функции CIBlockElement::GetList.
  • group_by - идентичен параметру arGroupBy стандартной функции CIBlockElement::GetList.
  • page - номер текущей страницы (нумеруется с единицы).
  • per_page - количество записей на странице.
  • pager_var - можно заменить вместо page. В этом случае номер страницы будет браться из $_GET по имени указанной переменной.
  • check_permissions - настройка проверки прав доступа к инфоблокам. Аналогична настройке CHECK_PERMISSIONS из стандартного параметра arFilter. Т.е. можно ее настроить через фильтр.

Для получения лимитированного количества нужно определить параметры per_page и page.

$towns = \TAO::infoblock('towns')->getRows(array(
    'filter' => array(
        'address' => $this->id(),
        'ACTIVE' => 'Y'
    ),
    'fields' => array(
        'DETAIL_PAGE_URL',
        'PROPERTY_address',
    ),
    'page' => 1,
    'per_page' => 1,
)); 

Список записей можно получить в формате типа \TAO\Entity. Для этого необходимо вызвать метод getItems($args).

$towns = \TAO::infoblock('towns')->getItems($args);

Получение количества записей

Для этого применяется метод getCount().

$towns = \TAO::infoblock('towns')->getCount($args);

Параметр $args используется тот же, что и в методах выше.

Формирование списка опций

В Bitrix.TAO применяется метод getItemsForSelect($args = array()).

$data['ITEMS'] = \TAO::infoblock('towns')->getItemsForSelect();

Получение одного элемента

Загрузку одного элемента в формате \TAO\Entity можно произвести с применением метода loadItem($id).

$item = \TAO::infoblock('towns')->loadItem($id);

При этом если $id содержит не цифровые символы, то загрузка будет производиться по символьному коду.

Удаление элемента

\TAO::infoblock('towns')->deleteItem($id);

Сохранение элемента

$item->save();

Создание нового элемента

$item = \TAO::infoblock('towns')->makeItem();
$item['NAME'] = 'Название';
$item->save();

Вывод записей на странице

Для вывода записей можно воспользоваться методом render($args = array()).

print \TAO::infoblock('cars')->render(array(
    'order' => array('NAME' => 'asc'),
    'page' => 1,
    'per_page' => 2,
    'pager_var' => 'page',
    'pager_bottom' => true,
    'list_mode' => 'list',
    'item_mode' => 'name',
));

где $args - ассоциативный массив параметров выборки, передаваемый в метод. Сюда входят все те же параметры, что и для метода getRows() + параметры режима отображения.

  • item_mode - режим отображения записи. По умолчанию подключается teaser.
  • list_mode - режим отображения списка записей. По умолчанию подключается шаблон default.
  • pager_top - подключает верхний блок постраничной навигации.
  • pager_bottom - подключает нижний блок постраничной навигации.

Кроме этого, есть отдельные методы для вывода списка разделов, списка всех элементов инфоблока.

  • renderSectionsList($args) - выводит нумерованный или ненумерованный список разделов. Для выбора вида нумерации необходимо передать тип нумерации (ul или ol) в параметре sections_list_type. По умолчанию используется ul.
print \TAO::infoblock('cats')->renderSectionsList(array(
    'sections_list_type' => 'ol',
));
  • renderElementsPage($args) - формирует список из элементов инфоблока. Можно передавать все те же параметры, что и для render().
  • renderSectionsPage($args) - по сути то же, что и renderSectionsList($args).