Часто форма подтверждения должна включать в себя различную информацию для регистрации вроде IP-адреса посетителя или даты подтверждения формы. Вы можете распечатать эту информацию в виде скрытых полей в форме, но в данном примере мы покажем, как добавить эти значения через настраиваемый хук.
Обоснуем это вне общей формы контакта, как указано в примере Contact Page.
Тег сниппета
Единственное, что нужно добавить к базовому запросу – это новый хук: мы добавили хук с именем customhook
[[!FormIt?
&hooks=`spam,customhook,email,redirect`
&emailTpl=`MyEmailChunk`
&emailTo=`user@example.com`
&redirectTo=`123`
&validate=`name:required,
email:email:required,
subject:required,
text:required:stripTags,
]]
Сниппет customhook
Название хука соответствует имени сниппета. Таким образом, мы создаем сниппет с именем customhook. Это пригодится при написании настраиваемого хука, чтобы сначала провести некоторые тесты и убедиться в его выполнении. Поскольку предполагается, что настраиваемый хук должен возвращать значение true или false, не так просто распечатать информацию об отладке. Вместо этого мы можем написать что-нибудь в логе MODx, используя функцию ->log().
Помните, что Вам нужно возвращать true, если Вы хотите принимать во внимание валидацию формы! Вот наш пример кода для нашего нового сниппета customhook:
Тестирование
Первое, что Вы хотите сделать при написании настраиваемого хука – это протестировать его, чтобы убедиться в успешном выполнении.
<?php
$modx->log(xPDO::LOG_LEVEL_ERROR, 'Testing my custom hook..');
return true; //<-- если Вы опустите это или укажите return false, форма не будет проверяться
Сохраните сниппет, и попробуйте подтвердить форму. Проверьте системный лог MODx (Reports --> Error Log) чтобы убедиться, что ваш сниппет выполнен. Вы должны увидеть что-то вроде этого в логах:
[2011-10-24 11:23:20] (ERROR @ /index.php) Testing my custom hook.
Установка значений
У всех настраиваемых хуков есть общая черта – необходимо вычислить новые значения полей, это эмулирует наличие скрытых полей в форме. Например, Ваш сниппет customhook может установить метку даты, когда форма была отправлена.
<?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'];