Una plantilla de ramita representa una lista de enlaces que vienen con las clases. Lo básico:
{{ mylink }}
el código de ramita generará algo como
<a href="#" class="someclass" >the text</a>
No todos los enlaces tienen clases. Quiero escribir una plantilla de ramita que en su lugar generará algo como esto:
<a href="#" class="someclass" >
<span class="sprite someclass" ></span>
the text</a>
Lo que he intentado:
Busqué la plantilla de ramita para anular. Desafortunadamente, parece que los enlaces no están representados por una plantilla de ramita.
Traté de actualizar la variable twig como
set mylink['#title'] = "<span>...</span>" ~ mylink['#title']
Pero no me deja hacer eso.
Respuestas:
Aquí hay una solución única para un campo en particular que necesita este tratamiento; No es una solución genérica para todos los enlaces en todas partes.
some-template.twig:
fuente
item.link['#url']
está dando la misma URL para todos los idiomas!No he encontrado una manera de cambiar el enlace '#markup' en twig, pero hay una manera de cambiarlo en la fase de renderizado.
Creé este pequeño módulo que amplía la funcionalidad de Link y hace que sea capaz de inyectar algunas cosas en el enlace renderizado. Así que hagamos algo de código, lo explicaré en los comentarios ...
Estructura de archivo del módulo:
Contenido del archivo:
better_link.info.yml
better_link.module
BetterLinkFormatter.php
BetterLink.php
Importante:
Esto funcionará para todos sus campos de enlace , claro, si cambia su formateador en la pantalla de administración (editando su tipo de nodo).
Espero que pueda ser útil.
Solicitud a @artfulrobot: ¿Puedes probar este módulo? Creo que el problema de traducción se puede resolver de esta manera.
fuente
simplemente puede agregar una matriz de renderizado a #title, como:
Antigua respuesta larga:
Puede anular el servicio generador de enlaces
Cree un módulo (alternative_linkgenerator), con un archivo de información alternative_linkgenerator.info.yml
Haga un archivo llamado alternative_linkgenerator.services.yml
Lo siguiente es crear la clase, agregar una carpeta llamada "src" (siguiendo los estándares de carga automática de PSR-4) y dentro de esto un archivo llamado AlternativeLinkGenerator.php. (Esta es una copia 1: 1, necesita adaptar las cosas para su)
Edite services.yml (normalmente en sites / default / services.yml en su base de código Drupal 8) y agregue lo siguiente:
accesorios va aquí
fuente
template_preprocess_links
se llama a la cosa (eso es algo específico, a pesar de que es un nombre genérico).core/lib/Drupal/Core/Utility/LinkGenerator.php
,generate()
se usa s y esto obliga a pasar el texto, porHtml::escape()
lo que no hay forma de hacerlo sin pasar por alto el formateador de enlaces de Drupal.prueba este código:
{%- terminara si %}
o este (proviene de: https://github.com/liip/bund_drupal_starterkit_theme/blob/master/templates/navigation/links--language-block.html.twig ):
fuente