У меня есть выпадающий список, который отображает различные поля в зависимости от того, что выбрано, и я знаю, что могу переключать видимость с состояниями, но когда я пытаюсь использовать требуемый, отображается * span, но это на самом деле не требуется. Я имею в виду, что, хотя это «обязательно», я могу нажать «Отправить» и не получить сообщение об ошибке от drupal. Я делаю что-то не так или это в настоящее время не работает в Drupal 7.8?
$form['host_info'] = array(
'#type' => 'select',
'#title' => t("Host Connection"),
'#options' => array(
'SSH2' => t('SSH2'),
'Web Service' => t('Web Service'),
),
'#default_value' => t(variable_get('host_info', 'SSH2')),
'#description' => t("Specify the connection information to the host"),
'#required' => TRUE,
);
$form['ssh_host'] = array(
'#type' => 'textfield',
'#title' => t("Host Address"),
'#description' => t("Host address of the SSH2 server"),
'#default_value' => t(variable_get('ssh_host')),
'#states' => array(
'visible' => array(
':input[name=host_info]' => array('value' => t('SSH2')),
),
'required' => array(
':input[name=host_info]' => array('value' => t('SSH2')),
),
),
);
$form['ssh_port'] = array(
'#type' => 'textfield',
'#title' => t("Port"),
'#description' => t("Port number of the SSH2 server"),
'#default_value' => t(variable_get('ssh_port')),
'#states' => array(
'visible' => array(
':input[name=host_info]' => array('value' => t('SSH2')),
),
'required' => array(
':input[name=host_info]' => array('value' => t('Web Service')),
),
),
);
7
javascript
Sathariel
источник
источник
name
. Должно быть:input[name="host_info"]
.Ответы:
Вам нужно будет проверить это самостоятельно в пользовательской функции проверки.
Все, что настроено с помощью #states, происходит на 100% в браузере, все, что он делает, не видно для Drupal при отправке формы (например, все невидимые поля формы отправляются и проверяются одинаково, если не было #states).
источник
Вы можете использовать необходимые как это:
источник
Очень похоже на ответ Феликса Евы, только вот фрагмент для проверки встроенного элемента:
Вы вызываете элемент validate для функции обязательного элемента:
Затем функция проверки находит требуемое поле и проверяет, имеет ли оно правильное значение формы, которое выявит поле, которое необходимо заполнить.
источник
Есть еще один способ использовать функцию AFTER_BUILD для формы и сделать это поле необязательным. Вот ссылка на Drupal 6.
Добавьте это в свой код формы
Внедрите после сборки, протестируйте пользовательское условие поля
В моем случае #states добавлял несколько *, поэтому я должен избегать этого и использовал jquery, чтобы скрыть и показать диапазон, содержащий *
А также
На основании моего значения custom_field.
источник
Вот подробное руководство по Drupal 7 форме # состояния .
Это важный бит:
источник
Я только что столкнулся с той же проблемой, поэтому мне нужно было обеспечить пользовательскую проверку, однако я хотел, чтобы это контролировалось с помощью массива #states, чтобы мне не приходилось указывать одни и те же правила дважды.
Он работает путем извлечения имени поля из селектора jQuery (селектор должен быть в формате
:input[name="field_name"]
иначе он не будет работать).Приведенный ниже код тестируется только в том конкретном сценарии, в котором я его использовал, однако я думаю, что он может оказаться полезным для кого-то другого.
источник
Я смог сделать это таким образом в Drupal 8:
Не ставьте t ('SSH2'). это поместит его перевод туда вместо значения опции, которая является непереведенным SSH2.
Я подозреваю, что это будет работать и для Drupal 7.
источник
У меня есть вложенные поля формы и флажок, поэтому мне нужно было немного поработать над ответом Доминика Вудмана. В случае, если любое другое тело столкнется с той же проблемой:
источник