Skip to content
Mikhail Zhurov edited this page May 28, 2016 · 9 revisions

Начало

Установка

Техтребования:

  1. ПХП версии 5.4 или старше.
  2. Подключенный к Битриксу Композер.
  3. Битрикс версии 15.0.2 или старше.

Добавьте в Композер новую зависимость:

composer require bitrix-expert/tools

После этого библиотека будет доступна из любой строчки кода вашего проекта (сразу же, после подключения Композера).

Как это работает

В библиотеке присутствует два типа классов: инструменты (Tools) и Файндеры (Finder). Файндеры инкапсулированы, доступ к ним предоставляется через инструменты (например, метод IblockTools::find()) и работать с ними напрямую не рекомендуется.

Библиотека реагирует на события, возникающие в Битриксе, например: изменение инфоблока, группы пользователей. Дабы исключить коллизии, Bex\Tools запрещает создавать инфоблоки и группы пользователей с одинаковыми символьными кодами или без них. Регистрация перехватчиков событий производится в файле bootstrap.php.

В случае возникновения ошибки или обнаружения некорректно переданных в АПИ параметров, библиотекой выбрасывается соответствующее исключение.

Вы можете включить «режим тишины», что бы при отсутствии запрашиваемого значения (например, не найден искомый инфоблок) АПИ возвращало null, а не выбрасывало исключение \Bex\Tools\ValueNotFoundException. Будьте осторожны и используйте этот режим только при явной необходимости.

Почему не модуль?

Почему Bex\Tools — не модуль в Маркетплейсе Битрикса? Ответ прост — библиотека является низкоуровневым средством для разработки на базе Битрикса, которое всегда должно присутствовать в проекте без возможности его отключения неосторожными пользователями.

Возможности

Инфоблоки

IblockTools — с помощью него вы можете:

  • Получить идентификатор инфоблока / свойства / значения мн. свойства по символьному коду.
  • Сделать то же самое, но по числовому идентификатору.
<?php
use Bex\Tools\Iblock\IblockTools;

// Для многоразового использования инстанса Файндера запишем объект в переменную.
$iblockFinder = IblockTools::find('iblock_type', 'iblock_code');

echo 'ID: ' . $iblockFinder->id() . '<br>';
echo 'Type: ' . $iblockFinder->type() . '<br>';
echo 'Code: ' . $iblockFinder->code() . '<br>';
echo 'Prop ID: ' . $iblockFinder->propId('PROP_CODE') . '<br>';
echo 'Prop enum ID: ' . $iblockFinder->propEnumId('PROP_CODE', 'VALUE_XML_ID') . '<br>';

// Короткий вариант одноразового использования Файндера.
// Поиск инфоблока так же может осуществляться и по его идентификатору.
echo 'Iblock code: ' . IblockTools::findById(33)->code();

Группы пользователей

GroupTools умеет искать группы пользователей по их идентификаторам (и наоборот).

<?php
use Bex\Tools\Group\GroupTools;

// Для многоразового использования инстанса Файндера запишем объект в переменную.
$groupFinder = GroupTools::find('CONTROL_PANEL_USERS');

echo 'ID: ' . $groupFinder->id() . '<br>';
echo 'Code: ' . $groupFinder->code() . '<br>';

// Короткий вариант одноразового использования Файндера.
// Поиск группы так же может осуществляться и по идентификатору.
echo 'Group code: ' . GroupTools::findById(3)->code();

Highload-блоки

HlBlockTools позволяет искать Highload-блоки по их имени, или наоборот, Highload-блок по идентификатору

<?php
use Bex\Tools\HlBlockTools;

// Ищем по имени нужный Highload-блок
$hlBlockFinder = HlBlockTools::find('ReferenceName');
$hlBlockId = $hlBlockFinder->id();

// Поиск по идентификатору
$hlBlockName = HlBlockTools::findById(2)->name();

Finder

Файндер (\Bex\Tools\Finder) осуществляет быстрый поиск данных в стандартных структурах Битрикса с их последующим кешированием для ускорения повторных запросов и исключения необходимости обращения к СУБД. Этот абстрактный класс используется для реализации АПИ по работе с конкретной структурой данных, например: классы IblockFinder и GroupFinder — его наследники.

Файндер оперирует понятием «шард кеша». Шарды используются для разделения большого объёма кеша на логические части. Каждый шард кеша хранится отдельно. По-умолчанию используется шард common.

Логика сброса кеша по тегу определяется в конкретной реализации Файндера.

Основные методы Файндера:

  • getItems() — возвращает все данных из БД по запрошенному шарду кеша.
  • getValue() — осуществляет выборку конкретного значения в соответствии с передаваемым фильтром.
  • getFromCache() — возвращает данные из кеша (если возможно) или вызывает метод getItems().

Параметры кеширования любого экземпляра Файндера можно настроить, указав в файле init.php желаемые параметры, например:

<?php

// Установим время жизни кеша для IblockFinder в 60 минут.
\Bex\Tools\Iblock\IblockFinder::setCacheTime(3600);

// Изменим каталог для кеша у GroupFinder.
\Bex\Tools\Group\GroupFinder::setCacheDir('test_cache/group_finder');