Пример простого готового решения для Маркетплейса 1С-Битрикс


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

Специально для решения этой проблемы я выпустил собственное простейшее решение с минимальным функционалом (в версии 0.2) – «ПростойАдаптивный Лендинг».

В репозитории на GitHub я опубликовал 5 коммитов, соответствующие 5 стадиям превращения просто сайта в полноценный модуль для Маркета (и его последующее обновление):

  • Стадия 1 – Сайт
    • Стадия 2 – Мастер создания сайта
    • Стадия 3 – Модуль (содержащий мастер)
    • Стадия 4 – архив для отправки в Маркетплейс 1С-Битрикс
    • Стадия 5 - Архив с ОБНОВЛЕНИЕМ для Маркетплейса 1С-Битрикс

Итак, давайте вкратце разберём что содержит каждая из стадий и какие превращения с ней происходят:

Стадия 1 – Сайт

Тут

Структура:

  • Файлы публички – / (от корня сайта)
  • Файлы шаблона сайта – /bitrix/templates/ИД_ШАБЛОНА/

Особенности:

  • Файлы включаемых областей храним в структуре сайта (чтобы можно было легко добавить новые страницы-лендинги в разных разделах сайта и наследовать необходимые «слайды» включаемых областей)
  • Вызов включаемых областей находится на странице index.php(мне это кажется неудобным, поскольку вносит риск повреждения кода вызова компонентов контент-редакторами, но не добавляет никакой пользы. Однако это было обязательным требованием прохождения модерации решения и вызовы были перенесены из шаблона на страницу в версии 0.2.1)

Стадия 2 – Мастер создания сайта

Тут

Структура:

  • Сам модуль - /bitrix/wizards/ПРОСТРАНСТВО_ИМЁН/ИМЯ_МАСТЕРА/..
    • .description.php* - ../.description.php
    • Мастер wizard.php** - ../wizard.php
    • Языковые файлы мастера (визарда и дескрипшена!) - ../lang/ИД_языка/
    • Картинки (используются в мастере установки для ОФОРМЛЕНИЯ процесса установки) - ../images/
    • ЧТО СТАВИМ - ../site/
      • Файлы публички*** - ../public/ИД_ЯЗЫКА/
      • Файлы шаблона**** - ../templates/ИД_ШАБЛОНА/
      • «Сервисы» - ../services/
        • Список сервисов****** - ../.services.php
        • «Типы»/«Группы» сервисов, например MAIN******* - ../main/

Особенности:

  • * - содержит версию мастера (не критично) и массив шагов мастера (важно добавить новые шаги в массив!)
  • ** - Содержит сами шаги мастера, а так же «значения по-умолчанию». Важно в этом файле:
    • Передать значения «по-умолчанию» из первичного массива в соответствующий шаг и там обработать, даже если не планируется их изменять пользовательски
    • В соответствующих шагах заполняем поля, создаём сайты, копируем файлы из папок файлов (раздела «ЧТО СТАВИМ»). Никаких конкретных действий.
    • Недопустимо использование кириллицы!!! Все кириллические символы вставляем языковыми фразами!
  • *** - Содержит копию файлов публички (допустима кириллица). На местах, где предполагается замена контента введёнными в поля мастера пользователем значения, находятся МАКРОСЫ.
  • **** - Содержит копию файлов Шаблона. Важно:
    • НЕ допустима кириллица. Либо использовать языковые файлы, либо макорсы.
    • На местах, где предполагается замена контента введёнными в поля мастера пользователем значения, находятся МАКРОСЫ.
  • ****** - Массив сервисов, подключающихся последовательно. ПРИМЕР:

            'НАЗВАНИЕ_ТИПА/ГРУППЫ' => Array(

                        'NAME' => GetMessage("SERVICE_MAIN_SETTINGS"),

                        'STAGES' => Array(

                                   "файл_сервиса_1.php",

                                   "файл_сервиса_2.php",

                                   "файл_сервиса_3.php",

                        ),

            ),

  • ******* - В папках с названиями групп/типов лежат файлы сервисов. Сервисы осуществляют КОНКРЕТНЫЕ правки. Например, заменяют макросы в файлах публички/шаблоне на значения из мастера установки (в примере) или импортируют инфоблоки (нет в примере).

Принцип запаковки сайта:

  1. Заливаем файлы публички в /bitrix/wizards/ПРОСТРАНСТВО_ИМЁН/ИМЯ_МАСТЕРА/site/public/ИД_ЯЗЫКА/
  2. Заливаем шаблон в /bitrix/wizards/ПРОСТРАНСТВО_ИМЁН/ИМЯ_МАСТЕРА/site/templates/ИД_шаблона/
  3. Заменяем нужные куски макросами
  4. Пишем визард и дескрипшн по шагам с переменными, которые важны для публички/шаблона
  5. Пишем сервисы, работающие с макросами
  6. Оформляем (пишем языковые фразы и т.п.)

Стадия 3 – Модуль

Тут

Структура:

  • * - /bitrix/modules/КОД_ПАРТНЁРА.КОД_МОДУЛЯ/..
    • Обязательный инклуд** - ../include.php
    • Языковые файлы модуля - ../lang/ИД_ЯЗЫКА/
    • инсталлятор модуля - ../install/
      • Версия модуля*** - ../version.php
      • Инсталлятор**** - ../index.php
      • Мастер установки***** - ../wizards/
      • Компоненты****** - ../components/

Особенности:

  • * - код партнёра маленькими буквами. Код модуля тоже маленькими латинскими буквами без подчёркиваний (в отличие от шаблона/мастера)
  • ** - Если вы не реализуете защиту демо-версии, то он может быть и пустым.
  • *** - Критичное значение для маркета!
  • **** - Содержит код модуля с партнёром.
  • ***** - Копия содержимого соответствующей папки предыдущей стадии. При установке решения копируется в папку /bitrix/wizards/, переводя вас к Стадии 2.
  • ****** - В примере не представлено. Просто копируется в соответсвующую папку при установке модуля.

Принцип запаковки

  1. Делаем мастер.
  2. Оформляем всякую мишуру по заготовке.

Стадия 4 – Архив для Маркета

Тут

Принцип запаковки:

  1. Берём содержимое папки /bitrix/modules/КОД_ПАРТНЁРА.КОД_МОДУЛЯ/ и складываем в папку /.last_version/
  2. Архивируем папку /.last_version/ в архив .last_version.zip

Стадия 5 - Обновление для Маркета

Тут

Структура:

Идентична архиву для маркета за несколькими исключениями*

  • ** - /НОМЕР_ВЕРСИИ/..
    • Текстовое описание обновления*** - ../description.ru
    • Установщик обновления**** - updater.php

Особенности:

  • * - К обновлению прикладываются только ИЗМЕНИВШИЕСЯ файлы
  • ** - Вместо /.last_version/ в имени папки используется номер версии модуля (должен совпадать с номером версии модуля в /НОМЕР_ВЕРСИИ/install/version.php)
  • *** - Текстовый файл, используется для оформления информации об обновлении в Маркетплейсе 1С-Битрикс
  • **** - В простейшем случае может быть использован образец из репозитория, никаких специфичных действий в него пока не заложено.

Принцип запаковки:

  1. Берём архив с последним стабильным модулем (полным), все изменения будут в мастере установки сайта.
  2. Удаляем немодифицированные файлы
  3. Оформляем "сопроводительные файлы" (апдейтер, версию модуля, описание)
  4. Архивируем папку со всем содержимым в НОМЕР_ВЕРСИИ.zip



Ура, модуль/обновление готовы к отправке в Маркет!


Пример простого готового решения для Маркетплейса 1С-Битрикс

<p> Маркетплейсу 1С-Битрикс уже более 3 лет, а полноценных учебных материалов с примерами разработки на мой взгляд нет до сих пор. Эта проблема не решилась даже с выходом официального учебного курса 1С-Битрикс с видео-уроками. Возможно, опытным разработчикам достаточно документации API, однако я уже не первый год, задумываясь о том, как сделать своё решение, не знал даже с чего начать. </p> <p> Специально для решения этой проблемы я выпустил собственное простейшее решение с минимальным функционалом (в версии 0.2) – «<a href="http://marketplace.1c-bitrix.ru/solutions/coffeediz.startbootstraplandingpage/" target="_blank">ПростойАдаптивный Лендинг</a>». </p> <p> В <a href="https://github.com/lexnekr/bitrix_example_for_marketplace/commits/master" target="_blank">репозитории</a> на GitHub я опубликовал 5 коммитов, соответствующие 5 стадиям превращения просто сайта в полноценный модуль для Маркета (и его последующее обновление): </p> <ul type="disc"> <li>Стадия 1 – Сайт</li> <ul type="disc"> <li>Стадия 2 – Мастер создания сайта</li> <li>Стадия 3 – Модуль (содержащий мастер)</li> <li>Стадия 4 – архив для отправки в Маркетплейс 1С-Битрикс</li> <li>Стадия 5 - Архив с ОБНОВЛЕНИЕМ для Маркетплейса 1С-Битрикс</li> </ul> </ul> <p> Итак, давайте вкратце разберём что содержит каждая из стадий и какие превращения с ней происходят: </p> <p> </p> <h3>Стадия 1 – Сайт</h3> <p> <a href="https://github.com/lexnekr/bitrix_example_for_marketplace/tree/9dbe39c8638e1f43437503ea3a1a09a88724926f" target="_blank">Тут</a> </p> <p> <b>Структура:</b> </p> <ul type="disc"> <li>Файлы публички – / (от корня сайта)</li> <li>Файлы шаблона сайта – /bitrix/templates/ИД_ШАБЛОНА/</li> </ul> <p> <b>Особенности:</b> </p> <ul type="disc"> <li>Файлы включаемых областей храним в структуре сайта (чтобы можно было легко добавить новые страницы-лендинги в разных разделах сайта и наследовать необходимые «слайды» включаемых областей)</li> <li>Вызов включаемых областей находится на странице index.php(мне это кажется неудобным, поскольку вносит риск повреждения кода вызова компонентов контент-редакторами, но не добавляет никакой пользы. Однако это было обязательным требованием прохождения модерации решения и вызовы были перенесены из шаблона на страницу в версии 0.2.1)</li> </ul> <h3>Стадия 2 – Мастер создания сайта</h3> <p> <a href="https://github.com/lexnekr/bitrix_example_for_marketplace/tree/f12b0a1d13c0144f2580d16d384e2b1d45fbec9f" target="_blank">Тут</a> </p> <p> <b>Структура:</b> </p> <ul type="disc"> <li>Сам модуль - /bitrix/wizards/ПРОСТРАНСТВО_ИМЁН/ИМЯ_МАСТЕРА/..</li> <ul type="circle"> <li>.description.php* - ../.description.php</li> <li>Мастер wizard.php** - ../wizard.php</li> <li>Языковые файлы мастера (визарда и дескрипшена!) - ../lang/ИД_языка/</li> <li>Картинки (используются в мастере установки для ОФОРМЛЕНИЯ процесса установки) - ../images/</li> <li>ЧТО СТАВИМ - ../site/</li> <ul type="square"> <li>Файлы публички*** - ../public/ИД_ЯЗЫКА/</li> <li>Файлы шаблона**** - ../templates/ИД_ШАБЛОНА/</li> <li>«Сервисы» - ../services/</li> <ul type="disc"> <li>Список сервисов****** - ../.services.php</li> <li>«Типы»/«Группы» сервисов, например MAIN******* - ../main/</li> </ul> </ul> </ul> </ul> <p> <b>Особенности:</b> </p> <ul type="disc"> <li>* - содержит версию мастера (не критично) и массив шагов мастера (важно добавить новые шаги в массив!)</li> <li>** - Содержит сами шаги мастера, а так же «значения по-умолчанию». Важно в этом файле:</li> <ul type="circle"> <li>Передать значения «по-умолчанию» из первичного массива в соответствующий шаг и там обработать, даже если не планируется их изменять пользовательски</li> <li>В соответствующих шагах заполняем поля, создаём сайты, копируем файлы из папок файлов (раздела «ЧТО СТАВИМ»). Никаких конкретных действий.</li> <li>Недопустимо использование кириллицы!!! Все кириллические символы вставляем языковыми фразами!</li> </ul> <li>*** - Содержит копию файлов публички (допустима кириллица). На местах, где предполагается замена контента введёнными в поля мастера пользователем значения, находятся МАКРОСЫ.</li> <li>**** - Содержит копию файлов Шаблона. Важно:</li> <ul type="circle"> <li>НЕ допустима кириллица. Либо использовать языковые файлы, либо макорсы.</li> <li>На местах, где предполагается замена контента введёнными в поля мастера пользователем значения, находятся МАКРОСЫ.</li> </ul> <li>****** - Массив сервисов, подключающихся <b>последовательно</b>. ПРИМЕР:</li> </ul> <table border="1" cellspacing="0" cellpadding="0" style="border-collapse: collapse;"> <tbody> <tr> <td width="638" style="width: 478.55pt; border: 1pt solid windowtext;"> <p>             'НАЗВАНИЕ_ТИПА/ГРУППЫ' =&gt; Array( </p> <p>                         'NAME' =&gt; GetMessage("SERVICE_MAIN_SETTINGS"), </p> <p>                         'STAGES' =&gt; Array( </p> <p>                                    "файл_сервиса_1.php", </p> <p>                                    "файл_сервиса_2.php", </p> <p>                                    "файл_сервиса_3.php", </p> <p>                         ), </p> <p>             ), </p> </td> </tr> </tbody> </table> <ul type="disc"> <li>******* - В папках с названиями групп/типов лежат файлы сервисов. Сервисы осуществляют КОНКРЕТНЫЕ правки. Например, заменяют макросы в файлах публички/шаблоне на значения из мастера установки (в примере) или импортируют инфоблоки (нет в примере).</li> </ul> <p> </p> <p> <b>Принцип запаковки сайта:</b> </p> <ol type="1"> <li>Заливаем файлы публички в /bitrix/wizards/ПРОСТРАНСТВО_ИМЁН/ИМЯ_МАСТЕРА/site/public/ИД_ЯЗЫКА/ </li> <li>Заливаем шаблон в /bitrix/wizards/ПРОСТРАНСТВО_ИМЁН/ИМЯ_МАСТЕРА/site/templates/ИД_шаблона/ </li> <li>Заменяем нужные куски макросами</li> <li>Пишем визард и дескрипшн по шагам с переменными, которые важны для публички/шаблона</li> <li>Пишем сервисы, работающие с макросами</li> <li>Оформляем (пишем языковые фразы и т.п.)</li> </ol> <p> </p> <h3>Стадия 3 – Модуль</h3> <p> <a href="https://github.com/lexnekr/bitrix_example_for_marketplace/tree/3c94d8ca02e97d19a9b17169a63f56f45323d8d4" target="_blank">Тут</a> </p> <p> <b>Структура:</b> </p> <ul type="disc"> <li>* - /bitrix/modules/КОД_ПАРТНЁРА.КОД_МОДУЛЯ/..</li> <ul type="circle"> <li>Обязательный инклуд** - ../include.php</li> <li>Языковые файлы модуля - ../lang/ИД_ЯЗЫКА/</li> <li>инсталлятор модуля - ../install/</li> <ul type="square"> <li>Версия модуля*** - ../version.php</li> <li>Инсталлятор**** - ../index.php</li> <li>Мастер установки***** - ../wizards/</li> <li>Компоненты****** - ../components/</li> </ul> </ul> </ul> <p> </p> <p> <b>Особенности:</b> </p> <ul type="disc"> <li>* - код партнёра маленькими буквами. Код модуля тоже маленькими латинскими буквами без подчёркиваний (в отличие от шаблона/мастера)</li> <li>** - Если вы не реализуете защиту демо-версии, то он может быть и пустым.</li> <li>*** - Критичное значение для маркета!</li> <li>**** - Содержит код модуля с партнёром.</li> <li>***** - Копия содержимого соответствующей папки предыдущей стадии. При установке решения копируется в папку /bitrix/wizards/, переводя вас к Стадии 2.</li> <li>****** - В примере не представлено. Просто копируется в соответсвующую папку при установке модуля.</li> </ul> <p> <b>Принцип запаковки</b> </p> <ol type="1"> <li>Делаем мастер.</li> <li>Оформляем всякую мишуру по заготовке.</li> </ol> <p> </p> <p> </p> <h3>Стадия 4 – Архив для Маркета</h3> <p> <a target="_blank" href="https://github.com/lexnekr/bitrix_example_for_marketplace/tree/3e9ff5947d8e36f646cd29da19c085d31e04364f">Тут</a> </p> <p> <b>Принцип запаковки:</b> </p> <ol type="1"> <li>Берём содержимое папки /bitrix/modules/КОД_ПАРТНЁРА.КОД_МОДУЛЯ/ и складываем в папку /.last_version/</li> <li>Архивируем папку /.last_version/ в архив .last_version.zip</li> </ol> <p> </p> <h3>Стадия 5 - Обновление для Маркета</h3> <p> <a target="_blank" href="https://github.com/lexnekr/bitrix_example_for_marketplace/tree/04002be7294345f8771f223a53c55fde1df7665b" title="Ссылка: https://github.com/lexnekr/bitrix_example_for_marketplace/tree/04002be7294345f8771f223a53c55fde1df7665b">Тут</a> </p> <p> <b>Структура:</b> </p> <p> Идентична архиву для маркета за несколькими исключениями* </p> <p> </p> <ul> <li>** - /НОМЕР_ВЕРСИИ/..</li> <ul type="circle"> <li>Текстовое описание обновления*** - ../description.ru</li> <li>Установщик обновления**** - updater.php</li> </ul> </ul> <p> <b>Особенности:</b> </p> <p> </p> <ul> <li>* - К обновлению прикладываются только ИЗМЕНИВШИЕСЯ файлы</li> <li>** - Вместо /.last_version/ в имени папки используется номер версии модуля (должен совпадать с номером версии модуля в /НОМЕР_ВЕРСИИ/install/version.php)</li> <li>*** - Текстовый файл, используется для оформления информации об обновлении в Маркетплейсе 1С-Битрикс</li> <li>**** - В простейшем случае может быть использован образец из репозитория, никаких специфичных действий в него пока не заложено.</li> </ul> <p> </p> <p> <b>Принцип запаковки:</b> </p> <p> </p> <ol> <li> Берём архив с последним стабильным модулем (полным), все изменения будут в мастере установки сайта. </li> <li> Удаляем немодифицированные файлы </li> <li> Оформляем "сопроводительные файлы" (апдейтер, версию модуля, описание) </li> <li> Архивируем папку со всем содержимым в НОМЕР_ВЕРСИИ.zip </li> </ol> <p> </p> <p> <br> </p> <p> <br> </p> <p> </p> <h2> <span style="color: #ff0000;">Ура, модуль/обновление готовы к отправке в Маркет!</span> </h2> <div style="text-align: right;"> <a href="http://plus.google.com/+АлексейЗадойный?rel=author" target="_blank">Задойный А.В.</a> </div>

Возврат к списку

Яндекс.Метрика