¿Hay alguna manera de convertir un formulario normal y agregar marcadores de posición con un módulo, o debería hacerse con una plantilla de formulario o con jQuery?
22
Es un marcador de posición HTML5, solo puede agregarlo como un atributo a cualquier elemento y los navegadores habilitados para HTML5 reaccionarán en consecuencia:
function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'some_form') {
$form['some_element']['#attributes']['placeholder'] = t('Placeholder text');
}
}
Una función recursiva breve como esta podría ser útil si desea agregar automáticamente marcadores de posición para cada campo de texto en un formulario (basado en el título del campo en este ejemplo):
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]);
}
}
Luego, en su formulario, alter function solo llame
MYMODULE_auto_placeholders($form);
Ese método funcionará para casi todos los campos de texto en un formulario, con la excepción de los que se agregan en #process
funciones (como los campos de texto alt y title de un campo de imagen, por ejemplo).
Intenté la respuesta de Clive:
Pero para mi sorpresa, obtuve el marcador de posición en el contenedor del campo de texto, no en el campo de texto en sí. Luego probé una variación de la siguiente manera, ¡funcionó!
fuente
Simplemente agregue el marcador de posición en la matriz de # atributos para el elemento del campo de formulario, como en el siguiente código.
fuente
Tropecé con esto y pensé que la respuesta de Clive parecía agradable para agregar automáticamente marcadores de posición.
De todos modos, se necesitan algunos cambios menores para hacerlo bien en drupal 8, por lo que esta es la misma respuesta, pero adecuada para su tema de drupal 8.
fuente
Si desea apuntar a una instancia de formulario directamente, use hook_form_FORM_ID_alter. Podría ser más ordenado que usar condicionales. Mi solución para orientar solo la instancia de bloque de formulario de búsqueda.
fuente