Собираем в кучу свои наработки/обёртки для более удобной работы с API битрикса, а так же без чего невозможно комфортно работать с несколькими копиями-стадиями разработки проектов.
Опубликовали модуль в маркетплейсе. Пока он умеет немного. Но будет точно развиваться.
Модуль подключается на всех страницах в публичном разделе сайта. Дополнительно его инициализировать функцией Loader::includeModule() не нужно.
Работа с сущностями
<?php
// Вернёт ID инфоблока с кодом clothes
echo \Artmix\Core\Entity\Iblock::getByCode('clothes')->ID);
// Вернёт ID инфоблока с кодом clothes (с учётом типа инфоблока catalog)
echo \Artmix\Core\Entity\Iblock::getByCode('clothes', '=', 'catalog')->ID);
// Вернёт ID секции инфоблока с кодом shoes (без учёта инфоблока)
\Artmix\Core\Entity\IblockSection::getByCode('shoes')->ID;
// Вернёт CODE секции инфоблока с кодом shoes (c учётом инфоблока с ID 3)
\Artmix\Core\Entity\IblockSection::getByCode('shoes', '=', 3)->CODE;
// Вернёт NAME элемента инфоблока с XML_ID равным 6dd5e035-5886-11e5-a2d9-f46d042bcc9f (без учёта инфоблока)
\Artmix\Core\Entity\IblockElemet::getByXmlId('6dd5e035-5886-11e5-a2d9-f46d042bcc9f')->NAME;
// Вернёт NAME элемента инфоблока с XML_ID равным 6dd5e035-5886-11e5-a2d9-f46d042bcc9f (c учётом инфоблока с ID 3)
\Artmix\Core\Entity\IblockElemet::getByXmlId('6dd5e035-5886-11e5-a2d9-f46d042bcc9f', '=', 3)->NAME;
Работа с кешем
<?php
// Пример работы с кешем
use Artmix\Core\Data\Cache;
use Bitrix\Main\Loader;
use Artmix\Core\Entity\IblockQuery;
use Bitrix\Main\LoaderException;
$cacheDir = '/path/to/cache-dir';
$cacheId = 'unique-cache-id';
$cacheTime = 3600;
$result = (new Cache($cacheDir, $cacheId, $cacheTime))
->get(
function () {
if (Loader::includeModule('iblock')) {
return (new IblockQuery(get_called_class()))
->find(
[
'filter' => ['=CODE' => 'TEST']
]
)
->one();
} else {
throw new LoaderException(sprintf('Error include "iblock" module.'));
}
}
);
// Пример работы вместе с тегированным кешем
$result = (new Artmix\Core\Data\Cache('/artmix/pages/oplata_i_dostavka', 'elements-news', 60 * 60 * 24 * 30, ['iblock_id_1']))
->get(
function () {
if (Bitrix\Main\Loader::includeModule('iblock')) {
$items = [];
$elementIterator = \Bitrix\Iblock\ElementTable::getList([
'select' => ['ID', 'NAME', 'CODE'],
'filter' => [
'=IBLOCK_ID' => 1,
],
]);
while ($element = $elementIterator->fetch()) {
$items[$element['ID']] = $element;
}
return $items;
} else {
throw new Bitrix\Main\LoaderException(sprintf('Error include "iblock" module.'));
}
}
);
Для более комфортной работы с API модуля (автоподсказками и подстановками), рекомендую подключить его как дополнительную библиотеку в вашей любимой IDE.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».