25 заметок с тегом

веб-разработка

Позднее Ctrl + ↑

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

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

ООП?

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

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

В «Битриксе» в принципе отсутствует роутинг страниц, основанный на единой точке входа. Под каждую новую страницу на сайте нужно создавать новый ПХП-файл. Тоже самое касается и админки. Сделали новую страницу для админки? Даже не думайте, что этим всё закончится! «Битрикс» не умеет забирать админские страницы из модуля. Ваш модуль при установке или обновлении должен создать эту страницу в каталоге 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';
}

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

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

2016   1С-Битрикс   веб-разработка

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

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

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

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

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

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

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

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

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

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

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

2015   1С-Битрикс   веб-разработка

«Слэйт»

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

Slate

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

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

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

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

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

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

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

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


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

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

2015   веб-разработка

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

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

2015   1С-Битрикс   веб-разработка

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

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

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


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, назвать минусами то, что было обнаружено мною за несколько месяцев его использования на паре проектов нельзя. Библиотека имеет хороший потенциал, и для первых версий выглядит достойно.

2015   веб-разработка

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

cover

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

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

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

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

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

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

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

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

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

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

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

2015   1С-Битрикс   ББК   веб-разработка

Ищу сеньоров

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

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

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

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

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

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

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

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

nik@notamedia.ru

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

2015   веб-разработка

Нововведения и правки «Композер-инсталлера»

Недавно поработал над «Композер-инсталлером»: исправил ошибку в «битриксовом» установщике и добавил доступ к консоли. Что характерно, последняя доработка потребовалась для первой.

Доступ к консоли

В Composer\Installers\BaseInstaller добавлено свойство $io, реализация IOInterface. Отныне можно в консоль выводить уведомления, сообщения об ошибках и даже реагировать на действия пользователя. Парочка примеров:

class BitrixInstaller extends BaseInstaller
{
     protected function templatePath($path, array $vars = array())
     {
          $this->io->writeError('<error>Не хочу устанавливаться!</error>');

          while (true) {
                switch ($this->io->ask('<info>Нажми на клаву [y,n,?]</info> ', '?')) {
                    case 'y':
                        // Пользователь ввёл «y»
                        break 2;

                    case 'n':
                        // Пользователь ввёл «n»
                        break 2;

                    case '?':
                    default:
                        // Пользователь ввёл фиг знает что
                        break;
                }
     }
}

Исправления «битриксового» установщика

Для «Композера» существует установщик «битриксовых» пакетов, который умеет размещать в нужные каталоги сайта модули, компоненты и шаблоны. В первой версии установщика «косяк», нарушающий идеологию «Композера»: пакеты размещались в каталоге local/. Почему это неправильно — расскажу чуть ниже.

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

И зачем?..

Вообще-то, на сайте «Композера» об этом написано, но всё равно довольно часто слышу и читаю подобные вопросы. Идеология менеджера пакетов такова, что устанавливаемые библиотеки не должны находится под версионным контролем проекта («Гит», «Меркуриал» и пр.), менеджер сам будет управлять ими и отслеживать их изменение. В проекте должны версионироваться только конфигурационные файлы, в случае «Композера» — это composer.json и composer.lock.

С внедрением в «Битрикс» поддержки отдельной директории local/ для собственных разработок, каталог bitrix/ стал аналогом каталога vendor/. bitrix/ должен использоваться для системных файлов и сторонних модулей, пакетов, тем и пр. Чаще всего, он размещается в .vcsignore проекта.

2015   1С-Битрикс   веб-разработка   Композер

Ошибка загрузки локальных сайтов в «Хроме»

В 43-й версии «Хрома» появилась какая-то особенность, из-за которой сайты, поднятые локально на доменах вида project.dev перестали открываться: обозреватель возвращает ошибку ERR_ICANN_NAME_COLLISION.

Истинную причину найти не было времени, кто знает — поделитесь. А пока решил проблему заменой .dev на .localhost — единственная зона, с которой «Хром» корректно работает.

2015   веб-разработка

«Адреса сайтов»: перезагрузка

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

Но с сегодняшнего дня модуль скрыт из публичной части маркетплейса и уже больше никогда не будет опубликован, и на то есть свои архитектурные причины. На смену ему придёт «Сайтовод» — улучшенная и дополненная версия. Следите за новостями.

P. S. Поддержка «Адресов сайтов» по-прежнему продолжается.

2015   1С-Битрикс   веб-разработка
Ранее Ctrl + ↓