Chcę użyć ścieżki podstawowej w pliku szablonu Drupal 8. Próbowałem następujące, ale nie otrzymuję prawidłowego wyniku.
{{ app.request.baseUrl }}
{{base_path}}
Potrzebuję absolutnej ścieżki do węzła {{ app.request.baseUrl }}/{{ url }}
.
Jednym z rozwiązań, które znalazłem, jest umieszczenie tego kodu w haczyku przetwarzania wstępnego i przekazanie go do motywu.
$host = \Drupal::request()->getHost();
$response = \Drupal::httpClient()
Szukam lepszego rozwiązania. Czego powinienem użyć zamiast tego, którego używam?
path()
można zastosować funkcję do pobierania trasy węzła:{{ path('entity.node.canonical', {'node': node.id}) }}
Prawie nigdy nie musisz jawnie budować ścieżek z części w Drupal 8. Wybrałbym coś takiego:
źródło
toString
pokazu, ale zauważyłem Kint (url) i zobaczyłem, że to obiekt.W
page.html.twig
tobie będzie działał{{ base_path }}
zmienną. Dlaczego nie jest dostępny w każdym szablonie, nie mam pojęcia. Tak jak powinienem, a wszystko inne wygląda na niechlujne, moim preferowanym rozwiązaniem jest robienie dokładnie tak, jak Drupal w funkcji strony przedprocesowej dla dowolnego miejsca, w którym jest to potrzebne.Aby
{{ base_path }}
udostępnić blokowanie szablonów w kompozycji o nazwie przykład, dodaj ten kod doexample.theme
pliku:Jak zauważono w zaakceptowanej odpowiedzi udzielonej przez MPD, jeśli uzyskasz adres URL węzła lub innego podmiotu, istnieją metody, aby zrobić to wszystko za Ciebie.
Istnieją jednak powody, aby uzyskać ścieżkę_podstawową, na przykład podczas wyświetlania obrazów, które znajdują się w folderze motywu.
{{ directory }}
zapewnia ścieżkę do folderu motywu, ale pozostawia ścieżkę podstawową (zwykle tylko /, ale w celu zachowania prawidłowego funkcjonowania Drupala z podkatalogu domeny, który nie powinien być zakodowany na stałe). W przypadkupage.html.twig
dowolnego szablonu, który ma powyższą procedurę wstępną, będzie to działać w tym celu:I oczywiście odpowiedź Shawna Conna działa dobrze, jeśli możesz stłumić swoje pragnienie pięknych szablonów, ale nie mogłem.
źródło
I zgodnie z dokumentacją strony w 8.2.x , dwie zmienne globalne dodane w celu zwrócenia pierwszej strony i podstawowych adresów URL ścieżki:
Możesz więc uzyskać adres URL strony czcionek
front_page
i podstawowy adres URL za pomocąbase_url
Uwaga
pobranie adresu URL strony głównej
{{ url('<front>') }}
ma problem, gdy chcesz połączyć go z inną ścieżką, na przykładpowrót
oznacza to domyślnie, że nie jest tekstem i zwraca gałkę zdolną do renderowania
źródło
W
i w pliku szablonu możesz zadzwonić za pośrednictwem
źródło
Jak dotąd ten wątek nie przynosi żadnego właściwego rozwiązania. Możemy połączyć to za pomocą render_val ()
Oto sposób, w jaki go użyłem, aby uzyskać bezwzględną ścieżkę obrazu bytu:
1. otrzymujemy podstawowy adres URL strony. Następnie musimy usunąć dodatkowe /. Następnie łączymy naszą ścieżkę bazową z naszą ścieżką względną obrazu.
źródło
Wszystkie powyższe nie powiodły się, ponieważ mam skonfigurowane ścieżki językowe, więc wygląda mój adres URL strony głównej
https://example.com/en
.W końcu użyłem tego kodu, aby uzyskać rzeczywisty podstawowy adres URL mojej witryny:
źródło
Wiem, że już zaznaczyłeś to jako poprawne, ale można go użyć jako elementu gałązki w pliku szablonu bez dodatkowej pracy. Znalazłem to w bloku - system-branding-block.html.twig z motywu Classy. Możesz więc użyć go w następujący sposób:
źródło