Jump to main content Jump to doc navigation

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

Мы будем основывать это на общей контактной форме, как указано в Примере простой формы.

Тег сниппета

Единственное, что нам нужно добавить к базовому вызову Formit, это новый хук: мы добавили хук с именем 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 появляется в параметре &hooks, важна. Хуки выполняются строго в том порядке, в котором они перечислены.

Сниппет customhook

Имя хука соответствует имени Сниппета. Итак, мы создаем сниппет с именем customhook. При написании пользовательского хука полезно сначала провести некоторое тестирование, чтобы убедиться, что он срабатывает. Поскольку настраиваемый обработчик должен только возвращать либо истинное, либо ложное значение, распечатать отладочную информацию непросто. Но вместо этого мы можем записать что-нибудь в лог MODX с помощью функции $modx->log().

Помните, что вы должны вернуть true, если хотите, чтобы ваша форма была подтверждена! Вот наш пример кода для нашего нового Сниппета customhook:

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

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

<?php
$modx->log(xPDO::LOG_LEVEL_ERROR,'Тестирование моего хука');
return true;  //<-- если вы не укажете это или вернете "ложь", ваша форма не будет проверяться

Сохраните свой Сниппет и попробуйте отправить форму. Проверьте системный журнал MODX (** Управление -> Отчеты -> Журнал ошибок **), чтобы убедиться, что ваш Сниппет был исполнен. Среди записей журнала должны увидеть что-то вроде этого:

[2011-10-24 11:23:20] (ERROR @ /index.php) Тестирование моего хука.

Задание параметров

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

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

После сохранения вы можете обновить свой чанк MyEmailChunk, включив в него новую информацию, например:

MyEmailChunk:

[[+name]] ([[+email]]) <br/>

Дата отправки: [[+datestamp_submitted]]<br/>

Чтобы это работало, хук customhook должен быть указан перед email в параметре &hooks в вашем вызове FormIt. Порядок, в котором Cниппеты появляются в параметре &hooks, определяет порядок выполнения. Если хук email будет выполнен перед настраиваемой ловушкой, то Плейсхолдер datestamp_submitted в чанке останется пустым.

Доступ к параметрам

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

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

Или все значения можно прочитать сразу, используя $hook->getValues():

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

Смотрите также

  1. Пользовательский произвольный хук
  2. Пример простой формы
  3. Использование пустого поля для защиты от спама
  4. Валидаторы