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

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

Просмотров: 43635

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

Иногда нужно внести свои поля в почтовые шаблоны битрикс. Например: добавить имя и номер телефона заказчика в почтовый шаблон 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"

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

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

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

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

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

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

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

Но это дело такое  ;)
Рустам Кулиев 15.08.2018
у меня в папке sale.order.ajax вообще нету файла components.php версия самая последняя
Вилли Кибе 11.04.2020
Насколько понимаю с определенной версии в папке sale.order.ajax вообще нет файла components.php
Отсюда вопрос, как добавлять собственные поля в шаблоне?
Также не подскажете как добавить в письмо [SALE_NEW_ORDER]адрес доставки и тип оплаты?

Записная книжка разработчика

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

Композитный сайт на 1С-Битрикс Просмотров: 3037 Для новых клиентов: Все новые проекты будут включать в себя применение технологии "Компози... Привязка к разделам в компоненте "Добавления элементов пользователем" Просмотров: 12062 В системе управления 1С Битрикс есть компонент "Форма добавления / редактирования" - котор... Вывести дополнительное пользовательское поле, использование полей в ф... Просмотров: 15479 Если вам нужно вывести дополнительное пользовательское поле типа "Привязка к разделам инфо... Открытие мобильного приложения Apache Cordova по ссылке Просмотров: 683 Достаточно часто нужно реализовывать открытие мобильного приложения по ссылке. Например: п... Удалить товары из корзины, если есть определенные товары. Просмотров: 879 Задача: если в корзину добавлены товары с определенным свойством, нужно удалить из корзины... Вывести множественное свойство типа файл с названием и весом файла в ... Просмотров: 20203 В этой заметке расскажу как красиво вывести множественное свойство типа файл в инфоблоке 1... Свойство: привязка к Яндекс:Картам - вывести из нескольких элементов ... Просмотров: 17737 Предположим, что у вас есть инфоблок со свойством "Привязка к яндекс картам". В этом инфоб... Заполнить поля пользователя из свойства заказа, на примере ФИО Просмотров: 1199 При создании заказа покупатель заполняет поле "ФИО". Необходимо скопировать эти данные в п... Установка вебсервера на Apple M1 (нативный ARM стек), оптимизированны... Просмотров: 6142 Появилась задачка, установить стек MAMP (macOS, Apache, MYSQL, PHP) на рабочий ноутбук с п... Вывести список всех пользователей с необходимой информацией Просмотров: 24096 Если нужно, на какой-либо странице сайта, вывести всех пользователей из группы "Зарегистир... Вывести информацию, только на первом уровне раздела каталога, в 1С-Би... Просмотров: 4253 Задача: на сайте, в каталоге, выводится два фильтра - боковой и верхний. Оба компонента по... Многосайтовость битрикс на разных доменах и поддоменах Просмотров: 61272 Часто спрашивают "как настроить многосайтовость Битрикс на разных доменах", решил записать... Если папка то применяем...в Битрикс Просмотров: 29223 Бывает, стоит задача применить какой-либо стиль или вывести конкретный кусочек кода для ди... Ajax форма обратной связи, реализация в битрикс Просмотров: 7580 Иногда, на сайте требуется создать форму обратной связи, которая будет писать все данные в... Малая корзина Битрикс, упрощенный шаблон Просмотров: 12543 Шаблон малой корзины битрикс, который можно вывести в боковом разделе шаблона или в шапке ... Создание раздела инфоблока при регистрации пользователя в Битрикс Просмотров: 7913 Например вам нужно выводить информацию исключительно для определенного пользователя. Само ... Очистка корзины в 1С-Битрикс одним нажатием Просмотров: 27754 В стандартной корзине Битрикс не хватает кнопки для полной очистки корзины одним нажатием... Вывести производителей на сайте с отбором его товаров из каталога Просмотров: 18244 Достаточно частая задачка для каталога или интернет-магазина: вывести список производителе... Рассылка новинок каталога в автоматическом режиме Просмотров: 1161 Что бы реализовать рассылку новинок каталога на email-ы пользователей, можно воспользовать... Снять ограничение на количество символов в комментарии к заказу магаз... Просмотров: 11554 Как многим известно, в интернет-магазине на Битрикс имеется ограничение на количество симв...