Fi1osof 16 февраля 2014 0 0
Выпустил новый пакет modxSite-1.2.0-beta

Главная новинка — процессор на обработку форм (на замену formIt). Конечно, в нем гораздо меньше готовых функций, чем в формите, но он вполне годится ему на замену. Под катом покажу применение на примере обновленной сборки ShopModxBox-2.2.0

Итак, главное назначение этого процессора — обработка входящих данных, проверка обязательных полей, выполнение субпроцессора, если данные все заполнены верно (к примеру, процессор оформления заказа), а так же рассылка уведомления пользователям из указанных групп пользователей.

Рассмотрим реальную задачу, которую этот процессор выполнял в обработке формы обратной связи на странице контактов в сборке магазина:
1. Проверка обязательных полей (емейл, имя, сообщение, каптча).
2. Отправка уведомления пользователям спецгруппы.

Сам по себе базовый процессор обработки форм не имеет обязательных полей, но в нем предусмотрена функция, в которой эти поля указываются. Что мы делаем, для реализации нашей формы?

1. Мы пишем свой расширяющий процессор, в котором перечисляем обязательные поля, устанавливаем значение группы пользователей на основе системной настройки, которые получат новые сообщения, указываем проверять каптчу (будет автоматически использован пакет modCaptcha), а так же указывает Smarty-шаблон, который будет использоваться для оформления письма менеджерам (необходимо будет его добавить в основной шаблон сайта. Шаблон по умолчанию есть в самом пакете modxSite, но он не подключен).

2. Создаем Smarty-шаблон, в котором прописываем вызов нашего процессора.
Особое внимание предлагаю обратить на блок вывода каптчи.
Немного инфы по юзабилити на заметку: (для всех, кто ненавидит каптчи (как и я)). В общем, если в форме используется каптча, то в случае отправки формы, даже если есть ошибки в форме, если каптча введена верно, то не создавать опять форму с каптчей (типа вводите картинку опять, раз руки такие кривые), а создавать хидден-поле со значением этой каптчи без вывода картинки, которая изменит значение в сессии. То есть если пользователь правильно ввел раз каптчу, то дальше она ему не нужна.

А теперь самое интересное: данный процессор имеет огромное преимущество над формитом и прочими решениями тем, что обработка всех полей происходит именно в процессоре, и он возвращает ассоциативный массив ошибок. Таким образом его можно использовать хоть в обычной форме, хоть с Ajax-ом, хоть в консоли отлаживать. К примеру, в новой сборке магазина выполните вот такой код:
<?php
 
print '<pre>';
ini_set('display_errors', 1);
$modx->switchContext('web');
$modx->setLogLevel(3);
$modx->setLogTarget('HTML');
$modx->invokeEvent('OnHandleRequest');
$namespace = 'modxsite';
if(!$response = $modx->runProcessor('web/forms/feedback',
array(
    "email" => "test@test.loc",
    "fullname"  => "test",
    "message"   => "test",
    "captcha"   => "wlfnq",
), array(
'processors_path' => $modx->getObject('modNamespace', $namespace)->getCorePath().'processors/',
))){
print "Не удалось выполнить процессор";
return;
}
 
print_r($response->getResponse());

И вы увидите результат.
0 комментариев
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.