Мне нужно визуализировать блок представлений в моем шаблоне page.html.twig. В D7 я бы сделал это:
<?php
$block = module_invoke('module_name', 'block_view', 'block_delta');
print render($block['content']);
?>
В Drupal 8 module_invoke устарел и рекомендуется использовать это: (я добавил имя блока в качестве второго параметра)
Drupal::moduleHandler()->invoke($block, 'views_block__blog_block_1', $args = array());
Я попробовал несколько вещей. Сначала попытался сделать это в шаблоне ветки, но я не знаю, как вызывать функции php в шаблоне ветки, так что это не получилось слишком хорошо.
Затем я вызвал функцию в функции preprocess_page () в файле .theme, но прежде чем я смог заставить ее работать, я попытался сделать что-то попроще, просто попытаться заставить переменную работать внутри шаблона ветки, который тоже не работал, например:
В функции template_preprocess_page (& $ vars) в файле .theme:
$test = 'Hello World';
$vars['$my_var'] = $test;
Я попытался вызвать my_var внутри шаблона ветки, но он не сработал, и я получил сообщение об ошибке «Сайт имеет ошибку, пожалуйста, свяжитесь с администратором»
Итак, подведем итог, вот мои вопросы:
- Как сделать переменные доступными внутри шаблонов веточек?
- Как вызвать функции внутри шаблонов веточек?
- Отображать ли блоки внутри файла .theme или шаблона ветки?
В Drupal 8 это работает для рендеринга блочного плагина (то есть того, который вы создали в пользовательском модуле) в preprocess_hook:
Затем вы можете отобразить его в своем шаблоне ветки следующим образом:
Примечание: это загрузит общую версию вашего блока. Если вы хотите загрузить экземпляр вашего блока переменными (после того, как вы создали его в / admin / structure / block), вы должны загрузить его следующим образом:
источник
Для этого вы можете использовать модуль настройки Twig , а затем использовать следующий синтаксис:
Связанный: Как программно разместить блок?
источник