Интро: Разработка стандартных решений для Битрикс в большинстве случаев представляет собой решение тривиальнейших задач. С каждым новым проектом приходится делать одно и то же снова, и снова, и снова… Но есть способ облегчить себе жизнь — написать библиотеку своих компонентов и даже заработать на них, если они предлагают востребованный функционал.
Условия
Дано: Битрикс редакции «Малый бизнес» — одна штука.
Задача: Научить его принимать платежи Bitcoin и…
И вот тут я задумался — а как? Модулей для интеграции платёжных систем для Битрикс я писал и переписывал немало. Но что делать с Биткоинами? С какой стороны подступиться? Я не знал.
Поиск решения
В процессе довольно продолжительного гугления удалось выйти на платёжную систему, позволяющую принимать BTC и автоматически конвертировать их в валюту, выбранную продавцом в настройках магазина. Тут всё оказалось довольно просто — API есть, Bitcoin в роли валюты принимается, чего вам ещё? Поехали!
Появление идеи
Так как время моё на эту задачу не было практически ничем ограничено, захотелось мне сделать всё «по фэн-шую», а именно не просто сделать обработчик платёжной системы, отдать клиенту и забыть, но и запилить универсальный установочный пакет. У Битрикса, как вы знаете, есть свой Маркетплейс с модулями и решениями, в котором абсолютно свободно можно разместить своё решение и даже брать за него деньги, если считаете свой труд материально ценным. В настоящий момент большинство модулей в Маркетплейс бесплатны. У меня давно уже чесались руки поэкспериментировать в этом направлении и вот, наконец то, подвернулась такая возможность.
Документация
Если API платёжной системы оказалось довольно хорошо документировано и интуитивно понятно (да и понимать особо нечего — пара функций да пример кода), то с инструкциями по производству модулей для Битрикса всё крайне неоднозначно.
С одной стороны она есть, с другой не очень-то мне и помогла. Всё как-то сумбурно, скомкано, постоянные прыжки по тексту в поисках ответов на вопросы. Как кто-то очень точно подметил на форуме самого Битрикса: «Сухие мануалы по модулям лучше даже не открывать — их писали не для тех, кто хочет научиться, а для тех кто уже умеет». Помог неплохой видеоурок, там по крайней мере объясняет живой человек.
Note: Хочу отдельно подчеркнуть, что я совсем не дурак и не тугодум. Это был первый опыт разработки модуля для Marketplace. Сейчас, пройдя этот путь, я вижу что многие вещи на самом деле элементарны, но поиск этих решений в первый раз производился методом «пальцем в небо»
С чего начинается модуль?
Во-первых сам модуль — это просто набор файлов, некоторые из которых выполняются в процессе его установки.
У модуля есть определённая структура каталогов, которая зависит от задач, которые вы собираетесь в своём модуле решать.
Итак, воссоздаём структуру:
Изображение взято из официальной документации.
Здесь необходимо пояснить что к чему. Приведённая на изображении структура папок вряд ли будет у Вас точно такой же. Она избыточна и когда (если?) вы будете разрабатывать свой модуль, от неё останется всего пара папок и пара файлов.
Что из этого является обязательным:
- /install/version.php — файл с номером версии (объявление массива с парой переменных)
- /install/index.php — файл с описанием модуля, содержащий инсталлятор/деинсталлятор модуля. Фактически и является установщиком. Именно он запускается, когда пользователь нажмёт кнопку «Установить». Вернее сам файл, а методы DoInstall / DoUninstall описанные в нём. Кроме того может содержать вспомогательные методы, копирующие файлы в разные директории, выполняющие SQL-запросы и т.д.
- /include.php – подключаемый файл. Он подключается при активации модуля во время выполнения скриптов сайта. То есть по сути это инъекция в сам движок. В нём, например, можно добавить какие-либо фоновые обработчики-агенты, добавить пункты меню в административном интерфейсе и т.п.
Остальные элементы структуры являются вспомогательными:
- /lang/ — директория, в которой должны находиться все чувствительные к кодировке файлы — локализации. Не ленитесь выносить локализацию из кода компонентов в языковые файлы!
- /classes/ — как видно из названий поддиректорий, это основные классы модуля (в том числе для работы с различными БД)
- /install/admin/ | /install/components/ | /install/themes/ — вспомогательные директории, из которых мы будем копировать служебные файлы в процессе установки.
Что бы лучше понять назначение каждого элемента, вы можете посмотреть исходники из архива с шаблонным модулем, на базе котрого мы и будем делать итоговое решение.
В следующей части статьи мы узнаем как применить эти знания на практике, а в третьей части будет описание структуры и назначения обновлений модуля.
Автор: Quiz