arrilot / bitrix-iblock-helper
此包已被废弃,不再维护。没有建议的替代包。
0.3.4
2019-05-12 22:07 UTC
Requires
- php: >=5.6.4
- arrilot/bitrix-cacher: ~3
README
此包不再积极维护
原因是我们不再在项目中使用Bitrix。如果您对这个项目感兴趣并想维护它 - 分支它并在此存储库中创建一个问题,以便我们将链接放置在此处。
简化与信息块/海加载块的工作的帮助器
此包包含两个类,允许方便且高效地获取
- 信息块根据其符号代码的标识符
- 根据表名称获取海加载块的不同信息
性能通过这种方式实现:我们不每次调用任何方法时都从数据库请求数据。相反,数据一次从数据库获取,并立即为所有信息块/海加载块提供,并且可以选择缓存。
安装
composer require arrilot/bitrix-iblock-helper
使用
信息块
推荐的使用方法 - 在项目中添加以下辅助函数
/** * Получение ID инфоблока по коду (или по коду и типу). * * @param string $code * @param string|null $type * @return int * * @throws RuntimeException */ function iblock_id($code, $type = null) { return Arrilot\BitrixIblockHelper\IblockId::getByCode($code, $type); }
假设有一个类型为 other
、符号代码为 articles
的信息块。
其ID可以通过以下任一方式获取
$id = iblock_id('articles', 'other')
- 严格模式$id = iblock_id('other:articles')
- 一样$id = iblock_id('articles')
- 更方便,当信息块代码可以被认为是唯一时
无论调用 iblock_id()
的次数多少,数据库查询只会执行一次,并为所有信息块获取数据。
海加载块
推荐的使用方法 - 在项目中添加以下辅助函数
/** * Получение данных хайлоадблока по названию его таблицы. * Всегда выполняет лишь один запрос в БД на скрипт и возвращает массив вида: * * array:3 [ * "ID" => "2" * "NAME" => "Subscribers" * "TABLE_NAME" => "app_subscribers" * ] * * @param string $table * @return array */ function highloadblock($table) { return Arrilot\BitrixIblockHelper\HLblock::getByTableName($table); } /** * Компилирование и возвращение класса для хайлоадблока для таблицы $table. * * Пример для таблицы `app_subscribers`: * $subscribers = highloadblock_class('app_subscribers'); * $subscribers::getList(); * * @param string $table * @return string */ function highloadblock_class($table) { return Arrilot\BitrixIblockHelper\HLblock::compileClass($table); } /** * Компилирование сущности для хайлоадблока для таблицы $table. * Выполняется один раз. * * Пример для таблицы `app_subscribers`: * $entity = \Arrilot\BitrixIblockHelper\HLblock::compileEntity('app_subscribers'); * $query = new Entity\Query($entity); * * @param string $table * @return \Bitrix\Main\Entity\Base */ function highloadblock_entity($table) { return Arrilot\BitrixIblockHelper\HLblock::compileEntity($table); }
缓存
为了提高性能,此包使用两个级别的缓存来存储标识符数组。需要了解这些级别是如何工作的,以避免一些潜在的问题。
第一级(本地缓存) - 将数据数组缓存到类的静态变量中。默认启用。这种缓存仅在单个HTTP请求的范围内工作,但非常有用,因为它可以避免多次查询数据库。
第二级(外部缓存) - 通过Bitrix的标准缓存机制在外部缓存中进一步缓存。默认禁用。对于有大量信息块的项目来说可能很有用。
要启用,请将以下内容添加到 init.php
(或类似位置)
IblockId::setCacheTime(30 * 60); // кэшируем ID всех инфоблоков на 30 минут HLblock::setCacheTime(30 * 60); // кэшируем данные всех хайлоадблоков на 30 минут
重置缓存
该包提供了多种用于重置缓存的方法。通常情况下不需要使用它们,但有时没有它们就无法解决问题。
// Очистка первого уровеня кэша. // По-сути единственный кейс, когда он нужен - когда вы добавили инфоблок/хлблок и хотите в том же запросе с ним работать через `iblock_id()`. IblockId::flushLocalCache(); HLblock::flushLocalCache(); // Очистка второго уровня кэша. // Нужна в случае, если вы его во-первых включили, а во-вторых добавили инфоблок через админку/код и не готовы ждать инвалидации этого кэша. IblockId::flushExternalCache(); HLblock::flushExternalCache(); // Также можно в любой момент выключить использование внешнего кэша для текущего запроса через IblockId::setCacheTime(0); HLblock::setCacheTime(0);