Николай Ланец
16 февр. 2014 г., 18:10

modxSite 1.2.0-beta

Выпустил новый пакет 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());
И вы увидите результат.

Добавить комментарий