Skip to content

About

Набор инструментов и практик для разработки на bitrix

Topics

Resources

Stars

10 stars

Watchers

1 watching

Forks

Repository files navigation

Мини-фреймворк hipot.framework для создания проектов на bitrix

Данный проект представляет собой мини-фреймворк для разработки на Bitrix, предоставляющий набор переиспользуемых компонентов, утилит и абстракций для упрощения работы с основными модулями платформы.

hipot logo

(с) hipot studio, 2017 - nowadays
mailto: info AT hipot-studio DOT com

Требования:

bitrix main 23.600+, PHP 8.3+

Доступные инструменты и возможности:

  • библиотека классов /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 для highload-блоков: базовая модель Hipot\Model\HiBaseModel, декоратор Hipot\Model\DataManagerReadModel, backend-контроллер HipotAjaxController и клиентская библиотека hi_model.js
    • 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());
    • объектная обёртка над агентами Bitrix в пространстве имён Hipot\BitrixUtils\Agent
    • с магазином Hipot\BitrixUtils\Sale (aka SaleUtils) и товаром каталога Hipot\BitrixUtils\Catalog
    • различные утилиты-хелперы Hipot\Utils\UUtils (aka UnsortedUtils) и трейты-хелперы в namespace Hipot\Utils\Helper\*
    • генератор определений констант для IDE Hipot\Utils\ConstantIdeHelper
    • для отложенного подключения ресурсов Hipot\BitrixUtils\AssetsContainer
    • различные сервисы в пространстве имен Hipot\Services: не используем global's, используем DTO Hipot\Services\BitrixEngine, а для проброса данных между элементами приложения используем Hipot\Services\Registry
    • различные базовые типы в пространстве имен Hipot\Types
  • автозагрузчик к классам lib/simple_loader.php для копирования в /local/php_interface/lib/simple_loader.php
    В современных реалиях лучше для этого использовать composer предназначенный для копирования в Bitrix-сайт

  • немного "плавающих функций" /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\Components\IblockMenuExt для создания динамичных _ext-меню по элементам или по секциям инфоблоков: hipot:iblock.menu_ext
    • Hipot\Components\MedialibraryCollectionList для вывода коллекций медиабиблиотеки: hipot:medialibrary.collection.list
    • Hipot\Components\MedialibraryItemsList для вывода списка элементов медиабиблиотеки (напр. определенного альбома) в публичную часть: hipot:medialibrary.items.list
    • Hipot\Components\CommentsBlog для реализации комментариев из модуля блогов к детальным страницам элементов инфоблоков
  • пример файла /local/php_interface/init.php с подключением деталей фреймворка к битриксу можно найти в файле include.php

Установка:

Пока для ручного осознанного копирования деталей, в дальнейшем будет модуль hipot.framework с установщиком.

  • скопировать папку src модуля в папку /local/modules/ (для новых проектов) или /bitrix/modules/ для рабочих
  • установить в админке модуль, чтобы он зарегистрировал себя
  • можно добавить другие свои нужные классы в автозагрузчик (PSR-4, см. "Стиль написания кода и Структурирование файлов")
  • можно отдельно копировать классы, функции, события и компоненты модуля, часто они самодостаточны и не требуют установки модуля (инкапсуляция на уровне классов/компонентов)

Объектная модель-обертка над инфоблоками

Подробности про Abstract Iblock Elements Layer

Два ключевых аспекта, концепции фреймворка:

  1. Это фасад, т.е. фреймворк оберточного типа для удобства использования (facade поверх Bitrix)
  2. Это микрофрейморк, т.е. по-минимуму нужных методов, ничего избыточного и лишнего (microframework с минимальным набором абстракций).

Правила по коду:

layer example

About

Набор инструментов и практик для разработки на bitrix

Topics

Resources

Stars

10 stars

Watchers

1 watching

Forks

Releases

Used by

Contributors

Languages