Проблемы и принципы кастомизации коробочной версии Битрикс24



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

Для этой цели есть разные платформы, Битрикс24 — одна из самых популярных. Скорость развития и появления новых фич, качественная поддержка и богатый набор инструментов, который даже с минимальной кастомизацией покрывает базовые потребности большинства разных компаний, делает эту платформу практически идеальным решением для бизнеса.

Но, увы, не для разработчиков, особенно начинающих.

Специалисты пишут обучающие статьи по 1С-Битрикс и разным модулям системы, но после их прочтения у новичков все равно нет общей картинки и понимания, как же все устроено на этой платформе. В интернете есть статьи про best practice разработки на фреймворках, но разработку на Б24 обходят стороной. Есть и компании, которые научились делать качественный продукт, но они держат свои наработки в тайне.

Если хотите узнать, как можно работать с Битрикс24, сохранив при этом исходный цвет волос, добро пожаловать под кат.

Юлия Силантьева — ведущий разработчик Битрикс24 в digital-агентстве полного цикла ITECH.

Что из себя представляет Битрикс24


Наверное, все, кто по долгу службы или из интереса хоть раз сталкивался с разработкой под Битрикс24, знают продукт 1С-Битрикс: Управление сайтом (БУС). Это CMS для создания сайтов или, по определению самого Битрикса, система управления интернет-ресурсами.

Но мало кто знает, что корпоративный портал Битрикс24 — это сервис, написанный на 1С-Битрикс.

Битрикс24 имеет 2 решения: облачное и коробочное. Отличаются они, как понятно из названия, местом размещения кода портала: на серверах Битрикс или на сервере клиента. Коробка дает больший простор для фантазии, но имеет более дорогую лицензию и нуждается в поддержке серверов, а облако стоит дешевле, но имеет ряд ограничений на кастомизацию.

В целом же дорабатывать можно как облачные, так и коробочные версии. Какое решение использовать, зависит от нужд клиента.

В рамках этой статьи я хочу более детально рассмотреть общие подходы к разработке на коробочной версии Битрикс24.

Коробочное решение: архитектура продукта


Внутри сервиса лежит Bitrix Framework, являющийся ядром сайта.

Bitrix Framework содержит модули и компоненты:

  1. Модуль — это модель данных и API для доступа к этим данным. Весь продукт структурно разбит на модули, отвечающие за ту или иную область применения: Интранет, Задачи, CRM, Бизнес-процессы и другие.
  2. Компонент — это контроллер и представление для использования в публичном разделе. Компонент с помощью API одного или нескольких модулей манипулирует данными. Шаблон компонента (представление) выводит данные на страницу. Компоненты входят в состав модулей, но решают более узкую, частную задачу, например, выводят список задач или карточку сделки. Вся публичная часть сервиса построена на вызове со страницы различных компонентов. К примеру, страница списка сделок CRM состоит из компонентов меню, фильтра и самого списка.



Ядро Bitrix Framework — файлы, находящиеся в директории /bitrix. Вносить изменения в ядро нельзя (Вообще. Никогда. Даже не думайте об этом) в силу нескольких причин:

  • при обновлении системы внесенные изменения затрутся;
  • при изменении ядра владелец лицензии потеряет право на техническую поддержку;
  • при изменении ядра разработчиком сайта система может работать некорректно, так как ядро — сложная структура, требующая учета работы всех модулей.

Однако есть еще один большой нюанс.

Портал Битрикс24, как и любой другой сайт, написанный на 1С-Битрикс, включает в себя шаблон сайта, публичную часть (т. е. разделы и страницы), компоненты и шаблоны компонентов. А отличается он от обычного сайта тем, что при установке обновлений все вышеперечисленное также обновляется. Поэтому публичную часть, шаблон Битрикс24 и стандартные компоненты также можно считать ядром Битрикс24. А это значит, что в них тоже нельзя вносить изменения (как минимум потому, что они будут удалены при очередном обновлении).



Но лазейки все же есть, и безболезненно внести изменения реально.

Обновляемость


Обновления продукта очень важны. Они решают проблемы с безопасностью, закрывают имеющиеся баги (правда, иногда тут же плодят новые :) ). Иногда с обновлениями прилетают новые крутые плюшки.

Крупные новинки Битриксоиды презентуют на своих конференциях, которые проводят каждые полгода (последняя прошла в апреле в формате онлайн), но выпускают их патчами практически каждый день. Держать руку на пульсе помогает email-рассылка об обновлениях. Подключить ее можно в админке любого портала на Битрикс24: Marketplace -> Обновление платформы -> Дополнительно -> Подписаться на получение информации об обновлениях по почте.



Битрикс советует устанавливать обновления, как только они становятся доступными. Но я бы рекомендовала этого совета придерживаться не всегда. Желательно устанавливать обновления в моменты минимальной нагрузки на сервер, например, в выходные или ночью — по закону Мерфи, в момент, когда требуется сделать все быстро и незаметно, Битрикс падает с ошибкой при обновлении. :) Конечно, это бывает нечасто, но подстраховаться не помешает. И не забывайте делать бекапы перед запуском обновлений.

Принципы кастомизации


Вся разработка должна вестись в одной папке — /local.

Чтобы добавить свой функционал в сайт, написанный на БУС, достаточно найти нужный компонент, скопировать его в папку /local, кастомизировать класс и шаблон компонента.

На Битрикс24 этот подход является в корне неверным.

Во-первых, если скопировать шаблон в каталог /local, система всегда будет использовать его вместо стандартного. Это означает, что после очередного обновления клиент не увидит новых функций, которые могли быть добавлены в этот компонент, а также не будут исправлены ошибки, если они есть. Вручную поддерживать актуальность компонентов сложно, а если изменения носили глобальный характер, то невозможно.

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

Что же в таком случае делать разработчику, которому необходимо изменить или добавить какую-то логику?

Есть несколько вариантов решения проблемы:

  • воспользоваться определенными разрешенными точками встройки в интерфейс и отложенными функциями;
  • изменить результат исполнения компонента и добавить к нему свои стили и скрипты;
  • создать свой бизнес-процесс или настроить роботов;
  • привязаться к событиям на стороне PHP или JS;
  • создать свой тип поля (например, виджет);
  • написать свое приложение;
  • написать свой модуль.

Для каждой задачи приходится подбирать наиболее подходящий инструмент.

Local


Основная папка, куда может и должен запустить руки разработчик, — /local. Изначально на проекте ее нет, так что наполнять папку можно по своему усмотрению, но в части путей важно следовать указаниям Битрикс, иначе платформа не увидит кастомизированные компоненты и модули.

Предлагаем универсальную структуру папки /local:



  • activities содержит действия бизнес-процессов.
  • components содержит самописные компоненты (не путать с кастомизированными компонентами Битрикс!).
  • css, fonts, images, js содержат соответствующие файлы и ресурсы.
  • modules содержит самописные модули системы. Все независимые блоки кода следует группировать в модули для облегчения дальнейшего сопровождения, подключения и использования данного кода.
  • php_interface содержит php-скрипты. Здесь могут храниться обработчики ajax-запросов, классы и файлы, не принадлежащие ни к одному модулю, обработчики событий.
    • init.php — специальный файл в рамках структуры Bitrix Framework. Он автоматически подключается в прологе. Файл может содержать в себе инициализацию обработчиков событий, подключение дополнительных функций, объявление библиотек. Чтобы init.php не превращался в свалку непонятного кода, следует размещать код, логически группируя по файлам и классам, а в init.php оставлять только подключения. Кстати, подключать классы и файлы можно через модули, __autoload Битрикса или через composer.

  • templates содержит кастомизацию компонентов Битрикс.
  • tools может содержать исполняемые через cron файлы.

Структура очень гибкая: когда это необходимо (например, при появлении новых задач), можно дополнить папку новыми разделами, а не тратить время на разработку новой структуры.

При обработке папок приоритет всегда у папки /local перед /bitrix. Это означает, что, если в /local/templates/ и /bitrix/templates/ находиться шаблоны сайта с одинаковым названием, то подключится шаблон из /local.

Отсюда следует важное замечание: чтобы Битрикс понимал, что следует забирать кастомизированные шаблоны компонентов из папки /local, она должна обладать определенной структурой:

/local/templates/шаблон_сайта/components/namespace/название_компонента/название_шаблона/.

При этом папка шаблона сайта в /local (речь идет о Битрикс24, а не БУС) должна содержать шаблон, созданный компанией Битрикс (/bitrix/templates/bitrix24/). Только в этом случае система поймет, что необходимо подключить компонент из /local.

Что еще важно иметь в виду при разработке?


1. Все языковые переменные обязательно должны храниться в соответствующих ланговых файлах. Языковой файл представляет из себя php-скрипт, хранящий переводы языковых фраз на тот или иной язык. Данный скрипт состоит из массива $MESS, ключи которого — идентификаторы языковых фраз, а значения — переводы на соответствующий язык.

Для каждого языка существует свой набор языковых файлов, хранящихся в подкаталогах /lang/ структуры файлов системы или модуля.

Почему важно выносить все тексты в отдельные файлы? При переводе вашего портала на другой язык будет достаточно собрать и перевести только фразы из языковых файлов, создав при этом новые разделы для соответствующего языка. Не нужно будет искать места, где могут встречаться тексты в коде, и вносить изменения непосредственно в код портала.

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

2. При работе с компонентами не надо обращаться к базе напрямую. Концепция работы с продуктом предполагает работу с данными через функции API. Структура данных может меняться от версии к версии, а функции сохраняют обратную совместимость. Битрикс настоятельно не рекомендует использовать прямые запросы к БД, так как это может нарушить целостность данных и привести к неработоспособности системы.

Более того, если речь идет о системных таблицах самого Bitrix Framework, это не просто не приветствуется, а в принципе не поддерживается. Необходимо работать с ними через API системы, так как физическая структура БД может измениться, а работа даже самого древнего API гарантирована.

3. Версионировать работу над проектом с помощью системы контроля версий. При этом, в силу особенностей разработки на Битрикс, имеет смысл предусмотреть «особенность» и в настройке репозитория для проекта: разделять файлы ядра и кастомизируемые.

4. Читайте доки. По многим локальным вопросам, особенно общим с 1С-Битрикс, можно найти отдельные статьи или документацию. Для разработчиков, привыкших гуглить сразу на английском, будет сюрпризом, что большинство статей написано на русском. :)

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

Итого


Сегодня можно наблюдать дисбаланс между спросом и предложением на рынке разработки под Битрикс24. Потребность в разработчиках стремительно растет, а многие специалисты не хотят связываться с продуктом от Битрикс, так как знакомы с его старшим и уже практически почившим детищем — БУС.

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

Подробнее
Реклама

Комментарии 5

    +3
    Я просто в шоке от БУС последний версий. Это просто НЕЧТО! Хотя не могу понять что такое последняя версия. некторые вещи не менялись вообще.
    Менеджмент, сотворивший этот монолит, который по ошибке называется сайт с компонентами, должен быть распущен в полном составе. Это техническое безумие.

    1) Компоненты стали на столько усложнены, что не представляется возможным их кастомизация. Сss исходников не поставляем. Дикое легаси обмаза php с js. Если вы правите компонент, то ответ от аякса в этот компонент прилетает из другого компонента. Ну вы задизайнили корзину, а ответка с сервера летит в html c классами которые вы только что поправили, что?? Где то лежит копипаста шаблона?? Начинается работа дантиста — ищи свищи.

    2) В 2020 году в битриксе нет галлереи. Та что есть просто никакая и работает только в php файлах, не работает, если у вас текст в инфоблоках т.е выводите данные из базы. Ну нет галлереи. Маша не зальет фоточки с фотоаппарата на сайт из коробки на страницу «о магазине»

    3) Они просто забили на визуальный редактор и сделали альтернативу — какую то блочную муть в своем любимом стиле — «вы не проживете без копипасты, копипастите больше и сильнее. Аа… вам сложно будет изменять теперь текст на ваших копипастах? Мы учтем — Следующий.»

    4) я вообще молчу что половина кода в компонентах это миллиард галочек из интерфейса, который нужен, если вы используете стандартную тему — или… внимание ее же зелененькую или синенькую. Уровень понимания кастомизаци по битриксу — вот тебе конфиг с цветами — что тебе еще нужно? Как это вообще может прийти в голову? Зачем вообще делать этот функционал?

    5) Вы не можете в хидере узнать, открыта ли страница каталога или карточки товара — уровень условных тегов — проверяй по урлу, чо. И пофигу что они только регуляркой разделятся.

    Папка local — это реально кто-то пришел со стороны и сказал -вы чо, охренели? До каких пор вы свой проект будете размазывать по системным папкам? Вы еще в 2010 году это обещали исправить!
      +1
      так как знакомы с его старшим и уже практически почившим детищем — БУС.

      А можно с этого места по подробнее?
      Я просто в шоке от БУС последний версий

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

        Я с битрикс24 знаком два дня. пока не как программист. Такой мути я давно не видел, без ста грамм не разберёшься. Юзабилити отвратительное, чтобы разобраться пришлось потратить час. На поиск почему не могу написать в группу ушло 15 минут. Никаких тебе подсказок. Тупо в группе нету кнопки написать, а почему, думай сам! Для кого это вообще!?

          0
          Вы бы закопали стюардессу-то. Упокойте ее душу, все равно спагетти-труп плохо пахнет…
            0

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

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое