Necesito agregar un nombre de clase a ciertas etiquetas creadas por la API de formulario de Drupal como esta:
$form['name'] => array(
'#type' => 'textfield',
'#title' => 'Prénom'
);
Si uso lo siguiente, <textarea>
obtiene una clase, pero no la etiqueta.
$form['name']['#attributes']['class'] = array('myClass');
Estoy buscando algo similar que agregará una clase al <label>
.
.field-name-field-myfield label{ color:red; }
Respuestas:
No puede establecer una clase en la etiqueta del elemento del formulario utilizando las propiedades de la API del formulario. Sin embargo, puede establecer un prefijo y un sufijo para envolver el elemento (etiqueta + área de texto) y usar un selector CSS anidado para lograr lo que está tratando de hacer.
y en el CSS, puede seleccionar la etiqueta como esta:
No es una solución decente, pero así es como suelo hacer esto, y he visto a otros hacer.
#attributes
es para el elemento de entrada en sí mismo, por lo que es correcto, su código agrega lamyClass
clase altextarea
.fuente
Esta publicación en StackOverflow dice que la API de formularios de Drupal no admite agregar clases a las etiquetas, pero contiene una solución decente:
La documentación de la API para theme_form_element_label () muestra por qué las etiquetas no son posibles (al menos no listas para usar ): la matriz de atributos se inicializa en la función de tema y se completa con solo dos clases opcionales ('opción' y 'elemento -invisible').
Entonces, ¿es completamente imposible? De hecho, creo que se puede hacer, pero debo agregar que no lo he intentado yo mismo. Podrías intentar:
#label_attributes
propiedad a algunos (o todos) elementos de formulario usando hook_element_info_alter () en un módulo personalizado;$attributes
matriz con el valor de$element['#label_attributes']
.Si vas a probar esto, avísanos si funcionó.
fuente
'#title'
o configurar'#title_display' => 'invisible'
y luego simplemente hacer'#suffix' => '<label for="TheElementId" class="option">Display This Text</label>'
. Eso hace que aparezca fuera del contenedor que<div>
Drupal usa para sus elementos de entrada de formulario, pero una regla CSS podría hacer que no se vea diferente.Ampliando la respuesta de Ayesh, he incluido un caso de uso de ejemplo para dicho código. Si bien la respuesta de marvangend es mucho más drupalesca, se está cavando mucho para obtener un resultado muy simple. Mantener elementos específicos de formulario y CSS incluidos con dicho formulario es el caso de uso general, lo que nos permite apuntar y actuar sobre elementos internos es un poco más específico.
http://legomenon.io/article/drupal-7-adding-form-placeholder-attributes
fuente
En Drupal 8, hazlo simplemente agregando el archivo your_module.module
y agregue los #label_attributes en la creación del formulario:
fuente
Encontré una forma relativamente fácil de lograr esto usando el módulo Fences D7. Este módulo viene con muchos archivos de plantilla para personalizar los campos. Edite el campo al que le gustaría dar una clase única y cambie el marcado de envoltura a algo relevante para usted. Después de eso, busque el archivo de plantilla correspondiente dentro del módulo y cópielo en sus sitios / all / themes / THEME_NAME.
antes de
Después
Al agregarlo
<?php print $label; ?>
, imprime el nombre del campo como una clase, lo que le permite apuntar a todas las etiquetas de campo individualmente. ¡Espero que esto ayude a alguien más!fuente
Está sucio, pero puede agregar HTML a la propiedad '# title':
Me sorprende que funcione. Creo que Drupal filtraría esto, pero no. Entonces, puedes envolver la etiqueta con otra clase:
fuente