web-dev-qa-db-fra.com

Inclure un modèle partiel

J'essaie d'utiliser Drupal 8, avec un thème personnalisé, en raison de grandes différences de structure pour mes besoins, j'ai une page - front.twig.html et une page.twig.html, je souhaite créer des parties de modèle telles qu’utilisées dans phrozn oder dans un projet Symfony2 normal, par exemple un footer.html.twig et un header.html.twig. Ces modèles sont enregistrés dans un sous-répertoire/parts /.

Mais quand j'appelle ces modèles comme d'habitude, je reçois juste une chaîne avec le nom du modèle.

Par exemple:

{# in page.html.twig or page--front.html.twig #}
{% include 'parts/footer.html.twig' %} 

Renvoie le nom du fichier sous forme de chaîne:

parts/footer.html.twig

Il est possible de le faire avec Drupal 8?

21
felipep

Vous ne pouvez pas faire de chemins relatifs, tous les chemins doivent provenir de la racine Drupal ou être basés sur le chemin d'accès à votre répertoire 'templates': https: //www.drupal .org/node/2143557 .

J'éviterais "de la racine Drupal") et j'utiliserais des espaces de noms, au moins jusqu'à ce que https://www.drupal.org/node/2291449 soit résolu.

{% include '@mytheme/parts/footer.html.twig' %}

Edit: Si vous voulez passer des arguments supplémentaires pour la boucle ou pour vérifier quelques variables dans votre modèle twig inclus, vous devez écrire de cette façon:

{% include '@mytheme/includes/form-block.html.twig' with {dog: true} %}

Edit: Maintenant que https://www.drupal.org/node/2291449 a été validé, vous pouvez également faire:

{% include 'footer.html.twig' %}

Voir https://www.drupal.org/node/2369981 pour savoir pourquoi vous avez vu le nom de fichier sous forme de chaîne au lieu d'une exception utile.

35
Cottser

Utilisez un chemin d'accès complet au répertoire du thème. Si vous utilisez l'espace de noms, vous devrez le changer si vous apportez le code à un autre site ou thème.

Cela devrait fonctionner:

{% include directory ~ '/templates/parts/footer.html.twig' %}
16
André

Notez que vous pouvez transmettre des variables après le mot clé with:

{# template.html will have access to the variables from the current context and the additional ones provided #}
{% include 'template.html' with {'foo': 'bar'} %}

{% set vars = {'foo': 'bar'} %}
{% include 'template.html' with vars %}

Voir la documentation Twig http://twig.sensiolabs.org/doc/tags/include.html

6
Raphael Larrinaga

Il est également possible d'utiliser l'utilisation d'un tableau par Twig pour créer un repli lorsque le fichier n'existe pas.

Par exemple. Si footer.html.twig n'est pas disponible, defaultfooter.html.twig sera utilisé.

{{ include([
  '@yourthemename/parts/footer.html.twig',
  '@yourthemename/parts/defaultfooter.html.twig'
]) }}

Nb: J'essaie toujours de déterminer si c'est la meilleure pratique ou non.

5
granticusiv

Maintenant que Ajouter Twig héritage du modèle basé sur le registre des thèmes, activez l'ajout Twig loaders a été validé, vous pouvez également utiliser le ligne suivante.

{% include 'footer.html.twig' %}
4
Yusef

Pour Drupal 8

Y compris un fichier twig dans le thème lorsque vous faites un {% include 'FILE_NAME.html.twig' %} Drupal s'attend à ce que votre FICHIER se trouve dans votre répertoire de thèmes actuel. Il suffit de le mettre là et ça va fonctionner.

Incluant un fichier twig dans votre module

Si vous souhaitez l'ajouter dans un MODULE, vous devez le déclarer dans la fonction THEME. Dans votre fichier .module, ajoutez simplement ce qui suit:

<?php function YOUR_MODULE_NAME_theme($existing, $type, $theme, $path) {   
   'FILE_NAME' => [
      'variables' => [
      ],
      'template' => 'FILE_NAME',
    ], ?>

Ensuite, placez votre fichier Twig dans YOUR_MODULE/template/FILE_NAME.html.twig

1
Karim Rachadi