-
Notifications
You must be signed in to change notification settings - Fork 14
Home
Техтребования:
- ПХП версии 5.4 или старше.
- Подключенный к Битриксу Композер.
- Битрикс версии 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();
HlBlockTools
позволяет искать Highload-блоки по их имени, или наоборот, Highload-блок по идентификатору
<?php
use Bex\Tools\HlBlockTools;
// Ищем по имени нужный Highload-блок
$hlBlockFinder = HlBlockTools::find('ReferenceName');
$hlBlockId = $hlBlockFinder->id();
// Поиск по идентификатору
$hlBlockName = HlBlockTools::findById(2)->name();
Файндер (\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');