Создание документов modx evo из фронтенда

Опубликовано: 09 Июн 2014

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

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

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

<p class="error">[+validationmessage+]</p>
<form action="[~[*id*]~]" method="post" enctype="multipart/form-data">
    <input type="hidden" name="formid" value="newArticle" />
    <p><label>Автор *</label><br>
    <input class="field" type="text" name="avtor" maxlength="60" eform="Имя автора:string:1:Имя автора нужно обязательно!" /></p>    <p><label>Email *</label><br>
    <input class="field" type="text" name="email" size="40" maxlength="40" eform="Адрес почты:email:0" /></p>
    <p><label>Адрес сайта</label><br>
    <input class="field" type="text" name="link" size="40" maxlength="40" eform="Адрес сайта:string:0" /><br>
    <em style="color: #999">Правильно: "http://www.modx-cms.ru". Неправильно: "www.modx-cms.ru"</em></p>
    Название *<br>
    <input name="pagetitle" type="text" eform="Краткое название:string:0:Название обязательно!" /><br>
    Аннотация *<br>
    <textarea name="introtext" cols="40" rows="5" eform="Краткое описание:string:0:Краткое описание обязательно!"></textarea><br><br>
    Текст статьи<br>
    <textarea name="content" cols="40" rows="10" eform="Расширенное описание:string:0"></textarea><br><br>
    <p><input type="submit" name="frmGo" value="Послать" /></p>
</form>

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

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

[!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.  Для этого в страницу с формой нужно включить следующий код:

<script language="javascript" type="text/javascript" src="assets/plugins/tinymce212/jscripts/tiny_mce/tiny_mce.js"></script>
<script language="javascript" type="text/javascript">
tinyMCE.init({
// General optionsmode : "textareas",theme : "advanced",language : "ru",inline_styles: true,convert_urls : false,relative_urls : false,remove_script_host : false,cleanup: true,extended_valid_elements:"noindex, strong/b, em/i, sup, sub, ul, ol, li, div[class | id | style | name | title | align | width | height], span[class | id | style | name | title], hr[class | id | style | name | title | align | width | height], img[class | id | style | name | title | src | align | alt | hspace | vspace | width | height | border=0], a[class | id | style | name | title | src | href | rel | target | ], iframe[class | id | style | name | title | src | align | width | height | marginwidth | marginheight | scrolling | frameborder | border | bordercolor], embed[class | id | style | name | title | align | width | height | hspace | vspace | type | pluginspage | src], object[class | id | style | name | title | align | width | height | hspace | vspace | type | classid | code | codebase | codetype | data]", plugins : "pagebreak, style, layer, table, save, advhr, advimage, advlink, emotions, iespell, inlinepopups, insertdatetime, preview, media, searchreplace, print, contextmenu, paste, directionality, fullscreen, noneditable, visualchars, nonbreaking, xhtmlxtras, template, wordcount, advlist, autosave", // Theme optionstheme_advanced_buttons1 : "undo, redo, |, bold, italic, underline, strikethrough, |, justifyleft, justifycenter, justifyright, justifyfull, styleselect, formatselect, fontselect, fontsizeselect, sub, sup, |, forecolor, backcolor",theme_advanced_buttons2 : "cut, copy, paste, pastetext, pasteword, removeformat, cleanup, |, search, replace, |, bullist, numlist, |, outdent, indent, blockquote, |, link, unlink, image, |, insertdate, inserttime, hr, |, charmap, emotions, iespell",theme_advanced_buttons3 : "tablecontrols, |, visualaid",theme_advanced_buttons4 : "styleprops, |, cite, abbr, acronym, del, ins, |, visualchars, nonbreaking, |, print, preview, |, fullscreen",theme_advanced_toolbar_location : "top",theme_advanced_toolbar_align : "left",theme_advanced_statusbar_location : "bottom",theme_advanced_resizing : true,});</script>

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

&allowhtml=`1` &sendAsHtml=`1`

Комментарии (4)

  1. EVGENY VARVARINETS:
    03.02.2017г. в 21:30

    Как как "редактировать" документ сделать?

  2. Наталья:
    05.02.2017г. в 14:18

    Здравствуйте. Что Вы имеете в виду, под словом "редактировать"? Здесь указан просто пример создания ресурса с фронтенда.

  3. Dennissycle:
    10.01.2019г. в 19:22

    Hei?e und saftige Frauen in Ihrer Stadt wollen Sex: https://tinyurl.com/sexywomaninyourcity39003

  4. Eduardopar:
    31.03.2019г. в 04:59

    The best girls for sex in your town: http://jnl.io/bestadultdating27603


Оставить комментарий




Разрешённые теги: <b><i><br>Добавить новый комментарий: