Có hai loại khối và phương thức hiển thị hai khối này hơi khác nhau:
Khối nội dung
Khối nội dung là các khối mà bạn tạo trong giao diện. Chúng giống như các cấu trúc dữ liệu có thể định cấu hình các nút, với các trường, v.v. Nếu bạn muốn kết xuất một trong số đó, bạn có thể làm những gì bạn thường làm với các thực thể, tải chúng và hiển thị chúng bằng trình xây dựng chế độ xem:
$bid = ??? // Get the block id through config, SQL or some other means
$block = \Drupal\block_content\Entity\BlockContent::load($bid);
$render = \Drupal::entityTypeManager()->
getViewBuilder('block_content')->view($block);
return $render;
Khối plugin
Các khối cũng có thể là plugin, được xác định trong các mô-đun khác nhau. Một ví dụ có thể là khối bánh mì. Nếu bạn muốn kết xuất những thứ này, bạn sẽ cần sử dụng trình quản lý plugin khối.
$block_manager = \Drupal::service('plugin.manager.block');
// You can hard code configuration or you load from settings.
$config = [];
$plugin_block = $block_manager->createInstance('system_breadcrumb_block', $config);
// Some blocks might implement access check.
$access_result = $plugin_block->access(\Drupal::currentUser());
// Return empty render array if user doesn't have access.
// $access_result can be boolean or an AccessResult class
if (is_object($access_result) && $access_result->isForbidden() || is_bool($access_result) && !$access_result) {
// You might need to add some cache tags/contexts.
return [];
}
$render = $plugin_block->build();
// In some cases, you need to add the cache tags/context depending on
// the block implemention. As it's possible to add the cache tags and
// contexts in the render method and in ::getCacheTags and
// ::getCacheContexts methods.
return $render;
Cấu hình thực thể
Được chia sẻ cho hai loại là các khối, là khi bạn chèn chúng vào một vùng, bạn sẽ tạo một thực thể cấu hình có tất cả các cài đặt cho khối. Trong một số trường hợp, nó sẽ hữu ích hơn khi xử lý các thực thể cấu hình. Vì cùng một khối có thể được đặt ở nhiều vùng với và với cấu hình khác nhau, nên có thể khó sử dụng các thực thể cấu hình khối hơn. Điều tuyệt vời là bạn có thể muốn kết xuất một khối với cấu hình cụ thể, điều tệ là các id cấu hình có thể thay đổi bằng cách làm rối giao diện, do đó mã có thể không hoạt động sau khi cho phép người dùng sử dụng giao diện khối.
$block = \Drupal\block\Entity\Block::load('config.id');
$render = \Drupal::entityTypeManager()
->getViewBuilder('block')
->view($block);
return $render;