Создание документа Modx при заполнении формы Formit

Для автоматического создания документа в админке modx по результатам заполнения формы следует применять связку Formit(AjaxForm) + хук.

Хук — это сниппет, выполняемый после сабмита формы (отправки формы).
Приведу в пример хук, который добавляет отзывы о компании в виде отдельных ресурсов.
Назовем хук addReviewDocument

<?php
$name = $hook->getValue('name');
$stars = $hook->getValue('stars');
$comment = $hook->getValue('comment');

$name = addslashes($_POST['name']);
$message = addslashes($_POST['message']);    

$parent = 2958;
 
$docs = $modx->getCollection('modResource', [
    'parent' => $parent
]);

$menuindex = count($docs) + 1;
 
// Создаем новый ресурс
$resource = $modx->newObject('modResource');                        
$resource->set('template', 23);
$resource->set('searchable', 0);
$resource->set('isfolder', 0);
$resource->set('richtext', 0);
$resource->set('published', 0);
$resource->set('createdon', time());
$resource->set('pagetitle', time() . ' ' . $name);
$resource->set('alias', time());
$resource->setContent($comment);
$resource->set('parent', $parent);
$resource->set('menuindex', $menuindex);
$resource->save();

$resource->setTVValue('reviewName', $name);
$resource->setTVValue('reviewStars', $stars);
$resource->save();

return true;

В вызов AjaxForm добавляем название сниппета (хука). Определяем очередность вызова.
В данном примере, документ будет создаваться после проверки на СПАМ и до отправки на email.
Так, даже в случае с проблемами работоспособности отправки почты, документ будет создан.

{'!AjaxForm' | snippet : [
    'snippet' => 'FormIt',
    'formName' => 'Отзыв о компании',
    'validationErrorMessage' => 'Форма содержит ошибки',
    'formSelector' => 'af_review',
    'emailTo' => $_modx->config.emailto,
    'emailBCC' => $_modx->config.emailtobcc,
    'emailSubject' => $_modx->config.http_host ~ ' - Отзыв о компании',
    'emailFrom' => $_modx->config.emailsender,
    'emailFromName' => $_modx->config.site_name,
    'form' => 'review.form',
    'emailTpl' => 'review.emailTpl',
    'hooks' => 'stopspam,addReviewDocument,email,FormItSaveForm',
    'customValidators'=>'isXcode',
    'validate' => 'name:required,stars:required,comment:required,xcode:isXcode',
]}

Документ создаем снятым с публикации. После модерации менеджер включает его.

Нет комментариев