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"?
Désactiver une option peut être difficile à réaliser ( tiliser form_alter pour désactiver UNE option d'un champ de sélection ) donc je vous recommande de regarder optgroups comme alternative. La documentation Drupal API de formulaire ne l'explique pas mais l'API autorise un tableau imbriqué pour les options, jetez un œil à form_select_options () et le <optgroup>
partie.
Vous pouvez écrire ce code:
$form['feed'] = array(
'#type' => 'select',
'#title' => t('Display of XML feed items'),
'#options' => array(
'Titles only' => array(,
'teaser' => t('Titles plus teaser'),
'fulltext' => t('Full text'),
),
'Titles only 2' => array(,
'teaser2' => t('Titles plus teaser 2'),
'fulltext2' => t('Full text 2'),
),
),
'#description' => t('Global setting for the length of XML feed items that are output by default.'),
);
Jetez un œil à formulaires Drupal 6 et tableaux optgroup .
Edit : pour clarifier c'est une alternative et non une réponse directe.
La seule façon de désactiver l'une des options d'un champ de formulaire "sélectionner" est de remplacer la fonction theme_select () implémentant hook_theme_registry_alter () .
theme_select()
exécute le code suivant:
function theme_select($variables) {
$element = $variables['element'];
element_set_attributes($element, array('id', 'name', 'size'));
_form_set_class($element, array('form-select'));
return '<select' . drupal_attributes($element['#attributes']) . '>' . form_select_options($element) . '</select>';
}
La fonction que vous implémentez doit appeler votre propre fonction au lieu de form_select_options () .
Comme 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 de la champ de formulaire que vous souhaitez.
Je ne sais pas et je n'ai pas réussi à trouver un moyen désactiver une option individuelle. On dirait qu'ils essaient de faire quelque chose comme ça dans Drupal. Peut-être quelques alternatives, ce que vous voulez faire avec CSS?:
$form['feed']['#attributes'] = array('class' => array('options-styles-class'));
Ou, si vous ne voulez pas que les valeurs soient affichées, vous pouvez les annuler
unset($form['feed']['#options']['title']);
J'ai fait travailler le mien avec la ligne suivante
unset($form['field_name']['und']['#options'][1]);
où 1 est l'index de l'élément que vous ne souhaitez pas afficher.
Convertissez le seul élément que vous souhaitez désactiver en un <optgroup>
Vide.
Avantages:
hook_form_alter
Ou directement lors de la création de votre formulaire personnalisé, il n'est pas nécessaire d'implémenter une fonction theme_select
Dans votre thème.Contre:
value='title'
Associé à l'original <option>
Dans le DOM résultant.Implémentation:
Les groupes optiques dans Drupal sont indiqués à l'intérieur du tableau #options
Comme n'importe quelle paire key => value
Où la valeur est elle-même un tableau.
Donc, à partir de l'exemple de l'OP, nous pourrions déplacer la valeur de t('Titles only')
pour devenir key
, puis faire de la valeur un tableau vide.
$form['feed'] = array(
'#type' => 'select',
'#title' => t('Display of XML feed items'),
'#options' => array(
t('Titles only') => array(), // This one becomes disabled as an empty optgroup
'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.'),
);
Le code HTML résultant ressemblera à ceci:
<form>
<div>
<label>Display of XML feed items</label>
<select>
<optgroup>Titles only</optgroup>
<option value="teaser">Titles plus teaser</option>
<option value="fulltext">Full text</option>
</select>
</div>
</form>
Pour désactiver l'ensemble du champ, utilisez
$form['field_name']['#disabled']= TRUE;
Pour désactiver une option dans le champ de sélection, utilisez
unset($form['field_name']['und']['#options'][1]);
où:
['field_name'] est le nom de votre champ
[1] est l'index de l'option dans la liste