При работе над этой задачей мне очень помогла «Документация для разработчиков», а именно ее раздел «Подписка, рассылки» . Также можно ознакомиться с одноименной главой учебного курса «Администратор. Модули» .
В этих документах подробно описан процесс управления автоматической рассылкой: создания, настройки параметров генерации и отправки. Поэтому, я не буду подробно
описывать это в статье. Правда, есть один интересный момент, на который нужно обратить внимание: если вы хотите, чтобы при получении выпуска рассылки у
адресата в почтовой программе вместо адреса электронной почты было написано, например, название вашей компании, нужно на закладке «Автоматическая генерация» формы
создания рассылки ввести адрес в формате:
«НАЗВАНИЕ_КОМПАНИИ <e-mail>».
Теперь можно постепенно начать выполнять поставленную задачу. Сначала добавим новые свойства в тот инфоблок, где хранятся новости. В одном из этих свойств будет отмечаться «принадлежность» новости к рассылке, а в другом может стоять отметка, что новость является «топовой». Тип обоих свойств – «список», по внешнему виду – это будут 2 флажка. Я назвал эти свойства ”add_subscr” (Добавить в рассылку) и “top_item” (Топовая новость). Если у элемента инфоблока (новости) отмечен флажок, значение этого свойства будет равно «Y».
Следует запомнить ID свойства «Добавить в рассылку» после его создания, оно понадобится при программировании скрипта выборки новостей. На рисунке показан скриншот с настройками нового свойства в настройках инфоблока, а также то, как будет выглядеть флажок для добавления новости в рассылку.
После проведения необходимых настроек в инфоблоке, можно перейти к программированию скрипта, который будет осуществлять выборку новостей в соответствии с описанными в задании условиями. Этот скрипт будет находиться в файле с шаблоном рассылки.
Шаблоны рассылки в системе «1С-Битрикс» находятся в папке ‘/bitrix/php_interface/subscribe/имя_шаблона/’. Новый шаблон рассылки удобнее всего делать из стандартного, созданного при установке системы. В стандартном шаблоне рассылки используется компонент “bitrix:subscribe.news”, результаты работы которого заносятся в переменную $SUBSCRIBE_TEMPLATE_RESULT. Так как настройки стандартного компонента мне не подходят, – нужно писать скрипт, который будет выбирать новости так, как мне нужно.
Сначала сохраняем в переменных параметры, с которыми будет работать скрипт:
PHP
В этом коде получаем доступ к 2 специальным переменным шаблона рассылки: $SUBSCRIBE_TEMPLATE_RESULT – в нее будут помещаться результаты выборки новостей
и $SUBSCRIBE_TEMPLATE_RUBRIC
– через нее можно получить доступ к массиву с параметрами рассылки (например, названию рассылки и значению поля с адресом электронной
почты, с которого будут приходить выпуски рассылки).
Также скрипту понадобятся ID инфоблока, ID свойства, где хранится отметка о принадлежности к рассылке, о котором я упоминал выше, а также имя этого свойства и свойства для хранения отметки о том, что новость является «топовой».
PHP
Создаем массив, который будет являться фильтром для выборки новостей для рассылки, сохраняем его в переменной $arFilter
. Его элементы ограничивают
выборку следующим образом: во-первых, по идентификатору инфоблока, где хранятся новости, по времени публикации новостей (1 месяц) и самое главное по значению свойства
'add_subscr', в котором хранится отметка о принадлежности элемента к рассылке. Затем выбираются элементы с помощью метода CIBlockElement::GetList
с применением описанного фильтра. При выборке каждого элемента (новости), «достаем» значение его полей и свойств. Сохраняем все это во вспомогательный массив
$arSelFlds
, который в итоге помещаем в основной массив $ar_result
. Элементы сформированного массива $ar_result
и будут выводиться
в шаблоне нашей рассылки. Помещаем результаты выборки в переменную шаблона $SUBSCRIBE_TEMPLATE_RESULT
.
Теперь нужно выбрать из получившегося массива с новостями «топовую» новость, если она есть. Обходим весь массив $ar_result
в цикле и проверяем каждый
его элемент на наличие свойства с именем 'top_item'. Если такой элемент существует, помещаем его отдельный массив. Этот массив я так и назвал -
$top_item
. Может получиться так, что редактор или администратор сайта при настройке рассылки отметит не одну новость «топовой», а несколько. В этом не
будет ничего страшного – данный шаблон так устроен, что он выведет последнюю отмеченную (т.е. самую «свежую») «топовую» новость.
С основной задачей на данном этапе закончено. Далее в файле шаблона пойдет html-разметка, в которую будут помещаться новости. В этой статье я не буду описывать тонкости html-верстки рассылки, - это тема отдельной статьи. Отмечу только, что при верстке рассылки очень желательно применять макетные таблицы, а css-стили размещать в файле шаблона.
Последний блок кода в шаблоне является самым важным. Именно в нем осуществляется отправка выпуска рассылки.
PHP
Происходит это следующим образом: производится проверка переменной $SUBSCRIBE_TEMPLATE_RESULT
, если в ней содержится массив, выпуск рассылки
отправляется. Если значение переменной равно false, то отправка не производится. Шаблон также возвращает массив с параметрами для рассылки, например формат
сообщения рассылки, кодировку и значение поля «От» и «Тема письма». Причем два последних параметра берутся из настроек рассылки.
Надеюсь, что информация, представленная в этой статье, будет полезна для читателей. Для более детального ознакомления, я прикладываю к этому посту архив с описываемым шаблоном рассылки.