Рассмотрим пару кейсов, того как рендерить блок из вашего кода.
Блок существует как Entity
Вы создали произвольный блок через Manage->Structure->Block layout. В этом случае в друпал хранится сущность этого типа блока, вместе с определенными настройками. Соответственно рендерится он как обычный элемент entity:
1 2 3 4 5 6 |
$block_name = '....'; if ($block = \Drupal\block\Entity\Block::load($block_name)) { $html = \Drupal::entityTypeManager()->getViewBuilder('block')->view($block); } else { $html = ''; } |
Остаётся понять лишь, где же взять значение для $block_name.
Вернитесь на страницу управления блоками и нажмите «configure» напротив вашего блока. На примере блока с навигацией, думаю вам будет понятно куда смотреть:
Блок определен каким то модулем
Здесь уже потребуется работа с сервисом plugin.manager.block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$block_manager = \Drupal::service('plugin.manager.block'); // если требуются какие то параметры // задайте из здесь $config = []; // у меня в примере форумный блок $plugin_block = $block_manager->createInstance('forum_new_block', $config); // проверим права на доступ к блоку $access_result = $plugin_block->access(\Drupal::currentUser()); if (is_object($access_result) && $access_result->isForbidden() || is_bool($access_result) && !$access_result) { $html = ''; } else { $html = $plugin_block->build(); } |
Здесь id блока можно подсмотреть в соответствующем модуле в каталоге src/Plugin/Block — где в коннотации вы найдете значение id.