J'ai une question sur l'obtention d'un chemin vers une image dans un modèle Twig. L'image n'est pas affectée à un champ ou quelque chose. Juste une image statique qui est stockée dans "MYTHEME / image / icon / my-icon.png".
Dans Drupal 7, j'obtiens le chemin dans mon node.template avec le code suivant:
<img src="<?php print base_path() . path_to_theme(); ?>/image/icons">/my-icon.png
Comment ça marche avec Drupal 8? J'ai essayé de transmettre une variable template_preprocess_node()
.
MYTHEME.theme:
$variables['images_path'] = \Drupal::theme()->getActiveTheme()->getPath() . '/image/';
Modèle de brindille:
<img src="{{ images_path ~ 'icons/' ~ 'my-icon.png' }}">
Ça ne marche pas. Il n'y a pas d'erreur PHP, mais le chemin d'accès serait à tort http: //localhost/node/themes/template/image/icons/my-icon.png .
drupal_get_path
est pour D7 :)$themePath = Url::fromUserInput('/' . drupal_get_path('theme', '[themename]')
Réponses:
vous pouvez utiliser
{{ base_path ~ directory }}
ce qui résoudra le problème absolu, pas besoin de faire de prétraitement, ces deux variables sont incluses par core.Par exemple
PS. l'
~
aide en brindille est concaténée.Edit: au moins dans la page * .html.twig templates la variable base_path est incluse, vous devrez peut-être faire un prétraitement pour d'autres modèles, vous pouvez facilement vérifier
{{ dump() }}
si les variables sont présentesla source
{{ directory }}
lorsque vous utilisez la variable Twig dans un thème que vous avez l'intention d'utiliser comme thème de base et créez des sous-thèmes pour: drupal.stackexchange.com/questions/277278{{ base_bath }}
à chaque modèle; sinon, pour certains modèles, vous devrez faire comme Marcos Buarque l'a fait dans le commentaire ci-dessus, ou Matoeil l'a fait dans drupal.stackexchange.com/a/238535/4195Il existe par défaut une
{{ directory }}
variable que vous pouvez utiliser qui pointe vers votre répertoire de thèmes. Le problème est qu'il n'est pas absolu, tout comme celui que vous avez ajouté. Je pense que c'est un bogue dans le noyau car il devrait inclure le chemin de base, mais le changer pourrait bien sûr casser les sites existants qui l'utilisent.Vous devez donc ajouter un / devant celui-ci; cela casserait si Drupal est installé dans un sous-dossier. Vous pouvez soit coder en dur cela dans votre modèle ou continuer à utiliser
base_path()
comme vous l'avez fait dans 7.x dans une variable personnalisée.la source
/sites/default/files/MyFolder
? J'ai une image MyImage.jpg dans MyFolder. Maintenant, dans le modèle de brindille si j'ai écrit<img src={{ url }} alt={{ text }}>
ici, la variable url a le chemin /MyFolder/MyImage.jpg mais, cela ne fonctionne pas.<img src="/{{ directory }}/path/to/image"/>
pour obtenir un chemin absolu.travaillé pour moi quand
n'a pas
pour le modèle de contenu, je devais utiliser dans .module
et
la source