(с) hipot, 2017 - nowadays /2024/
mailto: info AT hipot-studio DOT com
bitrix main 23.600+, PHP 8.1+
-
библиотека классов
/lib/classes
для копирования в/local/php_interface/lib/classes
- объектная модель-обертка над инфоблоками
Hipot\IbAbstractLayer\IblockElemLinkedChains
. Наследует весь функционал отHipot\BitrixUtils\Iblock
(Abstract Iblock Elements Layer, см. ниже) - класс для работы с инфоблоками
Hipot\BitrixUtils\Iblock (aka IblockUtils)
- класс для работы с hightload-блоками
Hipot\BitrixUtils\HiBlock
и приложение реестра настроек на его основеHipot\BitrixUtils\HiBlockApps
- readModel из наследников битрикс DataManager'a: абстрактная заготовка
Hipot\Model\HiBaseModel
для наследования от нее конкретной hightload-сущности и декораторHipot\Model\DataManagerReadModel
для создания read-моделей наследников HiBaseModel - api для трансформации изображений и наложения водных знаков
Hipot\Utils\Img
- класс для работы с кешированием
Hipot\BitrixUtils\PhpCacher
/** @global $USER \CUser */ use Hipot\BitrixUtils\PhpCacher; $cachedUser = PhpCacher::cache('cached_users' . PhpCacher::getCacheSubDirById($USER->GetID()), 3600, static fn() => $USER); /** @var $cachedUser \CUser */ \Bitrix\Main\Diag\Debug::dump($cachedUser->GetID());
- с магазином
Hipot\BitrixUtils\Sale (aka SaleUtils)
и товаром каталогаHipot\BitrixUtils\Catalog
- различные утилиты-хелперы
Hipot\Utils\UUtils (aka UnsortedUtils)
- для отложенного подключения ресурсов
Hipot\Utils\AssetsContainer
- различные сервисы в пространстве имен
Hipot\Services
: не используем global's, используем DTOHipot\Services\BitrixEngine
, а для проброса данных между элементами приложения используемHipot\Services\Registry
- различные базовые типы в пространстве имен
Hipot\Types
- объектная модель-обертка над инфоблоками
-
автозагрузчик к классам
lib/simple_loader.php
для копирования в/local/php_interface/lib/simple_loader.php
В современных реалиях лучше для этого использовать composer -
немного "плавающих функций"
/lib/functions.php
-
универсальные обработчики событий
/lib/handlers_add.php
с подключением констант-рубильников из файла/lib/constants.php
-
скрипт xhprof.php для быстрого профилирования "боевых" проектов
-
страница
pages/error.php
с перехватом фатальных php-ошибок и отправке их на почту разработчикам (размещается в DOCUMENT_ROOT проекта) -
компоненты в папке
install/components
для копирования в/local/components
Hipot\Components\IblockList
- универсальный компонент для работы с элементами инфоблоковhipot:iblock.list
. Этот же компонент умеет использовать и Abstract Iblock Elements Layer. В теории двух компонент - этот компонент можно использовать и для создания карточки (детальной страницы) элемента (товара, новости...)Hipot\Components\IblockSection
- компонент для работы со списком секцийhipot:iblock.section
Hipot\Components\HiBlockList
- список hightload блокаhipot:hiblock.list
HipotAjaxController контроллер
, позволяющий получать readModel-сущности в js через DataManagerReadModel иHipotAjaxComponent
, позволяющей загружать динамичные блоки, когда они попадают в viewport, а также для создания любой ajax-логики:hipot.ajax
Hipot\Components\Includer
элементарный компонент, позволяющий писать включения как шаблоны компонента битрикс (со своим стилем и скриптом, подключаемые вендором):hipot:includer
hipot:iblock.menu_ext
для создания динамичных _ext-меню по элементам или по секциям инфоблоковhipot:medialibrary.items.list
для вывода списка элементов медиабиблиотеки (напр. определенного альбома) в публичную часть
-
пример файла
/local/php_interface/init.php
с подключением деталей фреймворка к битриксу можно найти в файле include.php
Пока для ручного осознанного копирования деталей, в дальнейшем будет модуль hipot.framework
с установщиком.
- скопировать папку модуля в папку /local/modules/ (для новых проектов) или /bitrix/modules/ для рабочих
- установить в админке модуль, чтобы он зарегистрировал себя
- можно добавить другие свои нужные классы в автозагрузчик (PSR-4, см. "Стиль написания кода и Структурирование файлов")
ВАЖНО! После включения Abstract Iblock Elements Layer нужно проиндексировать файл bitrix/modules/generated_iblock_sxem.php
в используемой IDE.
Это делается для подсказок (автокомплит кода), по аналогии как в битриксе с аннотациями файл bitrix/modules/orm_annotations.php
см ABSTRACT_IBLOCK_ELEMENT_LAYER
use Bitrix\Main\Loader;
use \Hipot\IbAbstractLayer\IblockElemLinkedChains as hiIblockElemLinkedChains;
Loader::includeModule('hipot.framework');
// example to select some linked elements by linked-chained-class
$resultChains = hiIblockElemLinkedChains::getList(
['sort' => 'asc'],
['iblock_id' => 3, 'ID' => 232],
false, false,
['ID', 'NAME', 'PROPERTY_CML2_LINK']
);
// see iblock 3 properties to use in getList:
// (new __IblockElementItem_HIPOT3_LAN_3())->PROPERTIES->CML2_LINK
foreach ($resultChains as $ibItem) {
/** @var $ibItem __IblockElementItem_HIPOT3_LAN_3 */
echo $ibItem->PROPERTIES->CML2_LINK->CHAIN->PROPERTIES->MANUFACTURER->NAME;
}
var_dump($resultChains);
/* hiIblockElemLinkedChains помимо рекурсивных выборок и объектной модели умеет все,
что умеет класс Hipot\BitrixUtils\IblockUtils */
рис. смотрим какие классы есть после индексации модели инфоблоков в файл для IDE подсказок /bitrix/modules/generated_iblock_sxem.php
:
рис. смотрим какие свойства есть в 3м инфоблоке и какие у них коды для выборки:
рис. имеем code completion для всех типов свойств, в том числе для свойств связанных элементов инфоблоков:
- большая часть кода переписана под современные реалии битрикса (d7) и php
- собрано все по крупицам с разных мест
- Это фасад. Т.е. фреймворк оберточного типа.
- Это микрофрейморк. Т.е. по-минимуму нужных методов, ничего избыточного и лишнего.
- Стиль написания кода и Структурирование файлов
- Рекомендации для верстки макетов
- Особенно рекомендую заглянуть в раздел документов с использованными материалами
В файле презентация первой версии, 03.09.2014 представлена моя планерка при выпуске версии 1.0. Решил ее тоже сохранить, возможно кому-то поможет.