Сохранение данных форм в системе MODx

Для организации работы web-форм на сайтах под управлением MODx используется сниппет eForm. Сниппет включен в базовую комплектацию системы управления контентом и достаточно хорошо документирован.

Однако, достаточно часто требуется не только отправка на почту данных, введенных в форму на сайте, но и сохранение информации в базу данных или лог. Сохранение данных целесообразно использовать в событии eFormOnBeforeMailSent после проверки валидности введенных значений перед отправкой почты. Введенные значения можно сохранять в структуре документов, а потом обрабатывать и выводить их с помощью Ditto.

Для работы со структурой документов потребуется специально разработанная для этой задачи библиотека. Эту библиотеку разработал ur001, я ее нашел очень давно и источник, к сожалению, указать не могу. Класс позволяет достаточно просто оперировать с документами и их TV-параметрами.

Собственно теперь об использовании:

1) Если сохранение данных будет осуществляться в структуру документов, необходимо выбрать (или создать) корневой элемент. У этого документа необходимо поставить галочку «содержит вложенные элементы»

2) Переместить этот файл в assets/libs/docmanager/document.class.inc.php.

3) Если сохранение данных формы будет осуществляться в соответствующие TV-параметры, то их предварительно необходимо создать. Имеет смысл создать для данных отдельный шаблон.

4) Необходимо создать функцию, в которой будет происходить обработка значений формы. Эту функцию надо поместить в отдельный сниппет.

Пример функции:

Эту функцию надо поместить в сниппет createticket. В принципе в этой функции можно производить любые действия с данными формы, такие как запись в текстовый лог, сохранение в специальной таблице БД, отправка письма пользователю и т.п.

5) В вызове eForm на странице необходимо добавить событие eFormOnBeforeMailSent и до вызова eForm некешируемо вызвать сниппет с функцией-обработчиком.
Например так: