Wie deaktiviere ich eine Option im Feld Formular auswählen?
$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.'),
);
Wie kann ich beispielsweise die Option "Nur Titel" deaktivieren?
Antworten:
Die einzige Möglichkeit, eine der Optionen für ein Formularfeld "Auswählen" zu deaktivieren, besteht darin, die Funktion theme_select () zu überschreiben, die hook_theme_registry_alter () implementiert .
theme_select()
führt den folgenden Code aus:Die von Ihnen implementierte Funktion sollte anstelle von form_select_options () Ihre eigene Funktion aufrufen .
Wie
theme_select()
für jedes Auswahlfeld, das in einem Drupal-Formular verwendet wird, aufgerufen wird, würde ich lieber hook_form_alter () implementieren , um die Option aus dem gewünschten Formularfeld zu entfernen.quelle
Eine Option zu deaktivieren kann schwierig sein , zu erreichen ( Mit form_alter zu deaktivieren ONE Option eines Auswahlfeld ) , damit ich Sie empfehlen zu sehen optgroups als Alternative. Die Dokumentation zur Drupal- Formular-API erklärt dies nicht, aber die API erlaubt verschachtelte Arrays für die Optionen. Schauen Sie sich form_select_options () und das
<optgroup>
Teil an.Sie können diesen Code schreiben:
Schauen Sie sich Drupal 6-Formulare und Optgroup-Arrays an .
Bearbeiten : Um dies zu verdeutlichen, ist dies eine Alternative und keine direkte Antwort.
quelle
Ich weiß es nicht und konnte keine Möglichkeit finden , eine einzelne Option zu deaktivieren . Es sieht so aus, als würden sie versuchen, so etwas in Drupal zu bringen. Vielleicht einige Alternativen, könnte das, was Sie wollen, mit CSS gemacht werden?:
Wenn Sie nicht möchten, dass die Werte überhaupt angezeigt werden, können Sie sie deaktivieren
quelle
Ich habe meine mit der folgenden Zeile arbeiten
Dabei ist 1 der Index des Elements, das nicht angezeigt werden soll.
quelle
Konvertieren Sie das einzelne Element, das Sie deaktivieren möchten, in ein leeres
<optgroup>
.Vorteile:
hook_form_alter
oder direkt beim Erstellen Ihres benutzerdefinierten Formulars erfolgen. Es ist nicht erforderlich, einetheme_select
Funktion in Ihrem Thema zu implementieren .Nachteile:
value='title'
dem Original zugeordnete Attribut<option>
im resultierenden DOM darzustellen .Implementierung:
Optgruppen in Drupal werden innerhalb des
#options
Arrays als allekey => value
Paare bezeichnet, bei denen der Wert selbst ein Array ist.Aus dem Beispiel im OP würden wir also den Wert von verschieben
t('Titles only')
, um der zu werden,key
und dann den Wert zu einem leeren Array machen.Das resultierende HTML sieht ungefähr so aus:
quelle
Verwenden Sie zum Deaktivieren des gesamten Felds
Verwenden Sie zum Deaktivieren einer Option im Auswahlfeld
wo:
['Feldname'] ist der Name Ihres Feldes
[1] ist der Index der Option in der Liste
quelle