Comment désactiver une option dans le champ de formulaire de sélection?
$form['feed'] = array(
'#type' => 'select',
'#title' => t('Display of XML feed items'),
'#options' => array(
'title' => t('Titles only'),
'teaser' => t('Titles plus teaser'),
'fulltext' => t('Full text'),
),
'#description' => t('Global setting for the length of XML feed items that are output by default.'),
);
Comment puis-je désactiver, par exemple, l'option "Titre uniquement"?
Réponses:
La seule façon de désactiver l'une des options d'un champ de formulaire "select" est de remplacer la fonction theme_select () implémentant hook_theme_registry_alter () .
theme_select()
exécute le code suivant:La fonction que vous implémentez doit appeler votre propre fonction au lieu de form_select_options () .
Comme cela
theme_select()
est appelé pour chaque champ de sélection utilisé dans n'importe quel formulaire Drupal, je préfère envisager d'implémenter hook_form_alter () pour supprimer l'option du champ de formulaire que vous souhaitez.la source
La désactivation d'une option peut être difficile à réaliser (en utilisant form_alter pour désactiver UNE option d'un champ de sélection ), je vous recommande donc de considérer les optgroups comme alternative. La documentation de l' API de formulaire Drupal ne l'explique pas, mais l'API autorise un tableau imbriqué pour les options, jetez un œil à form_select_options () et à la
<optgroup>
partie.Vous pouvez écrire ce code:
Jetez un œil aux formulaires Drupal 6 et aux tableaux optgroup .
Edit : pour clarifier c'est une alternative et non une réponse directe.
la source
Je ne sais pas et je n'ai pas trouvé de moyen de désactiver une option individuelle. Il semble qu'ils essaient de faire quelque chose comme ça dans Drupal. Peut-être quelques alternatives, ce que vous voulez faire avec CSS?:
Ou, si vous ne voulez pas que les valeurs soient affichées, vous pouvez les annuler
la source
J'ai fait travailler le mien avec la ligne suivante
où 1 est l'index de l'élément que vous ne souhaitez pas afficher.
la source
Convertissez l'élément unique que vous souhaitez désactiver en un élément vide
<optgroup>
.Avantages:
hook_form_alter
ou directement lors de la création de votre formulaire personnalisé, il n'est pas nécessaire d'implémenter unetheme_select
fonction dans votre thème.Les inconvénients:
value='title'
attribut associé à l'original<option>
dans le DOM résultant.La mise en oeuvre:
Les groupes optiques dans Drupal sont désignés à l'intérieur du
#options
tableau comme toutes leskey => value
paires où la valeur est elle-même un tableau.Donc, à partir de l'exemple de l'OP, nous déplacerions la valeur de
t('Titles only')
pour devenir lekey
, puis ferions de la valeur un tableau vide.Le code HTML résultant ressemblera à ceci:
la source
Pour désactiver l'ensemble du champ, utilisez
Pour désactiver une option dans le champ de sélection, utilisez
où:
['field_name'] est le nom de votre champ
[1] est l'index de l'option dans la liste
la source