Як візуалізувати шаблон у Drupal 8


12

Я намагаюсь надати шаблон в Drupal 8. У Drupal 7 я створив би тему за допомогою гачки_теми, зробив каталог шаблонів у своєму модулі, вкинув файл шаблону і я міг би відобразити його з темою (). Як мені зробити еквівалент з Drupal 8? Я спробував таке, але помилки вийшли:

У twitter_pull.module

/ **
 * Реалізує гак_тема ().
 * /
функція twitter_pull_theme ($ існуючий, $ тип, $ тема, $ шлях) {
  повернути масив (
    'twitter_pull_tweet_listing' => масив (
      'змінних' => масив (
        'description' => масив (),
      ),
      'template' => 'шаблони / twitter_pull_tweet_listing',
    ),
  );
}

Всередині twitter_pull / шаблони: the twitter_pull_tweet_listing.html.twig

Всередині мого блоку:

$ tweet_template = array ('# тема' => 'twitter_pull_tweet_listing', '#attributes' => масив ('params' => $ params));
$ output = drupal_render ($ tweet_template, array ('params' => $ params));
друкувати $ вихід;

Я отримую таку помилку в своїх журналах:

Помилка користувача: "content" - недійсний ключ масиву візуалізації в Drupal \ Core \ Render \ Element :: children () (рядок 89 з C: \ xampp \ htdocs \ drupal \ core \ lib \ Drupal \ Core \ Render \ Element. php).

EDIT: Ще одна помилка:

Twig_Error_Loader: Неможливо знайти шаблон "модулі / користувальницькі / twitter_pull / шаблони / шаблони / twitter_pull_tweet_listing.html.twig" (вивчено: C: \ xampp \ htdocs \ drupal). у Twig_Loader_Filesystem-> findTemplate () (рядок 202 C: \ xampp \ htdocs \ drupal \ core \ vendor \ twig \ twig \ lib \ Twig \ Loader \ Filesystem.php).

Я думаю, що ця помилка трапляється, тому що я не використовую простори імен та автоматично завантажую. Де я можу розмістити файл шаблону? На основі повідомлення про помилку я навіть намагався поставити його на C: \ xampp \ htdocs \ drupal \ templates \, але все одно не вийшло.


Що в twitter_pull_tweet_listing.html.twig?
Клайв

просто заповнювач: текст "це шаблон гілочки"
користувач1015214

З якоїсь конкретної причини ви передаєте масив параметрів як другий аргумент drupal_render()? Очікує булеву
Клайв

Ні, це була помилка. Я вийняв другий параметр drupal_render, і у мене все ще є та сама проблема. Я редагую своє запитання вище, щоб включити другу помилку, яку я бачу.
користувач1015214

templates/templates/Частина в повідомленні 2 помилки змушує мене думати , що ви повинні спробувати 'template' => 'twitter_pull_tweet_listing',замість 'template' => 'templates/twitter_pull_tweet_listing',вhook_theme()
Clive

Відповіді:


24

Загалом у Drupal 8 слід залишити рядок шаблону та назвати шаблон таким же, як і ваш гачок, перетворивши підкреслення на тире. Це було змінено, оскільки шаблони є типовим форматом виводу для тематичного виводу в D8. Тож у вашому випадку це hook_theme():

/**
 *  Implements hook_theme().
 */
function twitter_pull_theme($existing, $type, $theme, $path) {
  return [
    'twitter_pull_tweet_listing' => [
      'variables' => [
        'description' => [],
      ],
    ],
  ];
}

… Вказував би на шаблон на templates/twitter-pull-tweet-listing.html.twig. (Для цього використовується синтаксис короткого масиву .)

Відповідний запис змін: https://www.drupal.org/node/2231673

А також від блоку чи контролера поверніть масив візуалізації замість рядка. Таким чином результати можуть бути маніпульовані згодом, і необроблені дані все ще доступні внизу лінії. Іншими словами, уникайте дзвінків drupal_render()зі свого коду, коли це можливо. Це стосується і Drupal 7: https://www.drupal.org/node/930760#creating

Отже, з вашого блоку:

return [
  '#theme' => 'twitter_pull_tweet_listing',
  '#description' => 'foo',
  '#attributes' => [],
];

1
Приємно знати, що це навмисно :)
Клайв

Дякую за відповідь! Але чи можете ви пояснити трохи більше, чому я міг просто повернути масив як вихід? В якийсь момент часу для виклику потрібно викликати drupal-рендер, тому якщо я його не називаю, хто це робить?
користувач1015214

До речі, це можна зробити і в Drupal 7. Я спробую знайти кілька документів, щоб додати відповідь.
Котцер

1
Трохи затримали, але я додав посилання на drupal.org/node/930760#creating у відповідь.
Котцер

1
Саме те, що мені було потрібно, теж чітке пояснення! Дякую.
Йоган Хаест
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.