Матвей Земсков

Заметки веб-мастера

Суббота, 22 сентября 2012 17:21

Создание шаблона рассылки на сайте под управлением «1С-Битрикс».

Оцените материал
(2 голосов)

Задача. Необходимо настроить автоматическую рассылку новостей. Кроме того, нужно создать шаблон данной рассылки. В рассылку должны попадать новости за прошедший месяц, причем администратор или редактор сайта должен иметь возможность выбирать новости для рассылки. Также в моем случае одна из новостей может быть «топовой», в шаблоне она отображается самой первой в отдельном блоке сверху.

При работе над этой задачей мне очень помогла «Документация для разработчиков», а именно ее раздел «Подписка, рассылки» . Также можно ознакомиться с одноименной главой учебного курса «Администратор. Модули» .

В этих документах подробно описан процесс управления автоматической рассылкой: создания, настройки параметров генерации и отправки. Поэтому, я не буду подробно описывать это в статье. Правда, есть один интересный момент, на который нужно обратить внимание: если вы хотите, чтобы при получении выпуска рассылки у адресата в почтовой программе вместо адреса электронной почты было написано, например, название вашей компании, нужно на закладке «Автоматическая генерация» формы создания рассылки ввести адрес в формате:
«НАЗВАНИЕ_КОМПАНИИ <e-mail>».

формат отображения адреса в почтовых программах

Теперь можно постепенно начать выполнять поставленную задачу. Сначала добавим новые свойства в тот инфоблок, где хранятся новости. В одном из этих свойств будет отмечаться «принадлежность» новости к рассылке, а в другом может стоять отметка, что новость является «топовой». Тип обоих свойств – «список», по внешнему виду – это будут 2 флажка. Я назвал эти свойства ”add_subscr” (Добавить в рассылку) и “top_item” (Топовая новость). Если у элемента инфоблока (новости) отмечен флажок, значение этого свойства будет равно «Y».

Следует запомнить ID свойства «Добавить в рассылку» после его создания, оно понадобится при программировании скрипта выборки новостей. На рисунке показан скриншот с настройками нового свойства в настройках инфоблока, а также то, как будет выглядеть флажок для добавления новости в рассылку.

настройки нового свойства в инфоблоке

После проведения необходимых настроек в инфоблоке, можно перейти к программированию скрипта, который будет осуществлять выборку новостей в соответствии с описанными в задании условиями. Этот скрипт будет находиться в файле с шаблоном рассылки.

Шаблоны рассылки в системе «1С-Битрикс» находятся в папке ‘/bitrix/php_interface/subscribe/имя_шаблона/’. Новый шаблон рассылки удобнее всего делать из стандартного, созданного при установке системы. В стандартном шаблоне рассылки используется компонент “bitrix:subscribe.news”, результаты работы которого заносятся в переменную $SUBSCRIBE_TEMPLATE_RESULT. Так как настройки стандартного компонента мне не подходят, – нужно писать скрипт, который будет выбирать новости так, как мне нужно.

Сначала сохраняем в переменных параметры, с которыми будет работать скрипт:

PHP

<?
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
global $SUBSCRIBE_TEMPLATE_RESULT;
global $SUBSCRIBE_TEMPLATE_RUBRIC;
$SUBSCRIBE_TEMPLATE_RUBRIC=$arRubric;
if(!CModule::IncludeModule("iblock")){
	  echo "не подключается модуль инфоблоки";
	}
// Выбираем все значения свойства "раздел для рассылки"
$propety_id = ИД_СВОЙСТВА; 
$IBLOCK_ID = ИД_ИНФОБЛОКА; 
$property_code = "add_subscr"; // имя свойства добавить в рассылку
$property_code2 = "top_item"; // имя свойства «топовая новость»
?>

В этом коде получаем доступ к 2 специальным переменным шаблона рассылки: $SUBSCRIBE_TEMPLATE_RESULT – в нее будут помещаться результаты выборки новостей и $SUBSCRIBE_TEMPLATE_RUBRIC – через нее можно получить доступ к массиву с параметрами рассылки (например, названию рассылки и значению поля с адресом электронной почты, с которого будут приходить выпуски рассылки).

Также скрипту понадобятся ID инфоблока, ID свойства, где хранится отметка о принадлежности к рассылке, о котором я упоминал выше, а также имя этого свойства и свойства для хранения отметки о том, что новость является «топовой».

PHP

<?
// выбираем новости за месяц
   $arItemsFilter = Array(
    "IBLOCK_ID" =>  $IBLOCK_ID,
    ">DATE_CREATE" => array(false, ConvertTimeStamp(time()-(86400*30), "FULL")),
    "PROPERTY_".$property_code."_VALUE" => "Y",
	);

  $arProjElem = CIBlockElement::GetList(array("created_date" => "DESC"),$arItemsFilter,false);
  
  while($projResElem = $arProjElem->GetNextElement())
	{
			$arElemFields = $projResElem->GetFields();
			$arElemProperties = $projResElem->GetProperties();
			
			$arSelFlds["NAME"] = $arElemFields["NAME"];
			$arSelFlds["DATE_CREATE"] = $arElemFields["DATE_CREATE"];
			$arSelFlds["PREVIEW_PICTURE"] = CFile::ShowImage($arElemFields["PREVIEW_PICTURE"],70,70,"align=left hspace=5");
			$arSelFlds["PREVIEW_TEXT"] = $arElemFields["PREVIEW_TEXT"];
			$arSelFlds["DETAIL_PAGE_URL"] = $arElemFields["DETAIL_PAGE_URL"];
			$arSelFlds["DETAIL_TEXT_SIZE"] = strlen($arElemFields["DETAIL_TEXT"]);
			$arSelFlds["IBLOCK_SECTION_ID"] = $arElemFields["IBLOCK_SECTION_ID"];
			
			$arSelFlds[$property_code] = $arElemProperties[$property_code]["VALUE"];
			$arSelFlds[$property_code2] = $arElemProperties[$property_code2]["VALUE"];
			
			$ar_result[] = $arSelFlds;
	}
	
  // массив возвращаемый шаблоном
  $SUBSCRIBE_TEMPLATE_RESULT=$ar_result;
?>

Создаем массив, который будет являться фильтром для выборки новостей для рассылки, сохраняем его в переменной $arFilter. Его элементы ограничивают выборку следующим образом: во-первых, по идентификатору инфоблока, где хранятся новости, по времени публикации новостей (1 месяц) и самое главное по значению свойства 'add_subscr', в котором хранится отметка о принадлежности элемента к рассылке. Затем выбираются элементы с помощью метода CIBlockElement::GetList с применением описанного фильтра. При выборке каждого элемента (новости), «достаем» значение его полей и свойств. Сохраняем все это во вспомогательный массив $arSelFlds, который в итоге помещаем в основной массив $ar_result. Элементы сформированного массива $ar_result и будут выводиться в шаблоне нашей рассылки. Помещаем результаты выборки в переменную шаблона $SUBSCRIBE_TEMPLATE_RESULT.

Теперь нужно выбрать из получившегося массива с новостями «топовую» новость, если она есть. Обходим весь массив $ar_result в цикле и проверяем каждый его элемент на наличие свойства с именем 'top_item'. Если такой элемент существует, помещаем его отдельный массив. Этот массив я так и назвал - $top_item. Может получиться так, что редактор или администратор сайта при настройке рассылки отметит не одну новость «топовой», а несколько. В этом не будет ничего страшного – данный шаблон так устроен, что он выведет последнюю отмеченную (т.е. самую «свежую») «топовую» новость.

С основной задачей на данном этапе закончено. Далее в файле шаблона пойдет html-разметка, в которую будут помещаться новости. В этой статье я не буду описывать тонкости html-верстки рассылки, - это тема отдельной статьи. Отмечу только, что при верстке рассылки очень желательно применять макетные таблицы, а css-стили размещать в файле шаблона.

Последний блок кода в шаблоне является самым важным. Именно в нем осуществляется отправка выпуска рассылки.

PHP

<?
if($SUBSCRIBE_TEMPLATE_RESULT)
	return array(
		"SUBJECT"=>$SUBSCRIBE_TEMPLATE_RUBRIC["NAME"],
		"BODY_TYPE"=>"html",
		"CHARSET"=>"Windows-1251",
		"DIRECT_SEND"=>"Y",
		"FROM_FIELD"=>$SUBSCRIBE_TEMPLATE_RUBRIC["FROM_FIELD"]
	);
else
	return false;
?>

Происходит это следующим образом: производится проверка переменной $SUBSCRIBE_TEMPLATE_RESULT, если в ней содержится массив, выпуск рассылки отправляется. Если значение переменной равно false, то отправка не производится. Шаблон также возвращает массив с параметрами для рассылки, например формат сообщения рассылки, кодировку и значение поля «От» и «Тема письма». Причем два последних параметра берутся из настроек рассылки.

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

Скачать архив с шаблоном

Прочитано 17086 раз
Добавить комментарий

Комментарии   

 
0 # Александр 13.01.2013 21:28
давно пытался создать новый шаблон, сейчас попробую, может быть, одолею. автору спасибо за науку
Ответить | Ответить с цитатой | Цитировать
 
Мои услуги

Предлагаю следующие услуги:

  • Верстка шаблона сайта из дизайн-макета для CMS «1С-Битрикс Управление сайтом» и CMS “Joomla”
  • Создание форм различной сложности (обратная связь, анкеты и тп) для указанных CMS
  • Настройка и кастомизация компонентов и модулей для указанных CMS
  • Доработка модулей и компонентов для указанных CMS, добавление нестандартного функционала
  • Разработка лендингов (landing-pages)

По все вопросам обращайтесь через форму обратной связи

Скачать

Предлагаю вашему вниманию: