Mam pytanie dotyczące uzyskania ścieżki do obrazu w szablonie Twig. Obraz nie jest przypisany do pola ani czegoś takiego. Tylko statyczny obraz, który jest przechowywany w „MYTHEME / image / icon / my-icon.png”.
W Drupal 7 dostaję ścieżkę do mojego node.template z następującym kodem:
<img src="<?php print base_path() . path_to_theme(); ?>/image/icons">/my-icon.png
Jak to działa w Drupal 8? Próbowałem przekazać zmienną template_preprocess_node()
.
MYTHEME.theme:
$variables['images_path'] = \Drupal::theme()->getActiveTheme()->getPath() . '/image/';
Szablon gałązki:
<img src="{{ images_path ~ 'icons/' ~ 'my-icon.png' }}">
To nie działa Nie ma błędu PHP, ale błędnie mówi się, że ścieżka to http: //localhost/node/themes/template/image/icons/my-icon.png .
drupal_get_path
jest dla D7 :)$themePath = Url::fromUserInput('/' . drupal_get_path('theme', '[themename]')
Odpowiedzi:
możesz użyć tego,
{{ base_path ~ directory }}
co rozwiąże problem absolutny, bez potrzeby wstępnego przetwarzania, obie te zmienne są uwzględnione według rdzenia.Na przykład
PS.
~
pomocnik w gałązce jest concatenate.Edycja: przynajmniej na stronie * .html.twig szablony dołączona jest zmienna base_path, być może będziesz musiał wykonać wstępne przetwarzanie dla innych szablonów, możesz łatwo sprawdzić,
{{ dump() }}
czy zmienne są obecneźródło
{{ directory }}
zmiennej Twig w motywie, którego zamierzasz użyć jako motywu podstawowego, i twórz podtematy dla: drupal.stackexchange.com/questions/277278{{ base_bath }}
do każdego szablonu; w przeciwnym razie w przypadku niektórych szablonów będziesz musiał zrobić tak, jak Marcos Buarque w powyższym komentarzu lub Matoeil w drupal.stackexchange.com/a/238535/4195Domyślnie istnieje
{{ directory }}
zmienna, której można użyć, która wskazuje na katalog motywów. Problem w tym, że nie jest absolutny, tak jak ten, który dodałeś. Myślę, że jest to podstawowy błąd, ponieważ powinien zawierać ścieżkę podstawową, ale zmiana tego oczywiście zniszczyłaby istniejące witryny, które z niej korzystają.Więc musisz dodać / przed nim; spowodowałoby to uszkodzenie, gdyby Drupal został zainstalowany w podfolderze. Możesz albo zakodować to na stałe w swoim szablonie, albo nadal używać
base_path()
tak jak w 7.x w zmiennej niestandardowej.źródło
/sites/default/files/MyFolder
? Mam obraz MyImage.jpg w MyFolder. Teraz w szablonie gałązki, jeśli napisałem<img src={{ url }} alt={{ text }}>
tutaj, zmienna url ma ścieżkę /MyFolder/MyImage.jpg, ale nie działa.<img src="/{{ directory }}/path/to/image"/>
absolutnej ścieżki.pracował dla mnie kiedy
nie
dla szablonu treści musiałem użyć w .module
i
źródło