Сохранение данных форм в системе 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 некешируемо вызвать сниппет с функцией-обработчиком.
Например так:

  • This is second incident that I am scanning anything about modifying websites with the system. It seems that you are an super expert blogger. Your post is an excellent example of why I continue coming back to study your good quality content that is forever updated.

  • Наталья

    Здравствуйте,

    при добавлении функции на странице появляется ошибка «Parse error: syntax error, unexpected T_STRING in Z:\home\sitename.ru\www\manager\includes\document.parser.class.inc.php(814) : eval()’d code on line 17»
    Ошибка видимо только в сниппете, т.к. без него все работет.
    MODx Evo 1.0.5.

    В чем может быть ошибка и куда копать дальше?

    • Очевидно где-то в конце строки точку с запятой забыли или скобочку фигурную не захватили при копировании

  • $doc->Set(‘published’,’0?);
    исправьте знак вопроса на кавычку и ошибка пропадет

    • Спасибо! Действительно ошибка закралась

  • Дмитрий

    Спасибо, интересно.

    P.S. Ну зачем же такой жуткий кислотный стиль сайта? Эта цыганщина просто глаза выжигает.. Вы же не артсюир… для разработчиков это не нужно.. попроще и все будет норм )

  • smoki935

    ссылки не рабочие

    • поправил, спасибо

  • Никита Котенко

    можно ли в eFormOnBeforeMailSent через запятую перечислить несколько снипетов?

    • Никита Котенко

      проверил сам — можно 🙂

  • Serafim Zagadochny

    Каким образом можно вывести в шаблоне thank-tpl ссылку на созданный документ? Спасибо!

    • Вот по-простому — никак.