Программный блок модуля визуализации


Я знаю, что могу программно отобразить свой пользовательский блок с помощью

$block = \Drupal\block_content\Entity\BlockContent::load(2);
$vars['contact_us_info_block']= \Drupal::entityTypeManager()->getViewBuilder('block_content')->view($block);
$vars['contact_us_info_block'] = drupal_render($vars['contact_us_info_block']); 

Теперь я хочу программно отобразить блок SimpleNewsletter, я попытался

$block_manager = \Drupal::service('plugin.manager.block');
$config = [];
$plugin_block =  $block_manager->createInstance('simplenewssubscription', $config);
$vars['newsletterblock'] = $plugin_block->build();

Но столкнулся со следующим сообщением в выводе

This block is broken or missing. You may be missing content or you might need to enable the original module.

Включен модуль Simplenewsletter, как я могу программно отрисовывать блоки модулей?

 2
Author: Yuseferi, 2016-06-30

2 answers

Я визуализирую его со следующими фрагментами и работаю правильно

$block = \Drupal\block\Entity\Block::load('simplenewssubscription');
$block_content = \Drupal::entityTypeManager()
    ->getViewBuilder('block')
    ->view($block);
$vars['newsletterblock'] = $block_content;
 1
Author: Yuseferi, 2016-06-30 09:44:55

Вот пример из Модуля токенов блока для визуализации блока на основе его идентификатора:

/**
 * Renders the block.
 *
 * @param  string $bid
 *   Block Id.
 *
 * @return string
 *   Rendered block.
 */
function block_token_block_render($bid) {
  $block = \Drupal\block\Entity\Block::load($bid);
  $block_content = \Drupal::entityManager()
    ->getViewBuilder('block')
    ->view($block);
  return \Drupal::service('renderer')->renderRoot($block_content);
}
 0
Author: kenorb, 2017-08-04 21:00:50