Блог Никиты Самохвалова, обо всём и ни о чём.

Позднее Ctrl + ↑

«Композер» или непростой путь к ядру «Битрикса»

Выпустил версию 1.0.24 «Композер-установщиков». Полный список изменений вы можете найти в отчёте о релизе, но остановлюсь подробнее на двух обновлениях:

  1. Силами Роба Лоача библиотека переписана под ПСР-4.
  2. В «Битриксе» «Композер» теперь может находиться в корне проекта, даже если каталог с ядром находится глубже:
s1/
     bitrix/
          components/<name>
          modules/<name>
          templates/<name>
vendor/
composer.json
composer.lock

Для этого нужно всего лишь указать в composer.json вашего проекта путь к ядру:

{
     "extra": {
          "bitrix-dir": "s1/bitrix"
     }
}

По-умолчанию без этой настройки установщик клонирует пакеты в каталог bitrix/*.

Генератор админок «Битрикса»

Несколько лет назад я начал делать сайты на «Битриксе». У меня были проекты СМИ, которым требовались нестандартные интерфейсы, но не было инструментов для их разработки. Тут и там нужно было сделать страницу в админке: то для простого редактирования данных, то с навороченным интерфейсом и функционалом документооборота. Матёрый читатель наверняка уже досадно хмыкнул, читая эти строки, ведь в «Битриксе» это делается с помощью большой портянки в виде ПХП-скрипта, содержащего логику всех КРУД-операций страницы, вперемежку с ХТМЛ-кодом, ЦСС и ЯС. Пример — любая админская страница любого модуля «Битрикса».

ООП?

Генерация административного интерфейса — головная боль битриксоида. Кто-то мирится с этим досадным фактом и идёт по пути написания скриптов-портянок. Другие выносят «генератор» админских страниц в компоненты. Третьи разрабатывают различные обёртки, позволяющие хоть немного привести доработку панели управления «Битрикса» к ООП. Но тем не менее, каким бы решением вы не пользовались, речи об ООП быть не может, и вам так же придётся повсюду вставлять типовые куски кода: подключение ядра, связанных классов и т. п.

Автоматизация?

В «Битриксе» в принципе отсутствует роутинг страниц, основанный на единой точке входа. Под каждую новую страницу на сайте нужно создавать новый ПХП-файл. Тоже самое касается и админки. Сделали новую страницу для админки? Даже не думайте, что этим всё закончится! «Битрикс» не умеет забирать админские страницы из модуля. Ваш модуль при установке или обновлении должен создать эту страницу в каталоге bitrix/admin.

Решение есть!

Мой товарищ — Алексей Волков из «Цифровой палки» — летом прошлого года опубликовал бета-версию генератора админских страниц с немудрёным названием «Админ-хелпер».

Модуль реализует подход шаблона проектирования МВЦ в создании страниц для панели управления «Битрикса». Если у вас есть модель, написанная на ОРМ «Битрикса», вы за считанные минуты сможете сделать раздел для управления данными этой модели, ничем не уступающему по своим возможностям и внешнему виду интерфейсу управления элементами инфоблоков.

Стоит сразу же оговориться: единственный недостаток генератора на данный момент — отсутствие бизнес-процессов и документооборота. А теперь перечислю его преимущества:

  • объектно-ориентированный подход,
  • пара минут уходит на создание админки под КРУД-операции с моделью,
  • данные могут храниться где угодно: в отдельной таблице или другой БД,
  • неограниченные возможности по кастомизации интерфейса,
  • нет необходимости копировать ПХП-скрипты в bitrix/admin.

С тех пор я применил на нескольких проектах этот модуль и весьма неплохо доработал его вместе со своей командой в «Нотамедии». Мы сделали версию 2.0, в которую было добавлено много различных фич, приведу некоторые из них:

  • менеджер сущностей, сохраняющий данные в связанные модели,
  • совместный вывод и управление записями и категориями этих записей,
  • новые виджеты (файлы, элементы инфоблоков, записи из ОРМ, УРЛ, пользователи, визуальный редактор),
  • возможность создания интерфейсов, не завязанных на ОРМ-моделях,
  • объектно-ориентированное описание интерфейса админки.

Ближе к телу

Сейчас я покажу вам, на сколько просто и быстро вы теперь можете создавать прекрасные интерфейсы в панели управления. Сделаем раздел по управлению новостями.

Подключите «Админ-хелпер» к своему проекту через «Композер»:

Подключение генератора.

composer require digitalwand/digitalwand.admin_helper

Примера ради, представим, что у вас есть модуль: local/modules/demo.adminhelper. Как вы помните, все классы должны начинаться с неймспейса Demo\AdminHelper, что бы работала автозагрузка классов.

Структура модуля.

В каталоге lib вашего модуля создайте каталог под сущность новостей: demo.adminhelper/lib/news. В нём мы будем размещать всё, что так или иначе связано с сущностью новостей. А всё относящееся к интерфейсу панели управления «Битрикса» — в каталог demo.adminhelper/lib/news/admininterface.

Создадим модель. Подразумевается, что с ОРМ «Битрикса» вы знакомы. Модель предельно простая:

Модель новостей.

<?php

namespace Demo\AdminHelper\News;

use Bitrix\Main\Entity\DataManager;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\Type\DateTime;

Loc::loadMessages(__FILE__);

/**
 * Модель новостей.
 */
class NewsTable extends DataManager
{
    /**
     * {@inheritdoc}
     */
    public static function getTableName()
    {
        return 'd_ah_news';
    }

    /**
     * {@inheritdoc}
     */
    public static function getMap()
    {
        return array(
            'ID' => array(
                'data_type' => 'integer',
                'primary' => true,
                'autocomplete' => true,
            ),
            'DATE_CREATE' => array(
                'data_type' => 'datetime',
                'title' => Loc::getMessage('DEMO_AH_NEWS_DATE_CREATE'),
                'default_value' => new DateTime()
            ),
            'CREATED_BY' => array(
                'data_type' => 'integer',
                'title' => Loc::getMessage('DEMO_AH_NEWS_CREATED_BY'),
                'default_value' => static::getUserId()
            ),
            'MODIFIED_BY' => array(
                'data_type' => 'integer',
                'title' => Loc::getMessage('DEMO_AH_NEWS_MODIFIED_BY'),
                'default_value' => static::getUserId()
            ),
            'TITLE' => array(
                'data_type' => 'string',
                'title' => Loc::getMessage('DEMO_AH_NEWS_TITLE')
            ),
            'TEXT' => array(
                'data_type' => 'text',
                'title' => Loc::getMessage('DEMO_AH_NEWS_TEXT')
            ),
            // Для всех полей, используемых визивигом, нужно создавать в таблице атрибут с суффиксом _TEXT_TYPE.
            // В нём будет храниться информация о типе сохранённого контента (ХТМЛ или обычный текст).
            'TEXT_TEXT_TYPE' => array(
                'data_type' => 'string'
            ),
            'SOURCE' => array(
                'data_type' => 'string',
                'title' => Loc::getMessage('DEMO_AH_NEWS_SOURCE')
            ),
            // Хранением файлов занимается Битрикс (хотя это вовсе необязательно, вы можете описать свою логику).
            // В атрибуте таблицы будет хранится идентификатор файла.
            'IMAGE' => array(
                'data_type' => 'integer',
                'title' => Loc::getMessage('DEMO_AH_NEWS_IMAGE')
            ),
        );
    }

    /**
     * {@inheritdoc}
     */
    public static function update($primary, array $data)
    {
        $data['MODIFIED_BY'] = static::getUserId();

        return parent::update($primary, $data);
    }

    /**
     * Возвращает идентификатор пользователя.
     *
     * @return int|null
     */
    public static function getUserId()
    {
        global $USER;

        return $USER->GetID();
    }
}

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

Описание интерфейса.

<?php

namespace Demo\AdminHelper\News\AdminInterface;

use Bitrix\Main\Localization\Loc;
use DigitalWand\AdminHelper\Helper\AdminInterface;
use DigitalWand\AdminHelper\Widget\DateTimeWidget;
use DigitalWand\AdminHelper\Widget\FileWidget;
use DigitalWand\AdminHelper\Widget\NumberWidget;
use DigitalWand\AdminHelper\Widget\StringWidget;
use DigitalWand\AdminHelper\Widget\UrlWidget;
use DigitalWand\AdminHelper\Widget\UserWidget;
use DigitalWand\AdminHelper\Widget\VisualEditorWidget;

Loc::loadMessages(__FILE__);

/**
 * Описание интерфейса (табок и полей) админки новостей.
 *
 * {@inheritdoc}
 */
class NewsAdminInterface extends AdminInterface
{
    /**
     * {@inheritdoc}
     */
    public function fields()
    {
        return array(
            'MAIN' => array(
                'NAME' => Loc::getMessage('DEMO_AH_NEWS'),
                'FIELDS' => array(
                    'ID' => array(
                        'WIDGET' => new NumberWidget(),
                        'READONLY' => true,
                        'FILTER' => true,
                        'HIDE_WHEN_CREATE' => true
                    ),
                    'TITLE' => array(
                        'WIDGET' => new StringWidget(),
                        'SIZE' => '80',
                        'FILTER' => '%',
                        'REQUIRED' => true
                    ),
                    'TEXT' => array(
                        'WIDGET' => new VisualEditorWidget(),
                        'HEADER' => false
                    ),
                    'SOURCE' => array(
                        'WIDGET' => new UrlWidget(),
                        'HEADER' => false
                    ),
                    'IMAGE' => array(
                        'WIDGET' => new FileWidget(),
                        'IMAGE' => true,
                        'HEADER' => false
                    ),
                    'DATE_CREATE' => array(
                        'WIDGET' => new DateTimeWidget(),
                        'READONLY' => true,
                        'HIDE_WHEN_CREATE' => true
                    ),
                    'CREATED_BY' => array(
                        'WIDGET' => new UserWidget(),
                        'READONLY' => true,
                        'HIDE_WHEN_CREATE' => true
                    ),
                    'MODIFIED_BY' => array(
                        'WIDGET' => new UserWidget(),
                        'READONLY' => true,
                        'HIDE_WHEN_CREATE' => true
                    ),
                )
            )
        );
    }

    /**
     * {@inheritdoc}
     */
    public function helpers()
    {
        return array(
            '\Demo\AdminHelper\News\AdminInterface\NewsListHelper',
            '\Demo\AdminHelper\News\AdminInterface\NewsEditHelper'
        );
    }
}

Обратите внимание на описание полей (секция FIELDS). Каждое поле — это какой-то виджет. Виджеты представляет собой класс, занимающийся выводом представления поля, а так же предобработкой данных перед сохранением модели (но увлекаться этим не стоит, управлением данных должна заниматься модель). Виджеты имеют настройки, с помощью которых ими можно управлять. А если настроек недостаточно, вы без труда можете создать свой или расширить существующий виджет.

Далее нужно создать хелперы, которые будут заниматься «отрисовкой» страниц в панели управления. Хелпер списка новостей:

Страницы в панели управления.

<?php

namespace Demo\AdminHelper\News\AdminInterface;

use DigitalWand\AdminHelper\Helper\AdminListHelper;

/**
 * Хелпер описывает интерфейс, выводящий список новостей.
 *
 * {@inheritdoc}
 */
class NewsListHelper extends AdminListHelper
{
	protected static $model = '\Demo\AdminHelper\News\NewsTable';
}

И хелпер формы редактирования новости:

<?php

namespace Demo\AdminHelper\News\AdminInterface;

use DigitalWand\AdminHelper\Helper\AdminEditHelper;

/**
 * Хелпер описывает интерфейс, выводящий форму редактирования новости.
 *
 * {@inheritdoc}
 */
class NewsEditHelper extends AdminEditHelper
{
    protected static $model = '\Demo\AdminHelper\News\NewsTable';
}

Как видите, всего за пару минут мы написали простую админку управления новостями.

Пример рассмотренного модуля вы можете найти у меня на «Гитхабе». Помните о редакторах, делайте хорошие, удобные интерфейсы в админке, ведь теперь это просто!

Про «Битрикс-эксперт»

В начале года мы с Игорем Цупко начали работу над проектом под названием «Битрикс-эксперты». Точнее всего его предназначение отражает цитата с нашего сайта:

В сети опубликовано не так много ценной технической информации о «Битриксе».
Наш проект посвящён технологиям, решениям и людям, которые с работают с платформой.
Повышайте свой уровень знаний, присоединяйтесь к экспертам!

Выполняю обещание, рассказываю подробности. Наша цель — объединить экспертов, поделиться накопленными знаниями и повысить технический уровень сообщества, использующего по тому или иному стечению обстоятельств «Битрикс».

Мы публикуем обучающие статьи и проводим встречи сообщества:

На «Гитхабе» есть наша организация с лучшими открытыми решениями для «1С-Битрикса»:

Немного лирики

У меня проект вызывает двоякие чувства. По техническим характеристикам «Битрикс» не способен конкурировать с другими фреймворками (да, компания «1С-Битрикс» позиционирует свой продукт именно как фреймворк), и он затормаживает развитие ПХП-разработчика: я неоднократно сталкивался с тем, что хороший ПХП-стажёр (на «Йии», «Симфони» или др. популярном фреймворке) находится на одном уровне с начинающим ведущим «битриксоидом». Но «Битрикс» имеет большую долю на отечественном рынке ЦМС и, как следствие, тысячи разработчиков, по разным причинам начинающих работать с ним. Так случилось и со мной: «Битрикс» — система (к счастью, не единственная), на которой мне посчастливилось делать отличные, полезные сайты, работая в «Нотамедии».

Кто-то говорит, что «Битрикс» — отстой, на нём ничего нормального не сделаешь, он не следует общепринятым стандартам, а решения, реализованные даже в новом ядре, вызывают чувства ужаса и полного разочарования в платформе. Что ж, иногда я так же думаю и говорю коллегам. Это правда, но это не означает, что вы должны застрять на уровне функционального, не следующего популярным шаблонам проектирования, кода. Всё в ваших руках: изучайте ООП, шаблоны проектирования, технические решения в популярных фреймворках. Совершенствуйте свои знания и проекты. Используйте современные технологии разработки ПО. Не ограничивайте свой кругозор одним лишь «Битриксом» — иначе в вас умрёт программист и вы будете простым кодером.

Присоединяйтесь!

Проект медленно, но верно обрастает интересными публикациями и полезными решениями. И вы тоже можете принять участие в этом процессе. Присоединяйтесь!

«Слэйт»

Недавно зарелизилась первая версия ББК, а вместе с ней и сайт проекта, о котором я хочу вам рассказать. Точнее, о «Слэйте» — каркасе этого сайта.

Slate

«Слэйт» представляет собой шаблон «резинового» сайта-одностраничника с возможностью полной кастомизации внешнего вида. Содержимое для страниц собирается из маркдаун-файлов. Хоть проект и позиционируется как конструктор промостраниц для документации АПИ (чаще всего его используют именно в этих целях), его гибкость позволяет разрабатывать и небольшие статичные сайты. Примером тому сайт ББК — он содержит несколько разделов, каждый из которых состоит из своего набора маркдаун-файлов.

К слову, сайт ББК состоит из двух репозиториев: самого сайта со «Слэйтом», файлами для главной страницы, и репозитория с документацией. Такое разделение удобно с точки зрения коллективных доработок документации, потому как она находится в отдельном репозитории, доступном для правок любому желающему. Да и к тому же, история коммитов документации отделена от истории основного сайта.

А теперь вернёмся к «Слэйту»…

Как с этим жить

Вам потребуется билд-сервер — машина с установленным «Руби» — для сборки всех кусочков страницы воедино: ЦСС-файлы, ява-скрипты, маркдаун-файлы. Это можно делать и на боевом сервере, прямо во время публикации новой версии, но хорошей практикой является обратное — сборка не на бою, тестирование и только в случае успеха — выкатка в бой уже собранной версии.

На «Гитхабе» есть документация, в которой подробно освещены вопросы, начиная от установки и сборки билда, заканчивая возможностями по  кастомизации «Слэйта».

Итого, схема работы следующая.

  1. Правим ЦСС, ЯС, ХТМЛ.
  2. Размещаем .md-файл с текстом, который хотим видеть на странице.
  3. Запускаем консольную команду и получаем в каталоге build/ готовый сайт.


Если вам нужно быстро выкатить документацию АПИ с приятным резиновым дизайном, не теряя время на разработку сайта — берите «Слэйт».

Сайты, сделанные на «Слэйте»:

Bex\Tools

В апреле я опубликовал бета-версию инструментария для битрикс-разработчиков — Bex\Tools, позволяющий получать по символьным кодам идентификаторы инфоблоков и их свойств.

Откровенно говоря, сейчас этот инструмент является красивым «костылём», если вдуматься в архитектуру инфоблоков «Битрикса» :-) Но работать без него невозможно (идентификаторы записей отличаются на разных площадках: бой, тест, дев и т. д.).

А недавно я выпустил версию 1.x. Концепт и задачи, которые решает Bex\Tools, остались теми же, но появились новые возможности и более удобное АПИ:

  • получение идентификаторов групп пользователей по символьному коду (и наоборот),
  • предварительная генерация кеша, сразу же после внесения изменений в редактируемую запись,
  • запрет на создание инфоблоков и групп пользователей без символьных кодов (выводится человекопонятное сообщение об обязательности этого поля),
  • настройка времени жизни и каталога хранения кеша,
  • удобное АПИ:
<?php
use Bex\Tools\IblockTools;
use Bex\Tools\GroupTools;

// Инфоблоки
$iblockFinder = IblockTools::find('iblock_type', 'iblock_code');
$iblockId = $iblockFinder->id();
$propEnumId = $iblockFinder->propEnumId('PROP_CODE', 'VALUE_XML_ID');

// Группы пользователей
$groupId = GroupTools::findById(3)->code();

Подключить Bex\Tools к проекту проще всего, если у вас установлен «Композер»:

Техтребования
1. ПХП версии 5.4 или старше.
2. «Битрикс» версии 15.0.2 или старше.
3. «Композер».

composer require bitrix-expert/tools

В вики «Гитхаба» находится документация с описанием техтребований, особенностей и возможностей библиотеки.

«Финкс» и несколько БД

Несколько месяцев назад мне потребовалось подобрать ПХП-инструмент миграций БД для проекта на «Битриксе». Одним из требований была поддержка нескольких баз данных.

За время поиска я рассмотрел такие варианты, как «Илюминейт», миграции «Доктрины» и различные опенсорсные «битриксовые» (и не только) поделки. Но по соображениям простоты использования и функциональности, выбор пал на «Финкс»: он не привязан ни к какому фреймворку, может работать с шардами БД и имеет интуитивно понятное АПИ. Однако, АПИ на столько простое, что по началу к нему нужно привыкнуть. Но обо всём по порядку.


Phinx

«Финкс» — опенсорсная ПХП-библиотека для миграций БД, разрабатываемая Робом Морганом. Библиотеку можно применять в любом ПХП-проекте, независимо от используемого в нём фреймворка. Единственное, что «Финкс» тянет с собой со стороны — это несколько компонентов «Симфони», обеспечивающих консольное взаимодействие с мигратором БД.

Поддерживаемые по-умолчанию БД: MySQL, PostgreSQL, SQLite, SQL Server. Кроме этого, есть возможность зарегистрировать свои адаптеры.

АПИ

У библиотеки приятное АПИ в классе миграций. Посмотрите пример из документации:

public function change()
{
        // create the table
        $table = $this->table('user_logins');
        $table->addColumn('user_id', 'integer')
              ->addColumn('created', 'datetime')
              ->create();
}

В версии 0.2.0 был введён метод change(), логически объединяющий в себе выполнение и откат миграции. В случае отката, «Финкс» проанализирует произведённые действия при выполнении миграции и выполнит обратный алгоритм. Поддержка классических методов up() и down(), при этом, осталась.

Несколько БД

Официально, в документации нет ни слова о поддержке multiple database, и даже заведена на «Гитхабе» issue по этому поводу. Однако, решение нашлось без особого труда, стоило лишь немного изучить структуру и конфигурацию библиотеки. Рецепт прост и сейчас мы его рассмотрим. Полагаю, что с документацией «Финкса» вы уже знакомы.

Для каждой БД, миграции которой необходимо покрыть «Финксом», создаётся конфигурационный файл. Таким образом, получаем ряд yml-файлов:

Важно прописывать в конфигах для каждой базы уникальное название таблицы логов миграций (параметр default_migration_table), что бы у вас была возможность при необходимости хранить таблицы двух шардов в одной БД. В противном случае, «Финкс» будет записывать логи двух шардов в одну таблицу, что рано или поздно приведёт к их конфликту. И конечно же, нужно складывать файлы миграций в отдельные каталоги под каждую БД.

Что бы упростить выполнение миграций и ускорить добавление конфигов новых БД, вы можете написать свою реализацию консольной команды выполнения миграций, которая будет искать в каталоге конфигов yml-файлы, и уже для каждого из них по очереди запускать выполнение миграций. Пример моей команды можете найти на «Гисте».

Ваш фреймворк + «Финкс»

«Финкс» без проблем можно дополнить функционалом фреймворка, на котором построен ваш сайт. Для этого достаточно разработать консольное приложение, если его ещё у вас нет, которое будет «поднимать» фреймворк, а затем регистрировать в нём консольные команды «Финкса».

Фактически, консольное приложение представляет собой ПХП-файл, запускаемый из консоли, в котором инициализируется ядро фреймворка и подключаются доп. библиотеки.

Волею судеб, в моём случае в связке с «Финксом» используется «Битрикс». Благодаря этому, операции над инфоблоками, пользователями, группами и пр. «битриксовыми» структурами без проблем мигрируются с площадки на площадку.

Недостатки

Учитывая, что «Финкс» ещё не дошёл даже до версии 1.0.0, назвать минусами то, что было обнаружено мною за несколько месяцев его использования на паре проектов нельзя. Библиотека имеет хороший потенциал, и для первых версий выглядит достойно.

Порядок и беспорядок в коде

Приведу пример в программировании, однако отнести его можно к любому делу.

Любой популярный фреймворк использует или общепринятые во всём мире (напр., в ПХП есть ПСР) или свои персональные стандарты (так бывает, тут уж ничего не поделаешь).

Нет ничего хуже, когда в проекте образуется зоопарк стилей написания кода. Ситуация: Вася пишет согласно ПСР, Петя применяет код-стайл «Вордпресса», а у Саши и вовсе своё чувство прекрасного. В итоге получаем полный зоопарк, сбивающий с толку любого, заглянувшего под капот проекта, программиста.

Если вы сомневаетесь в моём утверждении, подумайте, что было бы, перестань издательства оформлять свою печать по типографским стандартам? Да вы замучились бы читать книгу, встречая очередной абзац с новым оформлением. То же самое с кодом — и вы, и ваши коллеги, и разработчики, в руки которых в будущем перейдёт проект — его будут читать как книгу изо дня в день.

Ещё одна распространённая проблема код-стайла — комментарии в коде. Они всегда должны быть на языке, де-факто являющимся основным в программировании — английском. Выбор любого другого языка для комментариев повлечёт за собой возникновение всё того же зоопарка: рано или поздно в проекте начнут использоваться сторонние библиотеки, оформленные должным образом.

Короче: в чужой монастырь со своим уставом не ходят. Изучите код-стайл фреймворка, проекта, настройте среду разработки и пишите как все. Уважайте коллег.

Релиз первой версии ББК

cover

Несколько дней назад в мастер-ветку ББК была вмержена версия 1.0.0. По правде сказать, даже я, его создатель, не ожидал этого релиза. Работы по улучшению компонентов начались сразу же после релиза бета-версии 0.0.1 и продолжаются по сей день. Но в какой-то момент я понял, что есть ещё много идей, которые необходимо реализовать в ББК, но в то же время, был уже существенный пласт наработок, которые применяются в нескольких секретных проектах.

Нововведения

К важным отличиям первой стабильной версии можно отнести перенос бизнес-логики в модуле и запуск сайта с полноценной документацией.

В документации описаны главные особенности проекта и приведены примеры решения ряда типовых и не очень задач. Раздел «Возможности» ознакомит впервые пришедших с ключевыми фичами ББК. «Архитектура» расскажет о структуре сборки и том, как её «готовить». «Примеры» наглядно покажут, как красиво, используя ББК, можно решать задачи по разработке компонентов.

Документация поможет понять идеологию, мощь и красоту ББК. Напоминаю, что вы не найдёте в ней полного списка методов классов и, уж тем более, их описания. Для этого воспользуйтесь своей любимой средой разработки: все классы и методы проекта задокументированы (описания, параметры, возвращаемые результаты, исключения и т. д.), а их названия соответствуют сущностям, с которыми они взаимодействуют.

Документация хранится на «Гитхабе» в виде маркдаун-файлов. Если вы найдёте неточность или сможете дополнить её, пожалуйста, форкнитесь и сделайте пул-реквест.

Битрикс-эксперты

Относительно недавно мы с Игорем Цупко запустили бета-версию проекта «Битрикс-эксперты», о котором я расскажу вам позже. ББК стал частью этого проекта, что повлекло за собой два изменения: появилась приставка Bex\ в неймспейсах и сайт размещается на платформе «Бекса».

Продолжение следует…

Тем временем, продолжается работа над ББК 2.0. Забегая вперёд скажу, что уже многое сделано и все интересующие могут найти рабочие исходники в соседних ветках на «Гитхабе». Основной особенностью второй версии станет уход от трейтов, на смену котороым придут плагины — классы, подключаемые и выполняемые параллельно с компонентом, но изолированно от него.

ББК — открытый, не имеющий аналогов в битрикс-сообществе проект. Я приглашаю всех желающих принять участие в его развитии. Если вы хотите получить ценный опыт, если вам надоела техническая несостоятельность «Битрикса» — пишите мне на почту: nik@samokhvalov.info. Вместе мы выведем битрикс-разработку на новый уровень качества.

Ищу сеньоров

Вот уже несколько лет я работаю в агентстве «Нотамедиа». Недавно мне довелось взяться за очень большой и интересный проект: разработку сайта по сервис-ориентированной архитектуре. На проекте используются фреймворки «Битрикс» и «Йии», различные инструменты (миграции, виртуализации, управление библиотеками) и всякие модные и эффективные технологии. Я ищу коллег, готовых разделить со мной трудности и прелести его разработки.

«Битриксоиды»

Вопреки мейнстриму битрикс-разработки, никакого «чик-чик и в продакшн» — только ООП, только MVC. Модули, компоненты, библиотеки, миграции, высокие нагрузки и многое другое ждёт вас.

«Йии»-разработчики

Как и подразумевает SOA, не «Битриксом» единым. Есть много работы и по второму «Йии». Высокие нагрузки, разработка библиотек и модулей прилагаются.

Работа удалённая. Требования для всех одинаковые:

  • отличные знания предметной области,
  • ООП, MVC, система контроля версий — само собой,
  • опыт разработки модулей,
  • следование регламентам, умение работать в команде,
  • способность искать и находить решения.

Рассматриваю предложения как одиночек, так и команд. Присылайте письмо с темой «Вакансия разработчика» и рассказом о себе:

nik@notamedia.ru

Так же, укажите ссылки на выполненные работы, ваш «Гитхаб» и скайп.

Ранее Ctrl + ↓