Um modelo de galho está renderizando uma lista de links que acompanham as classes. O básico:
{{ mylink }}
código galho produzirá algo como
<a href="#" class="someclass" >the text</a>
Nem todos os links têm classes. Eu quero escrever um modelo de galho que, em vez disso, produzirá algo como isto:
<a href="#" class="someclass" >
<span class="sprite someclass" ></span>
the text</a>
O que eu tentei:
Procurei o modelo de galho para substituir. Infelizmente, parece que os links não são renderizados por um modelo de galho.
Eu tentei atualizar a variável galho como
set mylink['#title'] = "<span>...</span>" ~ mylink['#title']
Mas não vai me deixar fazer isso.
Respostas:
Aqui está uma solução única para um campo específico que precisa desse tratamento; não é uma solução genérica para todos os links em qualquer lugar.
some-template.twig:
fonte
item.link['#url']
o mesmo URL para todos os idiomas!Não encontrei uma maneira de alterar o link '#markup' no galho, mas há uma maneira de alterá-lo na fase de renderização.
Criei este pequeno módulo que estende a funcionalidade Link e permite injetar algumas coisas no link renderizado. Então vamos fazer um código, vou explicar nos comentários ...
Estrutura de arquivo do módulo:
Conteúdo do arquivo:
better_link.info.yml
better_link.module
BetterLinkFormatter.php
BetterLink.php
Importante:
Isso funcionará para todos os seus campos de link , com certeza, se você alterar o formatador na exibição de gerenciamento (editando o tipo de nó).
Espero que possa ser útil.
Pedido para @artfulrobot: Você pode testar este módulo? Eu acho que esse problema de tradução pode ser resolvido dessa maneira.
fonte
você pode adicionar uma matriz de renderização ao #title, como:
Antiga resposta longa:
Você pode substituir o serviço do gerador de link
Crie um módulo (alternative_linkgenerator), com um arquivo de informações alternative_linkgenerator.info.yml
Crie um arquivo chamado alternative_linkgenerator.services.yml
A seguir, crie a classe, adicione uma pasta chamada "src" (seguindo os padrões de carregamento automático do PSR-4) e, dentro deste, um arquivo chamado AlternativeLinkGenerator.php. (Esta é uma cópia 1: 1, é necessário adaptar as coisas para o seu)
Edite services.yml (normalmente em sites / default / services.yml na sua base de código do Drupal 8) e adicione o seguinte:
adereços vai aqui
fonte
template_preprocess_links
coisa é chamada (isso é algo específico, apesar do nome genérico).core/lib/Drupal/Core/Utility/LinkGenerator.php
,generate()
é usado e isso força o texto a ser passado, deHtml::escape()
modo que não há como fazê-lo sem ignorar completamente o formatador de link do Drupal.tente este código:
{%- fim se %}
ou este (vem de: https://github.com/liip/bund_drupal_starterkit_theme/blob/master/templates/navigation/links--language-block.html.twig ):
fonte