J'ai une liste déroulante qui affiche divers champs en fonction de ce qui est choisi et je sais que je peux parcourir la visibilité avec des états, mais lorsque j'essaie d'utiliser requis, la * span est affichée mais elle n'est pas réellement requise. Ce que je veux dire, c'est que même si c'est "obligatoire", je peux appuyer sur soumettre et ne pas recevoir de message d'erreur de drupal. Suis-je en train de faire quelque chose de mal ou est-ce actuellement cassé dans 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
la source
la source
name
. Ça doit l'être:input[name="host_info"]
.Réponses:
Vous devrez le valider vous-même dans une fonction de validation personnalisée.
Tout ce qui est configuré par #states se produit à 100% dans le navigateur, tout ce qu'il fait n'est pas visible pour Drupal lorsque le formulaire est soumis (par exemple, tous les champs de formulaire invisibles sont soumis et validés de la même manière s'il n'y avait pas de #states).
la source
Vous pouvez utiliser requis comme ceci:
la source
Très similaire à la réponse de Felix Eve, ceci est un extrait de validation d'élément en ligne:
Vous appelez une fonction de validation d'élément l'élément requis:
Ensuite, la fonction de validation trouve le champ requis et vérifie s'il a la valeur de formulaire correcte qui révélerait le champ qui doit être requis.
la source
Il existe une autre façon d'utiliser la fonction AFTER_BUILD pour le formulaire et de rendre ce champ facultatif. Voici un lien pour drupal 6.
Ajoutez ceci à votre code de formulaire
Implémentez après la construction, testez votre condition de champ personnalisé
Dans mon cas, #states ajoutait plusieurs * donc je dois l'éviter et j'ai utilisé jquery pour masquer et afficher la plage qui contient *
Et
Basé sur ma valeur custom_field.
la source
Voici un guide détaillé sur les états # de Drupal 7 .
C'est le bit important:
la source
Je viens d'être confronté au même problème, donc j'avais besoin de fournir une validation personnalisée, mais je voulais que cela soit contrôlé via le tableau #states, donc je n'ai pas eu à spécifier deux fois les mêmes règles.
Il fonctionne en extrayant le nom du champ du sélecteur jQuery (le sélecteur doit être au format
:input[name="field_name"]
ou il ne fonctionnera pas).Le code ci-dessous n'est testé que dans le scénario spécifique dans lequel je l'utilisais, mais je pense qu'il peut s'avérer utile à quelqu'un d'autre.
la source
J'ai pu le faire de cette façon dans Drupal 8:
Ne mettez pas t ('SSH2'). cela mettra la traduction de celui-ci au lieu de la valeur de l'option qui est un SSH2 non traduit.
Je soupçonne que cela fonctionnerait aussi pour Drupal 7.
la source
J'ai des champs de formulaire imbriqués et une case à cocher, donc je devais travailler un peu sur la réponse de Dominic Woodman. Au cas où un autre organisme rencontrerait le même problème:
la source