Я пытаюсь отобразить шаблон в Drupal 8. В Drupal 7 я создавал тему с hook_theme, создавал каталог шаблонов в моем модуле, вставлял файл шаблона и мог отображать его с помощью theme (). Как мне сделать equivilent с Drupal 8? Я попробовал следующее, но это ошибки:
В твиттере твиттер
/ ** * Реализует hook_theme (). * / функция twitter_pull_theme ($ существующие, $ type, $ theme, $ path) { возвращаемый массив ( 'twitter_pull_tweet_listing' => массив ( 'variable' => array ( 'description' => array (), ), 'template' => 'templates / twitter_pull_tweet_listing', ), ); }
Внутри twitter_pull / templates: twitter_pull_tweet_listing.html.twig
Внутри моего блока:
$ tweet_template = array ('# theme' => 'twitter_pull_tweet_listing', '#attributes' => array ('params' => $ params)); $ output = drupal_render ($ tweet_template, array ('params' => $ params)); вывод $ output;
Я получаю следующую ошибку в моих журналах:
Ошибка пользователя: «content» - недопустимый ключ массива рендеринга в Drupal \ Core \ Render \ Element :: children () (строка 89 из C: \ xampp \ htdocs \ drupal \ core \ lib \ Drupal \ Core \ Render \ Element. PHP).
РЕДАКТИРОВАТЬ: еще одна ошибка:
Twig_Error_Loader: невозможно найти шаблон "modules / custom / twitter_pull / templates / templates / 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 \, но он все равно не работал.
drupal_render()
? Он ожидает логическое значениеtemplates/templates/
Часть в сообщении 2 ошибки заставляет меня думать , что вы должны попробовать'template' => 'twitter_pull_tweet_listing',
вместо'template' => 'templates/twitter_pull_tweet_listing',
вhook_theme()
Ответы:
В целом, в Drupal 8 вы должны пропустить строку шаблона и назвать шаблон так же, как ваш хук, преобразуя подчеркивания в тире. Это было изменено, потому что шаблоны являются форматом вывода по умолчанию для тематического вывода в D8. Так что в вашем случае это
hook_theme()
:... будет указывать на шаблон в
templates/twitter-pull-tweet-listing.html.twig
. (Это использует синтаксис короткого массива .)Соответствующая запись изменения: https://www.drupal.org/node/2231673
А также, из блока или контроллера, пожалуйста, верните массив визуализации вместо строки. Таким образом, впоследствии можно будет манипулировать результатами, и необработанные данные будут по-прежнему доступны. Другими словами, по возможности избегайте звонков
drupal_render()
из своего кода. Это относится и к Drupal 7: https://www.drupal.org/node/930760#creatingИтак, из вашего блока:
источник