Динамическое изменение заголовков в поле emailSubject при отправке сообщений из FormIt

Октябрь, 07th 2019Рубрика: Web 5152
Подписаться на комментарии по RSS

Динамическое изменение заголовков сообщений FormIt в MODX

Задача была следующая — сделать так, чтобы поле emailSubject содержало некий уникальный номер и наименование товара, типа такого «Заявка №XXXX на товар [[*title]]». Проблема состоит в том, что компонент FormIt в MODX Revolution не обрабатывает эти поля так же как чанки, а просто помещает заданное значение в тему сообщения.

Разобьём поставленную задачу на части. Для начала хочу рассказать как делать динамические заголовки для сообщений, подставляя значение в поле `emailSubject`. Тут не надо изобретать велосипедов, всё уже предусмотрено в хуке email (FormIt.Hooks.email):

https://docs.modx.com/extras/revo/formit/formit.hooks/formit.hooks.email

Из документации следует, что достаточно в FormIt добавить параметр &emailUseFieldForSubject=`1`, а &emailSubject=`` оставить пустым.

[[!AjaxForm?
	&snippet=`FormIt`
	&form=`zayavkaForm`
	&hooks=`email`
	&emailUseFieldForSubject=`1`
	&emailSubject=``
	&emailTo=`primer@domain.ru`
	&emailTpl=`zayavkaMessage`
]]

Значение для заголовка сообщения берется из поля формы (можно скрытого) с именем «subject»:

<input type="hidden" name="subject" value="Заявка №[[!mailID]] на товар [[*title]]" />

Как добавить в заголовок сообщения уникальный номер и сохранять сообщения в базе MODX Revolution

У FormIt имеется ещё один интересный хук FormItSaveForm (FormIt.Hooks.FormItSaveForm) для хранения заполненных форм в базе MODX (modx_formit_forms):

https://docs.modx.com/extras/revo/formit/formit.hooks/formit.hooks.formitsaveform

Предыдущий чанк вызова формы принимает следующий вид:

[[!AjaxForm?
	&snippet=`FormIt`
	&form=`zayavkaForm`
	&hooks=`mailID,email,FormItSaveForm`
	&formName=`Заявка с сайта`
	&formFields=`tovar,name,phone,message`
	&fieldNames=`tovar==Товар,name==Имя,phone==Телефон,message==Комментарий`
	&emailUseFieldForSubject=`1`
	&emailSubject=``
	&emailTo=`primer@domain.ru`
	&emailTpl=`zayavkaMessage`
]]

В хуках добавились mailID (о нём поговорим чуть позже) и FormItSaveForm. Кроме того появились дополнительные параметры &formName, &formFields, &fieldNames. Они нужны чтобы озаглавить поля при сохранении формы в базе modx_formit_forms. Подробнее можно почитать в документации к FormItSaveForm.

Остался неизвестный хук `mailID`. На самом деле это мой снимет, который формирует уникальный номер для заполненной формы. Сниппет вызывается в некешированном виде и генерирует номера на основе ID записей в таблице modx_formit_forms, подставляя требуемое количество нулей перед цифрой при формировании номера сообщения. Вот его код:

<?php
function numberFormat($digit, $width) {
    while(strlen($digit) < $width)
      $digit = '0' . $digit;
      return $digit;
}
$sql = "SELECT MAX(id) FROM modx_formit_forms;";
$statement = $modx->query($sql);
$mailID = $statement->fetchColumn();
return numberFormat($mailID+1, 4);
Подписывайтесь на канал Яндекс.Дзен и узнавайте первыми о новых материалах, опубликованных на сайте.

Если считаете статью полезной,
не ленитесь ставить лайки и делиться с друзьями.

ваш комментарий будет опубликован после проверки
на указанный адрес будет отправлено письмо с кодом активации. Вы можете настроить собственный профиль и стать активным участником или автором.