Eine Zweigvorlage rendert eine Liste von Links, die mit Klassen geliefert werden. Das Grundlegende:
{{ mylink }}
Zweigcode gibt so etwas wie aus
<a href="#" class="someclass" >the text</a>
Nicht alle Links haben Klassen. Ich möchte eine Zweigvorlage schreiben, die stattdessen Folgendes ausgibt:
<a href="#" class="someclass" >
<span class="sprite someclass" ></span>
the text</a>
Was ich versucht habe:
Ich suchte nach der Zweigvorlage, die überschrieben werden sollte. Leider scheinen Links nicht von einer Zweigvorlage gerendert zu werden.
Ich habe versucht, die Zweigvariable wie zu aktualisieren
set mylink['#title'] = "<span>...</span>" ~ mylink['#title']
Aber das werde ich nicht tun lassen.
Antworten:
Hier ist eine Lösung nur für Zweige für ein bestimmtes Gebiet, das diese Behandlung benötigt. Es ist keine generische Lösung für alle Links überall.
some-template.twig:
quelle
item.link['#url']
gibt für alle Sprachen die gleiche URL!Ich habe keine Möglichkeit gefunden, den Link '#markup' in twig zu ändern, aber es gibt eine Möglichkeit, ihn in der Renderphase zu ändern.
Ich habe dieses kleine Modul erstellt, das die Link-Funktionalität erweitert und es ermöglicht, einige Dinge in gerenderte Links einzufügen. Also lass uns etwas Code machen, ich werde es in Kommentaren erklären ...
Moduldateistruktur:
Dateiinhalt:
better_link.info.yml
better_link.module
BetterLinkFormatter.php
BetterLink.php
Wichtig:
Dies wird für alle Ihre Arbeit Link Felder , sicher, wenn Sie seine Formatierer ändern in der Anzeige verwalten (Bearbeiten des Knotentypen).
Ich hoffe das kann nützlich sein.
Anfrage an @artfulrobot: Können Sie dieses Modul testen? Ich denke, dass das Übersetzungsproblem auf diese Weise gelöst werden kann.
quelle
Sie können #title einfach ein Render-Array hinzufügen, wie:
Alte lange Antwort:
Sie können den Link Generator Service überschreiben
Erstellen Sie ein Modul (alternative_linkgenerator) mit einer Infodatei alternative_linkgenerator.info.yml
Erstellen Sie eine Datei mit dem Namen alternative_linkgenerator.services.yml
Als Nächstes erstellen Sie die Klasse, fügen einen Ordner mit dem Namen "src" (gemäß den PSR-4-Standards für das automatische Laden) und eine Datei mit dem Namen "AlternativeLinkGenerator.php" hinzu. (Dies ist eine 1: 1-Kopie, Sie müssen die Dinge für Ihre anpassen)
Bearbeiten Sie services.yml (normalerweise unter sites / default / services.yml in Ihrer Drupal 8-Codebasis) und fügen Sie Folgendes hinzu:
Requisiten geht hier
quelle
template_preprocess_links
Ding wird auch nicht aufgerufen (das ist etwas Spezifisches, obwohl es generisch klingt).core/lib/Drupal/Core/Utility/LinkGenerator.php
sgenerate()
verwendet, und dies erzwingt die Weitergabe des Textes,Html::escape()
sodass dies nicht möglich ist, ohne den Link-Formatierer von Drupal vollständig zu umgehen.Versuchen Sie diesen Code:
{% - endif%}
oder dieses (es kommt von: https://github.com/liip/bund_drupal_starterkit_theme/blob/master/templates/navigation/links--language-block.html.twig ):
quelle