Простой компонент подписки на рассылку для 1С-Битрикс
Структурно и подробно объясняю как создать свой собственный простой компонент 1С-Битрикс для вывода в визуальном редакторе и внесения измененийПростой компонент подписки на рассылку для 1С-Битрикс
Структурно и подробно объясняю как создать свой собственный простой компонент 1С-Битрикс для вывода в визуальном редакторе и внесения изменений
📅 25 апреля 2023
👁🗨 730
Вот и наступил тот день, когда у меня наконец-таки дошли руки и отступила лень для написания своего собственного хоть пока и простого компонента для 1С-Битрикс. Постарался оставить максимальное количество необходимых комментариев и показать структуру файлов и папок, что также немаловажно.
Ранее я делился информацией [ссылка] о том, как добавить подписчика в рассылку через API 1С-Битрикс. Сегодня привожу пример уже полноценного простого компонента с возможностью изменять его параметры через визуальный редактор как на скрине ниже.
<? // Структура папок и файлов
├── /local/
| ├── /components/
| | ├── /stanislav_web/
| | | ├── /newsletter.subscription/
| | | | ├── /lang/
| | | | | └── /ru/
| | | | | └── .description.php
| | | | | └── .parameters.php
| | | | ├── /templates/
| | | | | └── /.default/
| | | | | └── template.php
| | | | ├── .description.php
| | | | ├── .parameters.php
└───┴───┴───┴───┴── component.php
?>
- Создаём своё пространство имён, например: /local/components/stanislav_web/
- Создаём в нём папку компонента, например: /local/components/stanislav_web/newsletter.subscription/
- В папке компонента создаём папки lang, templates и создаём файлы .description.php, .parameters.php и component.php
- В папке lang создаём папку ru внутри которой создаём файлы .description.php и .parameters.php
- В папке templates создаём папку с названием шаблона, например: .default внутри которой создаём файл шаблона template.php
Содержимое каждого файла ниже.
<? // /local/components/stanislav_web/newsletter.subscription/lang/ru/.description.php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die(); // Проверка на подключение ядра
$MESS['NLSS_NAME'] = 'Подписка на рассылку';
$MESS['NLSS_DESCRIPTION'] = 'Developer - https://stanislav-web.com';
$MESS['NLSS_PATH_ID'] = 'local';
$MESS['NLSS_PATH_NAME'] = 'stanislav_web';
?>
<? // /local/components/stanislav_web/newsletter.subscription/lang/ru/.parameters.php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die(); // Проверка на подключение ядра
$MESS['NLSS_DATA'] = 'Данные в блоке';
$MESS['NLSS_TITLE'] = 'Заголовок';
$MESS['NLSS_SUBTITLE'] = 'Подзаголовок';
$MESS['NLSS_BUTTON'] = 'Текст на кнопке';
$MESS['NLSS_POLICY'] = 'Ссылка на персональные данные';
$MESS['NLSS_TITLE_DEFAULT'] = 'Подпишитесь на рассылку';
$MESS['NLSS_SUBTITLE_DEFAULT'] = 'Мы регулярно публикуем новую и интересную информацию, акции и специальные предложения';
$MESS['NLSS_BUTTON_DEFAULT'] = 'Подписаться';
$MESS['NLSS_POLICY_DEFAULT'] = '/policy/';
?>
<? // /local/components/stanislav_web/newsletter.subscription/templates/.default/template.php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die(); // Проверка на подключение ядра
use Bitrix\Main\Loader; // Подключаем модули
Loader::includeModule('subscribe'); // Подключаем модуль Подписка, рассылки
?>
<section class="subscribe container">
<div class="subscribe__text">
<h3><?= $arResult['TITLE']; ?></h3>
<p><?= $arResult['SUBTITLE']; ?></p>
</div>
<form class="subscribe__form" method="post">
<div class="input__container input__container_email">
<input placeholder="Электронная почта*" required name="email" data-type="email" type="email">
<span class="error-message">Введите email</span>
</div>
<button class="btn btn_secondary" type="submit">
<span class="children"><?= $arResult['BUTTON']; ?></span>
</button>
<label class="checkbox checkbox_white">
<input required name="agreement" data-type="checkbox" type="checkbox" checked>
<span class="label">Я даю свое согласие на <a href="<?= $arResult['POLICY']; ?>" target="_blank">обработку моих персональных данных</a></span>
<span class="custom-checkbox"></span>
<span class="error-message">Обязательное поле</span>
</label>
</form>
</section>
<?
if (!empty($_POST['email']) && !empty($_POST['agreement'])) {
global $USER;
$email = $_POST['email'];
$subscribeFields = [
'USER_ID' => ($USER->IsAuthorized() ? $USER->GetID() : false),
'FORMAT' => 'html',
'EMAIL' => $email,
'ACTIVE' => 'Y',
'CONFIRMED' => 'Y', // Подтверждаем подписку без подтверждения по почте
'SEND_CONFIRM' => 'N', // Не отправялем письмо с подтверждение подписчику
'RUB_ID' => [1] // Указываем ID инфоблока, например у моих новостей ID == 1
];
$subscr = new CSubscription;
$ID = $subscr->Add($subscribeFields);
?>
<?
if ($ID > 0) {
CSubscription::Authorize($ID);
?>
<div class="notification notification_active">
<button class="btn notification__close"></button>
<h4>Подписка на рассылку</h4>
<p>Вы успешно подписались на рассылку с адресом <?= $email; ?></p>
</div>
<? } else { ?>
<div class="notification notification_active">
<button class="btn notification__close"></button>
<h4>Подписка на рассылку</h4>
<p>Адрес <?= $email; ?> уже подписан на рассылку</p>
</div>
<? } ?>
<? } ?>
<? // /local/components/stanislav_web/newsletter.subscription/.description.php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die(); // Проверка на подключение ядра
$arComponentDescription = [
'NAME' => GetMessage('NLSS_NAME'),
'DESCRIPTION' => GetMessage('NLSS_DESCRIPTION'),
'PATH' => [
'ID' => GetMessage('NLSS_PATH_ID'),
'NAME' => GetMessage('NLSS_PATH_NAME'),
],
];
?>
<? // /local/components/stanislav_web/newsletter.subscription/.parameters.php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die(); // Проверка на подключение ядра
use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;
$arComponentParameters = [
'GROUPS' => [
'SETTINGS' => [ // Код группы
'NAME' => Loc::getMessage('NLSS_DATA'),
'SORT' => 100,
],
],
'PARAMETERS' => [
'TITLE' => [
'PARENT' => 'SETTINGS', // Код группы
'NAME' => Loc::getMessage('NLSS_TITLE'),
'TYPE' => 'STRING',
'DEFAULT' => Loc::getMessage('NLSS_TITLE_DEFAULT'),
],
'SUBTITLE' => [
'PARENT' => 'SETTINGS',
'NAME' => Loc::getMessage('NLSS_SUBTITLE'),
'TYPE' => 'STRING',
'DEFAULT' => Loc::getMessage('NLSS_SUBTITLE_DEFAULT'),
],
'BUTTON' => [
'PARENT' => 'SETTINGS',
'NAME' => Loc::getMessage('NLSS_BUTTON'),
'TYPE' => 'STRING',
'DEFAULT' => Loc::getMessage('NLSS_BUTTON_DEFAULT'),
],
'POLICY' => [
'PARENT' => 'SETTINGS',
'NAME' => Loc::getMessage('NLSS_POLICY'),
'TYPE' => 'STRING',
'DEFAULT' => Loc::getMessage('NLSS_POLICY_DEFAULT'),
],
]
];
?>
<? // /local/components/stanislav_web/newsletter.subscription/component.php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die(); // Проверка на подключение ядра
$arResult['TITLE'] = $arParams['TITLE'];
$arResult['SUBTITLE'] = $arParams['SUBTITLE'];
$arResult['BUTTON'] = $arParams['BUTTON'];
$arResult['POLICY'] = $arParams['POLICY'];
$this->includeComponentTemplate();
?>