Szablon gałązki wyświetla listę linków dołączonych do klas. Podstawy:
{{ mylink }}
kod gałązki wyświetli coś podobnego
<a href="#" class="someclass" >the text</a>
Nie wszystkie linki mają klasy. Chcę napisać szablon gałązki, który zamiast tego wyświetli coś takiego:
<a href="#" class="someclass" >
<span class="sprite someclass" ></span>
the text</a>
Co próbowałem:
Szukałem szablonu gałązki do zastąpienia. Niestety wydaje się, że linki nie są renderowane przez szablon gałązki.
Próbowałem zaktualizować zmienną gałązkową jak
set mylink['#title'] = "<span>...</span>" ~ mylink['#title']
Ale to nie pozwoli mi tego zrobić.
Odpowiedzi:
Oto rozwiązanie tylko dla gałązek dla określonej dziedziny, która wymaga tego leczenia; nie jest to ogólne rozwiązanie dla wszystkich łączy na całym świecie.
some-template.twig:
źródło
item.link['#url']
daje ten sam adres URL dla wszystkich języków!Nie znalazłem sposobu, aby zmienić link „#markup” w gałązce, ale istnieje sposób, aby to zmienić w fazie renderowania.
Zrobiłem ten mały moduł, który rozszerza funkcjonalność łącza i pozwala mu wstrzykiwać pewne rzeczy do renderowanego łącza. Więc zróbmy trochę kodu, wyjaśnię w komentarzach ...
Struktura pliku modułu:
Zawartość pliku:
better_link.info.yml
better_link.module
BetterLinkFormatter.php
BetterLink.php
Ważny:
Będzie to działać dla wszystkich pól linków , oczywiście, jeśli zmienisz jego formatyzator w zarządzaniu wyświetlaniem (edycja typu węzła).
Mam nadzieję, że może się przydać.
Zapytanie do @artfulrobot: czy możesz przetestować ten moduł? Myślę, że ten problem z tłumaczeniem można rozwiązać w ten sposób.
źródło
możesz po prostu dodać tablicę renderującą do #title, na przykład:
Stara długa odpowiedź:
Możesz zastąpić usługę generatora łączy
Utwórz moduł (altern_linkgenerator) z plikiem informacyjnym altern_linkgenerator.info.yml
Utwórz plik o nazwie alternative_linkgenerator.services.yml
Następnie należy utworzyć klasę, dodać folder o nazwie „src” (zgodnie ze standardami automatycznego ładowania PSR-4), aw tym plik o nazwie AlternativeLinkGenerator.php. (To jest kopia 1: 1, musisz dostosować rzeczy do swoich)
Edytuj services.yml (zwykle w witrynach / default / services.yml w bazie kodu Drupal 8) i dodaj:
rekwizyty idzie tutaj
źródło
template_preprocess_links
rzecz też się nie nazywa (to jest coś konkretnego, mimo że brzmi jak nazwa ogólna).core/lib/Drupal/Core/Utility/LinkGenerator.php
's',generate()
co zmusza do przekazania tekstu,Html::escape()
więc nie można tego zrobić bez całkowitego pominięcia formatyzatora linków Drupala.spróbuj tego kodu:
{% - endif%}
lub ten (pochodzi z: https://github.com/liip/bund_drupal_starterkit_theme/blob/master/templates/navigation/links--language-block.html.twig ):
źródło