У меня вопрос о получении пути к изображению в шаблоне Twig. Изображение не привязано к полю или чему-либо. Просто статичное изображение, которое хранится в "MYTHEME / image / icon / my-icon.png".
В Drupal 7 я получаю путь в моем node.template со следующим кодом:
<img src="<?php print base_path() . path_to_theme(); ?>/image/icons">/my-icon.png
Как это работает в Drupal 8? Я пытался передать переменную в template_preprocess_node()
.
MYTHEME.theme:
$variables['images_path'] = \Drupal::theme()->getActiveTheme()->getPath() . '/image/';
Шаблон веточки:
<img src="{{ images_path ~ 'icons/' ~ 'my-icon.png' }}">
Не работает Нет ошибки PHP, но неверно указывается путь http: //localhost/node/themes/template/image/icons/my-icon.png .
drupal_get_path
для D7 :)$themePath = Url::fromUserInput('/' . drupal_get_path('theme', '[themename]')
Ответы:
Вы можете использовать,
{{ base_path ~ directory }}
что решит абсолютную проблему, нет необходимости выполнять какую-либо предварительную обработку, обе эти переменные включены ядром.Например
PS.
~
помощник в прута является конкатенация.Редактировать: по крайней мере, на странице * .html.twig templates включена переменная base_path, возможно, вам потребуется выполнить предварительную обработку для других шаблонов, вы можете легко проверить наличие
{{ dump() }}
переменныхисточник
{{ directory }}
переменной Twig в теме , что вы собираетесь использовать в качестве базовой темы и создать подтемы для: drupal.stackexchange.com/questions/277278{{ base_bath }}
каждому шаблону; в противном случае для некоторых шаблонов вам нужно будет сделать то же, что и Маркос Буарке в приведенном выше комментарии, или Матеил в drupal.stackexchange.com/a/238535/4195По умолчанию существует
{{ directory }}
переменная, которую вы можете использовать, которая указывает на каталог вашей темы. Проблема в том, что она не абсолютна, как та, которую вы добавили. Я думаю, что это ошибка в ядре, потому что она должна включать базовый путь, но изменение, которое, конечно, сломает существующие сайты, которые его используют.Поэтому вам нужно добавить / перед ним; это сломалось бы, если Drupal установлен в подпапке. Вы можете либо жестко закодировать это в своем шаблоне, либо продолжать использовать,
base_path()
как вы делали в 7.x, в пользовательской переменной.источник
/sites/default/files/MyFolder
? У меня есть изображение MyImage.jpg в MyFolder. Теперь, в шаблоне ветки, если я написал<img src={{ url }} alt={{ text }}>
здесь, переменная url имеет путь /MyFolder/MyImage.jpg, но она не работает.<img src="/{{ directory }}/path/to/image"/>
чтобы получить абсолютный путь.работал на меня, когда
не
для шаблона содержимого я должен был использовать в .module
а также
источник