denx-b / bitrix-blank
bitrix blank template
Requires
- php: >=8.1
- ext-curl: *
- ext-json: *
- ext-mbstring: *
- composer/installers: ~1
This package is auto-updated.
Last update: 2026-02-27 19:58:01 UTC
README
Данный шаблон представляет из себя хороший пример структурирования файлов проекта на 1С-Битрикс.
Эффективность нашей команды сильно повысилась, когда мы внедрили автозагрузку собственных классов по PSR-4 в битрикс проектах и стали использовать структуру и принципы описанные в данном репозитории за основу.
Ключевые договорённости в команде, которые вы можете встретить в данном репозитории:
- Автозагрузка классов;
- Реализации обработчиков событий вынесена из init.php;
- Пример шаблона сайта;
- API.
Автозагрузка классов (PSR-4)
Автозагрузка работает для всех классов с namespace Legacy\*.
Базовое правило:
Legacy\Some\ClassName -> /local/php_interface/legacy/classes/Some/ClassName.php
API
Используя встроенную автозагрузку классов и реализованный механизм API, можно легко добавлять свои методы.
Текущий поток выполнения:
- Запросы
/api/*направляются вlocal/php_interface/legacy/api.phpчерезurlrewrite. api.phpнормализует маршрут в полный вид (/api/...) и передаёт его вApiFactory::create(...).ApiFactoryсоздаёт класс обработчика по карте маршрутовApiRoutes::map().- Если маршрут не найден, используется
Methods\Unknown.
Маршруты объявляются централизованно в ApiRoutes:
final class ApiRoutes { public static function map(): array { return [ '/api/news' => Methods\News::class, '/api/deploy/gitStatus' => Methods\Deploy\GitStatus::class, '/api/catalog/items' => Methods\Catalog\Items::class, '/api/catalog/itemDetail' => Methods\Catalog\ItemDetail::class, '/api/order/create' => Methods\Order\Create::class, '/api/order/cancel' => Methods\Order\Cancel::class, '/api/profile/updatePhone' => Methods\Profile\UpdatePhone::class, ]; } }
Каждому методу соответствует класс из директории /local/php_interface/legacy/classes/Api/Methods:
Регистрация обработчиков событий
В проекте автоматически подключаются все PHP-файлы из директорий:
local/php_interface/legacy/functionslocal/php_interface/legacy/eventHandlers
Для регистрации обработчиков в команде принято держать файлы в eventHandlers с именем модуля:
iblock.phpдля событий модуляiblockmain.phpдля событий модуляmaincrm.phpдля событий модуляcrm- и т.д.
Это соглашение для удобства навигации, а не жёсткое ограничение: файл может называться иначе, и таких файлов может быть сколько угодно.
templates
Друзья, пожалуйста, не пишите addCss и addJs в теге <head>, так как место вызова метода не является местом подключения скриптов или стилей.
Все ваши подключения будут выведены в месте вызова $APPLICATION->ShowHead();, который мы аккуратно выносим в <head>.
А весь PHP в header.php размещаем перед HTML-содержимым шаблона, как показано в примере ниже.
<?php if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) { die(); } /** @global $APPLICATION */ use Bitrix\Main\Localization\Loc; use Bitrix\Main\Page\Asset; Loc::loadMessages(__FILE__); Asset::getInstance()->addJs(SITE_TEMPLATE_PATH . '/js/script.js'); Asset::getInstance()->addString('<link rel="icon" type="image/x-icon" href="' . SITE_TEMPLATE_PATH . '/favicon.ico"/>'); Asset::getInstance()->addString('<meta name="viewport" content="width=device-width, initial-scale=1">'); ?><!doctype html> <html xml:lang="<?php echo LANGUAGE_ID ?>" lang="<?php echo LANGUAGE_ID ?>"> <head> <title><?php echo $APPLICATION->ShowTitle() ?></title> <?php $APPLICATION->ShowHead(); ?> </head> <body> <div id="panel"><?php $APPLICATION->ShowPanel() ?></div>
Структура
local/php_interface/legacy
├── classes
│ ├── Agents
│ ├── Api
│ │ ├── Methods
│ │ │ ├── News.php <-- /api/news
│ │ │ ├── Deploy/GitStatus.php <-- /api/deploy/gitStatus
│ │ │ └── Unknown.php <-- /api/всё_что_угодно
│ │ │
│ │ ├── Api.php
│ │ ├── ApiFactory.php
│ │ └── ApiRoutes.php
│ │
│ ├── Events
│ │ ├── CommonHandlers.php
│ │ ├── IblockHandlers.php
│ │ └── SaleHandlers.php
│ │
│ └── Model
│ └── MyTable.php
│
├── functions
│ └── custom_mail.php
│
├── eventHandlers
│ ├── common.php
│ ├── iblock.php
│ └── sale.php
│
├── autoload.php
├── bootstrap.php
├── composer.json
└── settings.php