Свой hook для Formit

Опубликовано: 01 Июл 2015

Вызов сниппета

Единственное, что нужно добавить к базовому запросу – это новый хук: мы добавили хук с именем newhook

 [ [!FormIt?
   &hooks=`spam,newhook,email`
   &emailTpl=`MyEmailChunk`
   &emailTo=`user@example.com`
 ]]

Сниппет newhook

Название хука соответствует имени сниппета. Таким образом, мы создаем сниппет с именем newhook. Это пригодится при написании настраиваемого хука, чтобы сначала провести некоторые тесты и убедиться в его выполнении. Поскольку предполагается, что настраиваемый хук должен возвращать значение true или false, не так просто распечатать информацию об отладке. Вместо этого мы можем написать что-нибудь в логе MODx, используя функцию ->log().
Помните, что Вам нужно возвращать true, если Вы хотите принимать во внимание валидацию формы!

Тестирование

Первое, что Вы хотите сделать при написании настраиваемого хука – это протестировать его, чтобы убедиться в успешном выполнении.

<?php
$modx->log(xPDO::LOG_LEVEL_ERROR, 'Testing my hook..');

return true;  //<-- если Вы опустите это или укажите return false, форма не будет проверяться
Сохраните сниппет, и попробуйте подтвердить форму. Проверьте системный лог MODx (Reports --> Error Log) чтобы убедиться, что ваш сниппет выполнен. Вы должны увидеть что-то вроде этого в логах:

[2011-10-24 11:23:20] (ERROR @ /index.php) Testing my  hook.

Установка значений

У всех настраиваемых хуков есть общая черта – необходимо вычислить новые значения полей, это эмулирует наличие скрытых полей в форме. Например, Ваш сниппет newhook может установить метку даты, когда форма была отправлена.

<?php
$datestamp = date('Y-m-d H:i:s');
$hook->setValue('datestamp_submitted', $datestamp);
return true;

Когда Вы это сохранили, можете обновить чанк MyEmailChunk, чтобы добавить новую информацию, например,

MyEmailChunk:
 [ [+name]] ([ [+email]])
<br/>
 Date Submitted:
[ [+datestamp_submitted]]
<br/>

Чтение значений

Следующее общее правило для настраиваемых хуков – это считать подтвержденную информацию и предпринять какие-то действия по отношению к ней, например, внести данные в базу данных. Значения могут быть прочитаны по отдельности с помощью хука $hook->getValue(), например:

$email = $hook->getValue('email');

Или же все значения могут быть считаны сразу с помощью хука $hook->getValues():

$formFields = $hook->getValues();
$email = $formFields['email'];

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

  1. Николай:
    15.02.2017г. в 20:29

    Никакие значения не устанавливаются и не считываются((
    $hook->setValue('datestamp_submitted', $datestamp);
    $email = $hook->getValue('email');
    Не работают.

  2. Наталья:
    17.02.2017г. в 19:17

    А сам хук отрабатывается, в логах запись есть?


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




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