Как можно выполнить проверку radio button с использованием formit?

Как реализовать валидацию флажков в форме с использованием formit и fetchit?
  • 8 января 2024 г. 14:28
Ответы на вопрос 2
FormIt - это компонент или сниппет для MODX Revolution, который позволяет создавать формы и обрабатывать их отправку. FetchIt - это дополнение к FormIt, которое позволяет динамически заполнять поля формы данными.

Чтобы выполнить проверку radio button (переключатель) при помощи FormIt, вам нужно использовать встроенные валидаторы или создать собственные. Ниже приведен пример формы с использованием сниппета FormIt, в которой используется радио-кнопка для выбора опции и встроенный валидатор для обязательного поля.

1. Создайте форму с радио-кнопками, укажите для них одинаковое имя (например, `option`) и разные значения:

```html
[[!FormIt?
   &hooks=`email,redirect`
   &validate=`option:required`
   &emailTpl=`contactEmailTpl`
   &emailSubject=`Новое сообщение с вашего сайта`
   &emailTo=`[email protected]`
   &redirectTo=`123`
]]

<form action="[[~[[*id]]]]" method="post" id="contact-form">
    <label for="option1">
        <input type="radio" name="option" value="Option 1" id="option1" />
        Опция 1
    </label>

    <label for="option2">
        <input type="radio" name="option" value="Option 2" id="option2" />
        Опция 2
    </label>

    <input type="submit" name="submit" value="Отправить" />
</form>
```

В этом примере:
- `&hooks` указывает на хуки, которые будут обрабатывать форму (в данном случае, отправка email и перенаправление после отправки).
- `&validate` использует встроенный валидатор `required`, чтобы убедиться, что выбран хотя бы один из вариантов радио-кнопок.
- Остальные параметры `&emailTpl`, `&emailSubject`, `&emailTo`, `&redirectTo` задают параметры для отправки email и перенаправления.

Если вы хотите добавить пользовательскую валидацию или валидацию на основе определённых условий, вы можете создать кастомный валидатор через hook в FormIt. Создать кастомный хук можно следующим образом:

```php
[[!FormIt?
   &hooks=`customValidator,email,redirect`
]]
```

Создайте сниппет с именем `customValidator`:

```php
<?php
if ($hook->getValue('option') != 'Option 1' && $hook->getValue('option') != 'Option 2') {
    $hook->addError('option', 'Вы должны выбрать одну из опций.');
    return false;
}
return true;
```

В этом коде проверяется значение поля `option` и в случае несоответствия заданным условиям генерируется ошибка.

Касательно FetchIt, это дополнение используется для автоматического заполнения форм, а не для валидации. Для установки значений по умолчанию в радио-кнопки FetchIt может выглядеть примерно так:

```html
<input type="radio" name="option" value="Option 1" [[!FetchIt? &field=`option` &value=`Option 1` &checked=`checked`]] />
<input type="radio" name="option" value="Option 2" [[!FetchIt? &field=`option` &value=`Option 2` &checked=`checked`]] />
```

В этом примере FetchIt проверит значение поля `option` и, если оно совпадает с значением в радио-кнопке, то установит атрибут `checked`, выбирая эту кнопку.

У
Основы HTML. У вас ни один флажок по умолчанию не отмечен, а форма в таком случае не будет отправлять значение при сабмите. Поэтому помимо всего прочего вам нужно добавить в форму скрытое поле, т.е. типа hidden с таким же именем: 
<input type="hidden" name="way[]" value="">
Похожие вопросы