Gibt es eine Möglichkeit, ein reguläres Formular zu konvertieren und Platzhalter mit einem Modul hinzuzufügen, oder sollte dies mit einer Formularvorlage oder mit jQuery erfolgen?
22
Das ist ein HTML5-Platzhalter. Sie können ihn einfach als Attribut zu jedem Element hinzufügen. HTML5-fähige Browser reagieren entsprechend:
function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'some_form') {
$form['some_element']['#attributes']['placeholder'] = t('Placeholder text');
}
}
Eine kurze rekursive Funktion wie diese kann nützlich sein, wenn Sie automatisch Platzhalter für jedes Textfeld in einem Formular hinzufügen möchten (basierend auf dem Feldtitel in diesem Beispiel):
function MYMODULE_auto_placeholders(&$element) {
if ( isset($element['#type']) && $element['#type'] == 'textfield') {
// set placeholder
$element['#attributes']['placeholder'] = $element['#title'];
// hide label
$element['#title_display'] = 'invisible';
}
foreach (element_children($element) as $key) {
MYMODULE_auto_placeholders($element[$key]);
}
}
Dann rufen Sie in Ihrem Formular einfach die Änderungsfunktion auf
MYMODULE_auto_placeholders($form);
Diese Methode funktioniert für fast alle Textfelder in einem Formular, mit Ausnahme derjenigen, die in #process
Funktionen hinzugefügt werden (wie z. B. die Textfelder "alt" und "title" eines Bildfelds).
Ich habe Clives Antwort ausprobiert:
Aber zu meiner Überraschung habe ich den Platzhalter im Wrapper von textfield erhalten, nicht im Textfield selbst. Dann habe ich eine Variante wie folgt ausprobiert, es hat funktioniert!
quelle
Fügen Sie einfach den Platzhalter im Array #attributes für das Formularfeldelement hinzu, wie im folgenden Code.
quelle
Stolperte über dieses und dachte, dass Clives Antwort nett schien, Platzhalter automatisch hinzuzufügen.
Du brauchst ein paar kleine Änderungen, um es in Drupal 8 richtig zu machen, also hier ist so ziemlich die gleiche Antwort, aber passend für dein Drupal 8-Thema.
quelle
Wenn Sie eine Formularinstanz direkt als Ziel festlegen möchten, verwenden Sie hook_form_FORM_ID_alter. Könnte ordentlicher sein als die Verwendung von Bedingungen. Meine Lösung für das Targeting nur der Instanz des Suchformularblocks.
quelle