Создание документов MODx по данным формы eForm устаревший метод

Docmanager

Для операций с документами будем использовать специальную библиотеку docmanager. Устанавливаем ее в папкуassets/libs/docmanager.

Создаем форму

Форма создается с помощью стандартного сниппета eForm. В него встроены все необходимые проверки полей, а также возможность отправить нам письмо о добавлении нового материала.

Для примера сделаем такую форму в чанке Anketa:

[+validationmessage+]





Правильно: "http://www.modx-cms.ru". Неправильно: "www.modx-cms.ru"

Название *

Аннотация *


Текст статьи


Вызов формы на сайте

Для показа формы можно использовать следующий вызов:

[!eForm? &formid=newArticle &subject=Посетители прислали новый файл &tpl=Anketa !] Важно! Параметр formid должен совпадать с одноименным скрытым полем формы.

Обработчик полученных данных

После того как мы получили все необходимые от пользователя данные нам необходимо их поместить в документ. Для это делаем новый сниппет с именем NewArticleEvent и в нем создаем свою функцию CreateNewArticle:

function CreateNewArticle(&$fields){ // Массив $fields будет содержать данные всех полей формы // Создания документа с описанием. require_once('assets/libs/docmanager/document.class.inc.php'); $doc = new Document(); // создаем документ $doc->Set('parent',60); // определяем в какую папку положить $doc->Set('template','Статья'); // задаем шаблон $doc->Set('pagetitle',$fields['pagetitle']); // краткое название $doc->Set('introtext',$fields['introtext']); // аннотацию $doc->Set('content',$fields['content']); // основное содержимое // Далее пойдут TV-параметры $doc->Set('tvAvtor',$fields['avtor']); // автор $doc->Set('tvEmail',$fields['email']); // e-mail $doc->Set('tvLink',$fields['link']); // ссылка $doc->Save(); // сохраняем return true; // Говорим eForm, что все в порядке. } Вот такой простой код нам позволит полученные данные сохранить в документ. Названия сниппета и функции с обработчиком можно изменить при желании.

Важно! Для указания TV-параметров перед названием необходимо добавлять приставку tv, то есть это не часть названия параметра.

Подключаем обработчик к нашей форме

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

[!NewArticleEvent!] [!eForm? &formid=newArticle &subject=Посетители прислали новый файл &tpl=Anketa &eFormOnBeforeMailSent=CreateNewArticle!] Важно! Чтобы событие eForm имело доступ к нашему обработчику необходимо сделать вызов сниппета с обработчиком сразу перед вызовом eForm. Название вызываемой функции задается в параметре вызова обработчика &eFormOnBeforeMailSent.

PS: Таким образом можно создавать формы любой сложности и даже организовать закачку файлов.

Визуальный редактор

Чтобы посетителям было удобнее создавать статьи, можно использовать визуальный редактор tinyMCE. Для этого в страницу с формой нужно включить следующий код:

Редактор tinyMCE хорошо настраивается. поэтому вы можете добавить инструменты, которые необходимы в вашем случае. А для того, чтобы eForm пропустил теги HTML необходимо добавить следующие параметры:

&allowhtml=1 &sendAsHtml=1

Mem: 3.5 mb, MySQL: 0.0031 s, 2 req., PHP: 0.0365 s, all: 0.0395 s, cache.