Ich habe eine Frage zum Abrufen eines Pfads zu einem Bild in einer Zweigvorlage. Das Bild ist keinem Feld oder etwas zugeordnet. Nur ein statisches Bild, das in "MYTHEME / image / icon / my-icon.png" gespeichert ist.
In Drupal 7 erhalte ich den Pfad in meiner node.template mit folgendem Code:
<img src="<?php print base_path() . path_to_theme(); ?>/image/icons">/my-icon.png
Wie funktioniert es in Drupal 8? Ich habe versucht, eine Variable einzugeben template_preprocess_node()
.
MYTHEME.theme:
$variables['images_path'] = \Drupal::theme()->getActiveTheme()->getPath() . '/image/';
Zweigvorlage:
<img src="{{ images_path ~ 'icons/' ~ 'my-icon.png' }}">
Es funktioniert nicht Es gibt keinen PHP-Fehler, aber der Pfad lautet fälschlicherweise http: //localhost/node/themes/template/image/icons/my-icon.png .
drupal_get_path
ist für D7 :)$themePath = Url::fromUserInput('/' . drupal_get_path('theme', '[themename]')
Antworten:
Sie können verwenden,
{{ base_path ~ directory }}
was das absolute Problem behebt. Es ist keine Vorverarbeitung erforderlich. Beide Variablen sind im Core enthalten.Beispielsweise
PS. Der
~
Helfer im Zweig ist verkettet.Bearbeiten: Zumindest in der Seite * .html.twig sind Vorlagen mit der Variablen base_path enthalten. Möglicherweise müssen Sie eine Vorverarbeitung für andere Vorlagen durchführen. Sie können problemlos überprüfen,
{{ dump() }}
ob die Variablen vorhanden sindquelle
{{ directory }}
wenn Sie die Variable Twig in einem Thema verwenden, das Sie als Basisthema verwenden{{ base_bath }}
zu jeder Vorlage; Andernfalls müssen Sie für einige Vorlagen das tun, was Marcos Buarque im obigen Kommentar oder Matoeil in drupal.stackexchange.com/a/238535/4195Standardmäßig gibt es eine
{{ directory }}
Variable, die Sie verwenden können, um auf Ihr Themenverzeichnis zu verweisen. Das Problem ist, dass es nicht absolut ist, genau wie das, das Sie hinzugefügt haben. Ich denke, das ist ein Fehler im Kern, weil er den Basispfad enthalten sollte, aber eine Änderung würde natürlich bestehende Websites, die ihn verwenden, zum Erliegen bringen.Sie müssen also ein / davor hinzufügen. Dies würde scheitern, wenn Drupal in einem Unterordner installiert ist. Sie können dies entweder in Ihrer Vorlage fest codieren oder
base_path()
wie in 7.x in einer benutzerdefinierten Variablen weiterverwenden.quelle
/sites/default/files/MyFolder
? Ich habe ein Bild MyImage.jpg in MyFolder. Nun, in Zweig Vorlage, wenn ich schrieb,<img src={{ url }} alt={{ text }}>
hier URL-Variable hat den Pfad /MyFolder/MyImage.jpg, aber es funktioniert nicht.<img src="/{{ directory }}/path/to/image"/>
, um einen absoluten Pfad zu erhalten.hat bei mir gearbeitet wenn
nicht
für die inhaltsvorlage musste ich in .module verwenden
und
quelle