+7 (987) 026-06-36
Написать в Telegram

Оставить заявку
stanislav_web

Простой компонент подписки на рассылку для 1С-Битрикс

Простой компонент подписки на рассылку для 1С-Битрикс Структурно и подробно объясняю как создать свой собственный простой компонент 1С-Битрикс для вывода в визуальном редакторе и внесения изменений

Простой компонент подписки на рассылку для 1С-Битрикс

Структурно и подробно объясняю как создать свой собственный простой компонент 1С-Битрикс для вывода в визуальном редакторе и внесения изменений

📅 25 апреля 2023

👁‍🗨 730

🔥 0

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

Ранее я делился информацией [ссылка] о том, как добавить подписчика в рассылку через API 1С-Битрикс. Сегодня привожу пример уже полноценного простого компонента с возможностью изменять его параметры через визуальный редактор как на скрине ниже.
Простой компонент подписки на рассылку для 1С-Битрикс
<? // Структура папок и файлов
├── /local/
|   ├── /components/
|   |   ├── /stanislav_web/
|   |   |   ├── /newsletter.subscription/
|   |   |   |   ├── /lang/
|   |   |   |   |   └── /ru/
|   |   |   |   |       └── .description.php
|   |   |   |   |       └── .parameters.php
|   |   |   |   ├── /templates/
|   |   |   |   |   └── /.default/
|   |   |   |   |       └── template.php
|   |   |   |   ├── .description.php
|   |   |   |   ├── .parameters.php
└───┴───┴───┴───┴── component.php
?>
  1. Создаём своё пространство имён, например: /local/components/stanislav_web/
  2. Создаём в нём папку компонента, например: /local/components/stanislav_web/newsletter.subscription/
  3. В папке компонента создаём папки lang, templates и создаём файлы .description.php, .parameters.php и component.php
  4. В папке lang создаём папку ru внутри которой создаём файлы .description.php и .parameters.php
  5. В папке 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();
?>