it-swarm.com.de

Rufen Sie den Pfad zu den Themen-Assets in der Vorlage Twig) ab

Ich habe eine Frage zum Abrufen eines Pfads zu einem Bild in einer Twig - Vorlage. Das Bild ist keinem Feld oder etwas anderem zugewiesen. Nur ein statisches Bild, das in "MYTHEME/image/icon" gespeichert ist /my-icon.png ".

In Drupal 7) erhalte ich den Pfad in meiner node.template mit dem folgenden 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 in template_preprocess_node() zu übergeben.

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 wird fälschlicherweise als http: // localhost/node/theme/template/image/icons/my-icon bezeichnet. png .

24
Stephan Hofmann

sie können {{ base_path ~ directory }} verwenden, um das absolute Problem zu beheben. Sie müssen keine Vorverarbeitung durchführen. Beide Variablen sind im Core enthalten.

Zum Beispiel

<img src="{{ base_path ~ directory }}/images/logo.png" alt="My Logo" />

PS. Der ~ - Helfer in twig ist verkettet.

Bearbeiten: Zumindest in der Seite * .html.twig Vorlagen ist die Variable base_path enthalten. Möglicherweise müssen Sie eine Vorverarbeitung für andere Vorlagen durchführen. Sie können einfach mit {{ dump() }} überprüfen, ob die Variablen vorhanden sind

// File: THEMENAME.theme in your theme's root directory
function THEMENAME_preprocess(&$variables, $hook)
{
    $variables['base_path'] = base_path();
}
54
pjcarly

Standardmäßig gibt es eine Variable {{ directory }}, Die Sie verwenden können und die auf Ihr Themenverzeichnis verweist. 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 vorhandene Sites beschädigen, die ihn verwenden.

Sie müssen also ein/davor hinzufügen. Dies würde brechen, wenn Drupal in einem Unterordner installiert ist. Sie können dies entweder in Ihrer Vorlage fest codieren oder base_path() weiterhin wie in 7.x in einer benutzerdefinierten Variablen verwenden.

10
Berdir
<img src="/{{ directory }}/images/logo.png"/> 

arbeitete für mich als

<img src="{{ base_path ~ directory }}/images/logo.png" alt="My Logo" />

nicht

für die Inhaltsvorlage musste ich in .module verwenden

   function hook_preprocess(&$variables, $hook) {

  $module_handler = Drupal::service('module_handler');
  $path = $module_handler->getModule('myModuleName')->getPath();

  if(isset($variables['region']) && $variables['region'] == 'content'){
    $variables['module_path'] = $path;
    $variables['http_Host'] = $_SERVER['HTTP_Host'];

und

  <img src="{{ module_path }}/images/error404.png" />
  <img src="//{{ http_Host }}/{{ module_path }}/images/error403.png" />
8
Matoeil