Телеграм: @camouf_ru Почта: mihail@bazarow.ru

Добавление своих полей в почтовые шаблоны Битрикс

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

Добавление ФИО, номера телефона клиента и общий вес заказанных товаров в почтовое событие

Для начала копируем системный компонент sale.order.ajax в собственное пространство имен. Для этого создаем свою папку в /bitrix/components/, например bazarow. И копируем всю папку /bitrix/components/sale.order.ajax в bazarow

Открываем файл component.php и, примерно на 1946 ой строке, находим параметры, которые передаются в почтовое событие

Добавляем сюда строчки для вызова веса товара, и свойств заказа ФИО и Номер телефона

 
  "PHONE" => $arUserResult["ORDER_PROP"][3], //ID свойства заказа из настроек Магазин->Свойство заказа,
  "FIO" => $arUserResult["ORDER_PROP"][1], //ID свойства заказа из настроек Магазин->Свойство заказа,
  "ORDER_WEIGHT" => $arResult["ORDER_WEIGHT"],

Целиком должно получиться примерно так:

 
  $arFields = Array(
			"ORDER_ID" => $arOrder["ACCOUNT_NUMBER"],
			"ORDER_DATE" => Date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT", SITE_ID))),
			"ORDER_USER" => ( (strlen($arUserResult["PAYER_NAME"]) > 0) ? $arUserResult["PAYER_NAME"] : $USER->GetFormattedName(false)),
			"PRICE" => SaleFormatCurrency($orderTotalSum, $arResult["BASE_LANG_CURRENCY"]),
			"PHONE" => $arUserResult["ORDER_PROP"][3],
			"FIO" => $arUserResult["ORDER_PROP"][1],
			"ORDER_WEIGHT" => $arResult["ORDER_WEIGHT"],
			"BCC" => COption::GetOptionString("sale", "order_email", "order@".$SERVER_NAME),
			"EMAIL" => (strlen($arUserResult["USER_EMAIL"])>0 ? $arUserResult["USER_EMAIL"] : $USER->GetEmail()),
			"ORDER_LIST" => $strOrderList,
			"SALE_EMAIL" => COption::GetOptionString("sale", "order_email", "order@".$SERVER_NAME),
			"DELIVERY_PRICE" => $arResult["DELIVERY_PRICE"],
	);

В публичной части сайта выводим наш новый компонент, подключаем к нему шаблон, и в почтовое событие "Новый заказ на сайте", в нужном месте вставляем переменные "PHONE" "FIO" и "ORDER_WEIGHT"

Наслаждаемся результатом

Просмотров: 37758 | Комментариев: 16

Комментарии

Внимание! все сообщения проходят премодерацию. Ваше сообщение появится после проверки
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Защита от автоматических сообщений
Загрузить файл
Нажимая кнопку "Отправить", Вы принимаете условия
Политики конфиденциальности и обработки персональных данных
Анна
А можно так вывести еще и фото товара? и какое-нибудь свойство? Цвет, размер...
Имя Цитировать
Виктор
Скажите пожалуйста а как проделать тоже самое но с компонентом  main.feedback . Тоже хотел добавить поле с телефоном .  За ранее спасибо!!!
Имя Цитировать
Гость сайта
А как добавить комментарий к заказу? С телефоном всё получилось. В списке полей есть  "USER_DESCRIPTION" => $arUserResult["ORDER_DESCRIPTION"], но  шаблон письма его не понимает. Помогите пожалуйста.
Имя Цитировать
Гость сайта
Вопрос снят, не в тот массив добавил поле )))) Кому интересно, массив в событии отправки, нужно искать строку // mail message и ниже массив с полями для почтового сообщения
Имя Цитировать
Юрий
Всем здравствуйте!
Интересует такой вопрос, задваиваются контрагенты при выгрузке из за неуникальности поля FIO.
Пробовал в Init.php вставить такой код:

Код
AddEventHandler("sale", "OnSaleComponentOrderComplete", "SaleComponentOrderCompleteHandler"); 
function SaleComponentOrderCompleteHandler($ID, $arOrder) { 
   $fio = $arOrder['USER_NAME'].' '.$arOrder['USER_LAST_NAME'];
   $arFields = array(
   "ORDER_ID" => $ID,
   "ORDER_PROPS_ID" => ID поля FIO,
   "NAME" => "ФИО",
   "CODE" => "FIO",
   "VALUE" => $fio
   );
   CSaleOrderPropsValue::Add($arFields);
}  
Создал необходимые поля, но тогда профиль имени покупателя стал включать в себя только имя.
Подскажите как в стандартном bitrix.sale.order.ajax - разбить поле FIO на имя и фамилию.
Т.к. штатно человек должен поставить пробел, это и будет разделителем, но меня крайне это не устраивает. Поля должны быть отдельно.
Хотелось бы чтобы из полей фамилия и имя формировалось поле FIO, впринципе судя по коду так и должно получаться, но не срабатывает.
Подскажите, может я допустил ошибку?
Решение с модулем для 1С, мне не подходит, версия не совпадает.
Имя Цитировать
Guest
Привет!

Подскажите как добавить свои поля в шаблон изменения статуса заказа SALE_STATUS_CHANGED
Имя Цитировать
Thomas Hollow
здравствуйте!
а что делать, если в указанной папке отсутствует файл component.php??
Имя Цитировать
Михаил Базаров
Цитата
Thomas Hollow написал:
здравствуйте!
а что делать, если в указанной папке отсутствует файл component.php??
Где-то не там смотрите. У компонента не может не быть файла component.php
Имя Цитировать
Thomas Hollow
Цитата
Михаил Базаров пишет:
Цитата
Thomas Hollow написал:
здравствуйте!
а что делать, если в указанной папке отсутствует файл component.php??
Где-то не там смотрите. У компонента не может не быть файла component.php
смотрю по пути /public_html/bitrix/components/bitrix/sale.order.ajax
вот скрин, если что: https://yadi.sk/i/B-qq8YZ2u2PSm

слезно прошу помочь..
Имя Цитировать
Thomas Hollow
редакция "Бизнес"
решение инет-магазина типовое, "из коробки", как говорится
Имя Цитировать
Супердимон Воля
Цитата
Михаил Базаров пишет:
У компонента не может не быть файла component.php
С версии 12.0.0 доступна поддержка классов компонентов.

Вообще данный подход в корне неправильный, а если компонент обновиться, каждый раз ручками переносить, или обновленный заново копировать с этим костылем? фуфуфу

Цитата
Thomas Hollow пишет:
слезно прошу помочь..
Вам нужно создать обработчик события(какого именно - смотрите в документации) в нем по ID заказа можно сделать выборку всех нужных полей и добавить к существующим.
Имя Цитировать
Николай Юнолс
Добрый день!
Спасибо за урок.

Все сделал, кроме последних настроек: В публичной части сайта выводим наш новый компонент, подключаем к нему шаблон, и в почтовое событие "Новый заказ на сайте", в нужном месте вставляем переменные "PHONE" "FIO" и "ORDER_WEIGHT"

Пожалуйста напишите , по возможности поподробнее (а лучше сделайте видео). Готов заплатить.
Имя Цитировать
Михаил Генин
В этой статье описан крайне вредный и не правильный способ!
Копируя компонент в свое пространство имен вы лишаетесь обновления компонента и его шаблонов. Которые на этот компонент выходят довольно регулярно. Решить проблему которая описывается в статье можно через обработчики почтовых событий. В данном случае их даже больше одного. Можно воспользоваться событиями OnOrderNewSendEmail или OnBeforeEventSend.
Имя Цитировать
Михаил Базаров
Цитата
Михаил Генин написал:
В этой статье описан крайне вредный и не правильный способ!
Копируя компонент в свое пространство имен вы лишаетесь обновления компонента и его шаблонов. Которые на этот компонент выходят довольно регулярно. Решить проблему которая описывается в статье можно через обработчики почтовых событий. В данном случае их даже больше одного. Можно воспользоваться событиями OnOrderNewSendEmail или OnBeforeEventSend.  
В целом да, потому есть еще такая заметка
https://camouf.ru/blog-note/3087/

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

Но это дело такое  ;)
Имя Цитировать
Рустам Кулиев
у меня в папке sale.order.ajax вообще нету файла components.php версия самая последняя
Имя Цитировать
Вилли Кибе
Насколько понимаю с определенной версии в папке sale.order.ajax вообще нет файла components.php
Отсюда вопрос, как добавлять собственные поля в шаблоне?
Также не подскажете как добавить в письмо [SALE_NEW_ORDER]адрес доставки и тип оплаты?
Имя Цитировать
Поделиться страницей Спасибо, это помогает развивать сайт.
Мой youtube канал. Сюда я выкладываю видео уроки по разработке сайтов и не только. Подписывайтесь, скоро будет серия свежих видео-инструкций:
Перейти на канал
Заметки разработчика

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

Заказaть разработку attention