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

    Часто задаваемые вопросы