PHPackages                             denx-b/bitrix-blank - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Templating &amp; Views](/categories/templating)
4. /
5. denx-b/bitrix-blank

ActiveBitrix-module[Templating &amp; Views](/categories/templating)

denx-b/bitrix-blank
===================

bitrix blank template

32922PHP

Since Jun 25Pushed 5d ago6 watchersCompare

[ Source](https://github.com/denx-b/bitrix-blank)[ Packagist](https://packagist.org/packages/denx-b/bitrix-blank)[ RSS](/packages/denx-b-bitrix-blank/feed)WikiDiscussions master Synced yesterday

READMEChangelogDependenciesVersions (1)Used By (0)

Шаблон нового проекта 1С-Битрикс
================================

[](#шаблон-нового-проекта-1с-битрикс)

Данный шаблон представляет из себя хороший пример структурирования файлов проекта на 1С-Битрикс.

Эффективность нашей команды сильно повысилась, когда мы внедрили автозагрузку собственных классов по **PSR-4** в битрикс проектах и стали использовать структуру и принципы описанные в данном репозитории за основу.

Ключевые договорённости в команде, которые вы можете встретить в данном репозитории:

1. Автозагрузка классов;
2. Реализации обработчиков событий вынесена из init.php;
3. Пример шаблона сайта;
4. API.

Автозагрузка классов (PSR-4)
----------------------------

[](#автозагрузка-классов-psr-4)

Автозагрузка работает для **всех** классов с namespace `Legacy\*`.

Базовое правило: `Legacy\Some\ClassName` -&gt; `/local/php_interface/legacy/classes/Some/ClassName.php`

API
---

[](#api)

Используя встроенную автозагрузку классов и реализованный механизм API, можно легко добавлять свои методы.

Текущий поток выполнения:

1. Запросы `/api/*` направляются в `local/php_interface/legacy/api.php` через `urlrewrite`.
2. `api.php` нормализует маршрут в полный вид (`/api/...`) и передаёт его в `ApiFactory::create(...)`.
3. `ApiFactory` создаёт класс обработчика по карте маршрутов `ApiRoutes::map()`.
4. Если маршрут не найден, используется `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/functions`
- `local/php_interface/legacy/eventHandlers`

Для регистрации обработчиков в команде принято держать файлы в `eventHandlers` с именем модуля:

- `iblock.php` для событий модуля `iblock`
- `main.php` для событий модуля `main`
- `crm.php` для событий модуля `crm`
- и т.д.

Это соглашение для удобства навигации, а не жёсткое ограничение: файл может называться иначе, и таких файлов может быть сколько угодно.

templates
---------

[](#templates)

Друзья, пожалуйста, не пишите addCss и addJs в теге ``, так как место вызова метода не является местом подключения скриптов или стилей. Все ваши подключения будут выведены в месте вызова `$APPLICATION->ShowHead();`, который мы аккуратно выносим в ``. А весь PHP в `header.php` размещаем перед HTML-содержимым шаблона, как показано в примере ниже.

```
