Skip to content

hipot-studio/hipot.framework

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

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

hipot logo

Требования:

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, используем DTO Hipot\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

ВАЖНО! После включения 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:

layer example

рис. смотрим какие свойства есть в 3м инфоблоке и какие у них коды для выборки:

layer example

рис. имеем code completion для всех типов свойств, в том числе для свойств связанных элементов инфоблоков:

layer example

версия 3.1

  • большая часть кода переписана под современные реалии битрикса (d7) и php

версия 3.0

  • собрано все по крупицам с разных мест

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

  1. Это фасад. Т.е. фреймворк оберточного типа.
  2. Это микрофрейморк. Т.е. по-минимуму нужных методов, ничего избыточного и лишнего.

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

Дела давно минувших дней и наследие wexpert

В файле презентация первой версии, 03.09.2014 представлена моя планерка при выпуске версии 1.0. Решил ее тоже сохранить, возможно кому-то поможет.

About

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

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published