Eu preciso adicionar um nome de classe a determinados rótulos criados pela API de formulário do Drupal, como esta:
$form['name'] => array(
'#type' => 'textfield',
'#title' => 'Prénom'
);
Se eu usar o seguinte, o <textarea>
obtém uma classe, mas não o rótulo.
$form['name']['#attributes']['class'] = array('myClass');
Estou procurando algo semelhante que adicione uma classe ao <label>
.
.field-name-field-myfield label{ color:red; }
Respostas:
Você não pode definir uma classe para a tag label do elemento do formulário usando as propriedades da API do formulário. No entanto, você pode definir um prefixo e um sufixo para agrupar o elemento (label + textarea) e usar algum seletor CSS aninhado para realizar o que você está tentando fazer.
e no CSS, você pode selecionar a tag label assim:
Não é uma solução decente, mas é assim que costumo fazer isso e tenho visto outros.
#attributes
é para o próprio elemento de entrada, portanto, é correto que seu código adicione amyClass
classe aotextarea
.fonte
Esta publicação no StackOverflow diz que a API Drupal Form não suporta a adição de classes aos rótulos, mas contém uma solução decente:
A documentação da API para theme_form_element_label () mostra por que os rótulos não são possíveis (pelo menos não prontos para uso ): a matriz de atributos é inicializada na função theme e preenchida com apenas duas classes opcionais (elemento 'option' e ' -invisível').
Então, é completamente impossível? Na verdade, acho que pode ser feito, mas devo acrescentar que não tentei isso sozinho. Você pode tentar:
#label_attributes
propriedade a alguns (ou todos) elementos do formulário usando hook_element_info_alter () em um módulo personalizado;$attributes
matriz com o valor de$element['#label_attributes']
.Se você tentar fazer isso, informe-nos se funcionou.
fonte
'#title'
ou definir'#title_display' => 'invisible'
e apenas fazer'#suffix' => '<label for="TheElementId" class="option">Display This Text</label>'
. Isso faz com que apareça fora do wrapper que o<div>
Drupal usa para seus elementos de entrada de formulário, mas uma regra CSS pode fazer com que não pareça diferente.Expandindo a resposta de Ayesh, incluí um exemplo de caso de uso para esse código. Enquanto a resposta de marvangend é muito mais Drupalesk, é muito difícil encontrar um resultado muito simples. Manter os elementos específicos do formulário e CSS agrupados com o referido formulário é o caso de uso geral, permitindo-nos direcionar e agir sobre elementos internos é um pouco mais específico.
http://legomenon.io/article/drupal-7-adding-form-placeholder-attributes
fonte
No Drupal 8, faça isso simplesmente adicionando o arquivo your_module.module
e adicione #label_attributes na criação do formulário:
fonte
Encontrei uma maneira relativamente fácil de fazer isso usando o módulo Fences D7. Este módulo vem com muitos arquivos de modelo para personalizar os campos. Edite o campo ao qual você deseja atribuir uma classe exclusiva e altere a marcação do wrapper para algo relevante para você. Depois disso, encontre o arquivo de modelo correspondente no módulo e copie-o em seus sites / all / themes / THEME_NAME.
Antes
Depois de
Ao adicionar
<?php print $label; ?>
, ele imprime o nome do campo como uma classe, permitindo segmentar todos os rótulos de campo individualmente. Espero que isto ajude alguém!fonte
Está sujo, mas você pode adicionar HTML à propriedade '# title':
Estou surpreso que funcione. Eu acho que Drupal filtraria isso, mas não. Então, você pode envolver o rótulo com outra classe:
fonte