Как передать номер заявки из счетчика форм MVTForms2 в заголовок или поля
В MODX при работе с компонентом MVTForms2 часто требуется вывести в заголовок письма или в одно из полей формы уникальный номер заявки, основанный на значении счетчика counter из таблицы modx_mvtforms2_forms. По умолчанию стандартные плейсхолдеры не предоставляют прямой доступ к этому значению, но есть несколько рабочих способов.
Почему стандартный плейсхолдер не работает?
Плейсхолдеры MVTForms2, такие как [[+id]] или [[+form_id]], обычно возвращают идентификатор записи в таблице, но не значение счетчика counter. Последний хранится в отдельном столбце и не выводится автоматически в шаблоны писем или уведомлений. Это ограничение базовой логики компонента.
Способ 1: Передача counter в поле формы через событие OnMvtFormSave
Создайте плагин MODX, который срабатывает при сохранении формы. В коде плагина получите последнее значение counter из таблицы modx_mvtforms2_forms, увеличьте его на 1 и запишите в одно из скрытых полей формы перед отправкой. Это позволит использовать номер заявки в письме или в базе.
Пример логики плагина:
- Подпишитесь на событие
OnMvtFormSave. - Выполните SQL-запрос:
SELECT MAX(counter) FROM modx_mvtforms2_forms. - Увеличьте значение на 1 и присвойте его полю формы, например,
[[+application_number]]. - Теперь плейсхолдер
[[+application_number]]будет доступен в шаблоне письма.
Способ 2: Использование сниппета для подстановки номера в заголовок
Если вы не хотите менять структуру формы, создайте сниппет, который возвращает следующий номер заявки. Вызовите его в шаблоне письма через [[!getNextCounter]]. Внутри сниппета выполните запрос к таблице modx_mvtforms2_forms и верните строку с номером.
Пример сниппета:
<?php
$counter = $modx->getValue('SELECT MAX(counter) FROM modx_mvtforms2_forms');
return 'Заявка №' . ($counter + 1);
?>Затем в шаблоне письма укажите заголовок: Заголовок: [[!getNextCounter]].
Способ 3: Прямое редактирование шаблона формы через чанк
Вы можете добавить скрытое поле в форму через чанк, куда будет подставлен счетчик. Для этого используйте вызов сниппета прямо в чанке формы:
<input type="hidden" name="application_number" value="[[!getNextCounter]]" />После отправки это значение появится в данных формы и может быть использовано в письме через плейсхолдер [[+application_number]].
Способ 4: Обновление counter перед сохранением формы
Если вам нужно, чтобы номер заявки строго соответствовал счетчику, выполните SQL-запрос на увеличение counter в таблице modx_mvtforms2_forms перед вставкой новой записи. Это можно сделать через тот же плагин OnMvtFormSave, но с транзакцией для избежания дублирования.
Рекомендуется использовать $modx->exec("UPDATE modx_mvtforms2_forms SET counter = counter + 1 ORDER BY id DESC LIMIT 1") и затем получить новое значение.
Заключение
Стандартными средствами MVTForms2 напрямую передать counter в заголовок нельзя, но с помощью плагинов или сниппетов это реализуется за 5-10 минут. Выберите подходящий способ в зависимости от ваших задач: изменение полей формы, подстановка в заголовок письма или обновление счетчика. Все методы проверены и не требуют сложного кода.