Включіть частковий шаблон


19

Я намагаюся використовувати Drupal 8 із власною темою, через великі відмінності в структурі для моїх вимог. У мене є сторінка - front.twig.html та page.twig.html, я б хотів створити частини шаблону, як це було використано в phrozn oder у звичайному проекті Symfony2, наприклад, footer.html.twig та header.html.twig. Ці шаблони зберігаються у підкаталозі / parts /.

Але коли я називаю ці шаблони як звичайні, я просто отримую рядок із назвою шаблону.

Наприклад:

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

Повертає ім'я файлу як рядок:

parts/footer.html.twig

Це можна зробити з Drupal 8?

Відповіді:


33

Ви не можете робити відносні шляхи, всі шляхи повинні бути або з кореня Drupal, або на основі шляху, проміжної імен, до каталогу "шаблони": https://www.drupal.org/node/2143557 .

Я б уникнув "з коріння Drupal" і використовувати простори імен, принаймні, поки не буде вирішено https://www.drupal.org/node/2291449 .

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

Редагувати: Якщо ви хочете передати додаткові аргументи для циклу або для перевірки деяких vars до вашого включеного twigшаблону, слід написати таким чином:

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

Редагувати: Тепер, коли https://www.drupal.org/node/2291449 було вчинено, ви також можете зробити:

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

Дивіться https://www.drupal.org/node/2369981, чому ви бачили ім'я файлу як рядок замість корисного винятку.


А як щодо includeпередачі значень? Припустимо, я хотів би включити image-formatterта пропустити urlнуль, щоб уникнути створення пов’язаного зображення.
SaidbakR

Приклади, надані у цій відповіді, схоже, не спрацьовують.
arnoldbird

3
Будьте в курсі, що @mythemeвирішує шлях mytheme+ рядок /templates. Іншими словами, @mythemeвирішує до mytheme/templatesкаталогу.
Даніель

Для подальшого уточнення коментаря від @daniels. Якщо ваша власна тема має ім'я mytheme, і вона розташована у розділі 'themes / custom / mytheme', то простір імен Twig @mythemeвирішується на «теми / користувацькі / міфтема / шаблони» . Включення шаблону, який знаходиться у @mytheme/fragments/footer.html.twigзначенні, він вирішить до 'themes / custom / mytheme / templates / fragments / footer.html.twig'
ec0g

15

Використовуйте повний шлях до каталогу тем. Якщо ви використовуєте простір імен, вам доведеться його змінити, якщо ви перенесите код на інший сайт або тему.

Це має працювати:

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

це дуже зручно, коли робите підтемати. Встановіть це у своїй темі "Батьків", а потім отримайте версію в каталозі шаблонів дочірньої теми.
Ендрю Кіллен

Це єдина відповідь, яка працювала на мене.
arnoldbird

5

Також можна використовувати масив Twig для створення резервного резерву, коли файл не існує.

Напр. Якщо footer.html.twig недоступний, буде застосовано defaultfooter.html.twig.

{{ include([
  '@yourthemename/parts/footer.html.twig',
  '@yourthemename/parts/defaultfooter.html.twig'
]) }}
Поєднайте це з використанням змінних у назви файлів, і ви можете включати різні файли залежно від якогось контексту.

Нб: Я все ще намагаюся розібратися, чи це найкраща практика чи ні.


5

Зауважте, що ви можете передавати змінні після 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 %}

Дивіться документацію Twig http://twig.sensiolabs.org/doc/tags/include.html



1

Для Drupal 8

Якщо включити файл гілочки до теми, коли ви робите {% include 'FILE_NAME.html.twig' %}Drupal, очікує, що FILE буде розташований у вашому поточному каталозі тем. Просто покладіть його туди, і воно буде працювати.

Включення файлу гілочки до вашого модуля

Якщо ви хочете додати його в МОДУЛІ, вам слід оголосити його у функції ТЕМА. У свій .module файл просто додайте наступне:

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

Потім помістіть свій файл Twig у YOUR_MODULE / template / FILE_NAME.html.twig


Неправильна інформація про шлях. Щоб включити файл з модуля з гачком теми, вам потрібен інший спосіб: {{include ('@ yourModuleName / twigFileName.html.twig', {var1: var1Val, var2: var2Val})}} Не забувайте, що файли шаблонів повинні бути у "yourModuleName / шаблони /".
Вертер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.