Сверхбыстрое создание модуля Битрикс

Есть ли у вас опыт написания модулей под Битрикс? Как думаете сколько времени займёт разработка модуля средней сложности?
В этой статье я покажу вам как с помощью данного сервиса можно сделать это намного быстрее обычного.

Итак, сначала поставим задачу

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

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

Создание с нуля

Установщик

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

Форма создания модуля

После этого вы должны увидеть такую страницу:

Детальная страница модуля

Потраченное время - 5 минут

Инфоблоки

Из ТЗ мы выносим, что нам нужны три инфоблока: подписчики, рубрики и сами выпуски. Создадим их в сервисе, это просто, прямо как в админке Битрикса, при желании можно даже заполнить тестовые элементы. На основании заполненной вами формы автоматически создастся миграция, которая будет запускаться при установке.

Создание инфоблока подписчиков Свойства инфоблока подписчиков Создание инфоблока выпусков Элементы инфоблока рубрик Все три инфоблока в списке

Допустим по 5 минут на инфоблок, итого 15 минут.

Компонент

Также нам нужен компонент формы подписки. Мы не будем создавать его целиком в сервисе, но сделаем заготовку.

Форма создания компонента Настройки пути в визуальном редакторе компонента Class.php компонента с применённым шаблоном

Ещё 5 минут, доделывание компонента посчитаем отдельно позже.

Почтовое событие

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

Форма создания почтового события Детальная страница почтового события Форма создания почтового шаблона

Ещё 10 минут.

Рассылка выпусков

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

Форма редактирования обработчиков событий

Буквально 2 минуты, но мы здесь как и всегда всё округляем до 5

На этом подготовка закончена. Ставим на сайт.

Установка на сайт

Скачиваем архив с главной страницы модуля.

Окно скачивания модуля

Закидываем на тестовом сайте в папку /bitrix/modules/.

Вот здесь устанавливаем:

Установка модуля на Битрикс

После этого все три инфоблока и почтовое событие создались сами, компонент скопировался в папку \bitrix\components\, обработчик зарегистрировался.

Законченный компонент

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

Итого засчитываем час

Логика обработчика

Теперь доделаем обработчик, нужно только тело функции написать. Для примера вот как я его набросал.

 "ASC"
					),
					Array(
						'IBLOCK_ID' => $arFields["IBLOCK_ID"],
						'ACTIVE'    => 'Y',
						'ID'        => $arFields["ID"],
					),
					false,
					false,
					Array()
				);
				while ($ob = $res->GetNextElement()){
					$fields = $ob->GetFields();
					$fields["PROPERTIES"] = $ob->GetProperties();

					// nugno_li_otpravlyat
					if ($fields["PROPERTIES"]["SEND"]["VALUE"] == "Y"){

						$rubrics = $fields["PROPERTIES"]["RUBRICS"]["VALUE"];
						if (is_array($rubrics)){
							$emails = Array();
							// sobiraem_emeily_podpischikov
							$res = \CIBlockElement::GetList(
								Array(
									"SORT" => "ASC"
								),
								Array(
									'IBLOCK_ID'        => $subscribersIblockID,
									'ACTIVE'           => 'Y',
									'PROPERTY_RUBRICS' => $rubrics,
								),
								false,
								false,
								Array()
							);
							while ($ob = $res->GetNextElement()){
								$subsFields = $ob->GetFields();
								$subsFields["PROPERTIES"] = $ob->GetProperties();

								$emails[] = $subsFields["PROPERTIES"]["EMAIL"]["VALUE"];
							}
						}
						$emails = array_unique($emails);

						// otpravlyaem_pisma
						$mailArr = Array(
							'THEME' => $fields["NAME"],
							'VYPUSK'  => $fields["DETAIL_TEXT"],
						);
						// na_kagdyy_emeil_otdelno
						foreach ($emails as $email){
							$mailArr['EMAIL'] = $email;
							\CEvent::Send('PNI_SEND_RELEASE', 's1', $mailArr);
						}

						// obnovlyaem_flag_otpravki_u_vypuska
						\CIBlockElement::SetPropertyValuesEx($fields["ID"], false, array("SEND" => false));
					}
				}
			}
		}
	}

}

Не самая прозрачная штука, поэтому накинем ещё час.

Вы могли заметить, что здесь мы используем настройки модуля. Работать с ними здесь как никогда просто:

Форма редактирования настроек модуля

Готовый архив

Теперь закинем все изменения обратно в модуль.

Компонент можно удалить и импортировать заново, что довольно удобно.

Окно импорта компонента

А код обработчика просто скопируем и вставим.

Вставка код обработчика событий

Скачиваем готовый архив, смотрим на время, вы великолепны.

Итого

2 часа 40 минут, как максимум, думаю многие согласятся, что вполне хватит и половины этого времени. Мне хватило 40 минут, я статью в разы дольше писал, но, как никак, я хорошо знаю сервис.

Вариант 2. Когда всё готово

Давайте сначала импортируем инфоблоки. Не надо щелкать их настройки по новой, можно просто выгрузить в xml (Битрикс почему-то не может тут сам файл подготовить) и импортировать его.

Экспорт инфоблока Окно импорта инфоблока

Компонент кидаем в zip архив и просто закачиваем в сервис, как я показывал чуть выше.

Обработчик регистрируем и копируем код.

Пощёлкать форму нужно будет только на почтовых событиях.

И теперь также можно теперь скачать готовый архив.

Думаю 20 минут вполне хватит.

Посмотрим на результаты

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

Вместо заключения

Можно ли что-то улучшить, чтобы ещё более упростить и ускорить процесс? Возможно WYSIWYG-редактор для шаблона компонента, но не уверен, поможет ли он, может быть даже навредит. Пишите свои варианты мне на почту, я с удовольствием рассмотрю их.

Подсказка

А если мы сгенерируем архив с такими настройками, то его можно отправлять прямиком на модерацию в Маркетплейс.

Настройки скачивания для отправки на маркетплейс

А ещё вы можете сделать ваш модуль также легко, быстро и бесплатно в нашем сервисе.

Прикладываю архив