Czy istnieje sposób na konwersję zwykłego formularza i dodawanie symboli zastępczych za pomocą modułu, czy należy to zrobić za pomocą szablonu formularza lub jQuery?
22
Jest to symbol zastępczy HTML5, możesz po prostu dodać go jako atrybut do dowolnego elementu, a przeglądarki obsługujące HTML5 zareagują odpowiednio:
function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'some_form') {
$form['some_element']['#attributes']['placeholder'] = t('Placeholder text');
}
}
Taka krótka funkcja rekurencyjna może być przydatna, jeśli chcesz automatycznie dodawać symbole zastępcze dla każdego pola tekstowego w formularzu (na podstawie tytułu pola w tym przykładzie):
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]);
}
}
Następnie w formularzu zmień funkcję po prostu wywołaj
MYMODULE_auto_placeholders($form);
Ta metoda będzie działać dla prawie każdego pola tekstowego w formularzu, z wyjątkiem tych, które są dodawane w #process
funkcjach (na przykład pola tekstowe alt i tytuł pola obrazka).
Próbowałem odpowiedzi Clive'a:
Ale ku mojemu zdziwieniu umieściłem symbol zastępczy w polu tekstowym, a nie samo pole tekstowe. Potem wypróbowałem następującą odmianę, zadziałała!
źródło
Wystarczy dodać symbol zastępczy w tablicy #attributes dla elementu pola formularza, na przykład w poniższym kodzie.
źródło
Natknąłem się na to i pomyślałem, że odpowiedź Clive'a wydawała się miła automatycznie dodawać symbole zastępcze.
Trzeba kilka drobnych zmian, aby zrobić to poprawnie w Drupal 8, więc oto prawie ta sama odpowiedź, ale odpowiednia dla Twojego motywu Drupal 8.
źródło
Jeśli chcesz celować bezpośrednio do instancji formularza, użyj hook_form_FORM_FORM_ID_alter. Może być ładniejszy niż przy użyciu warunkowych. Moje rozwiązanie do kierowania tylko na instancję bloku formularza wyszukiwania.
źródło