Quero adicionar uma classe à <a>
tag de um campo que consiste em um link e texto. (É um campo do tipo Link .) O nome do campo é content.field_c_button_link.
No arquivo de modelo, quero adicionar algo como o seguinte.
{{ content.field_c_button_link.0.addClass('button blue') }}
Como posso adicionar uma classe corretamente?
De acordo com a resposta de Patrick Scheffer, observei as configurações de um campo em que posso adicionar classes CSS extras, mas não encontrei nenhuma. Esta é uma captura de tela do que posso editar no campo do link.
entities
8
theming
navigation
maidi
fonte
fonte
'#field_name'
vez de'#name'
.A maneira mais fácil de conseguir isso seria usando um desses dois módulos.
1. Classe Link - O módulo Link Class fornece um novo formulário de widget para o tipo de campo Link. Este widget permite que o editor adicione classe aos campos Link anexado ao seu conteúdo.
2. Atributos de link - o widget de atributos de link fornece um widget adicional para o campo de link encontrado no núcleo do Drupal. O widget permite que os usuários definam atributos em seus links.
Além disso, o módulo altera o campo padrão do link de conteúdo do link de menu para usar esse widget, permitindo que os links de menu também tenham atributos
id, classe, nome, destino, rel, tecla de acesso
Depois que um dos dois estiver ativado, podemos definir as configurações do widget para o campo "Link" em "Gerenciar exibição de formulário" para o campo de link específico.
Veja a imagem em anexo para referência.
Uma vez definido, insira cada classe separada por um espaço no campo que aparece no momento da criação do conteúdo.
fonte
Se você editar esse campo de link no seu tipo de conteúdo (admin / structure / types / manage / your_contenttype / fields / field_c_button_link), haverá um campo Classes extras de CSS .
No entanto, as classes inseridas aqui se aplicam a todos os links criados com 'field_c_buton_link'. Se você deseja adicionar uma classe em um local específico, consulte hook_preprocess_field] ou mesmo theme_link.
Editar:
No Drupal 8, também há um theme_preprocess_field . Então eu acho que você pode fazer algo assim:
Eu não testei isso, então acho que você precisa fazer alguns ajustes para fazer esse trabalho.
fonte
Para adicionar à resposta de Tony Fisler acima, no Drupal 8.1.2 eu precisava verificar #field_name em vez de name para adicionar uma classe. Isto é o que funciona para mim.
Isto é, se você quiser a classe na
<a>
tag. A solução de classe de link oferecida é mais fácil, mas quando eu tentei, ela só se aplicava à classe no wrapper do a. Portanto, se você estiver usando o Bootstrap, por exemplo, o módulo da classe de link não funcionará.fonte
if ($element['#field_name'] == 'field_link') { foreach ($variables['items'] as $key => $item){ $variables['items'][$key]['content']['#options']['attributes']['class'][] = 'blarg'; } }
Você pode usar a classe Link do Projeto, que permite adicionar classes no campo Link. Você deve definir o widget como "Vincular à classe". Veja a captura de tela.
fonte
Para fazer isso em galho usando o modelo de campo (ou seja
field--field-c-button-link.html.twig
)Normalmente, o modelo de campo fará um loop nos seus links usando:
Mas você pode mudar isso para algo assim:
lidando com o título e o URL do link separadamente.
fonte
É fácil criar seu próprio formatador que substitui o formatador de link. Embora agora que vejo que exista um módulo para este ( Link ), convém usá-lo, pois você pode configurá-lo no nível do campo, e não como uma configuração no formatador. Mas achei que isso poderia ser útil para alguém que deseja criar seu próprio formatador para um link onde você pode adicionar uma classe.
fonte
Ainda estou testando se há algum erro, mas colocar isso no seu arquivo .theme adicionará o nome do campo como uma classe para todos os campos. Isto é para o Drupal 8.2:
Parece algo que todo tema deve incluir para facilitar o estilo.
fonte
Todas as outras soluções adicionam classes ao wrapper de campo. Este adiciona uma classe à
<a>
própria tag:fonte
Aqui está a solução simples -
fonte