İki tür blok vardır ve ikisini oluşturma yöntemi biraz farklıdır:
İçerik Blokları
İçerik blokları, arayüzde oluşturduğunuz bloklardır. Bunlar, yapılandırılmış veri yapılarına, alanlar vb. Gibi düğümlere benzer. Bunlardan birini oluşturmak istiyorsanız, normal olarak varlıklar ile yapacağınız şeyi yapabilir, yükleyebilir ve görünüm oluşturucu ile oluşturabilirsiniz:
$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;
Eklenti blokları
Bloklar ayrıca çeşitli modüllerde tanımlanmış eklenti olabilir. Bir örnek, breadcrumb bloğu olabilir. Bunları oluşturmak istiyorsanız, blok eklenti yöneticisini kullanmanız gerekir.
$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;
Varlıkları yapılandır
İki tür için paylaşılan bloklardır; bir bölgeye eklediğinizde, blok için tüm ayarlara sahip bir yapılandırma öğesi oluşturacaksınız. Bazı durumlarda konfigürasyon işlemlerini yapmak daha yararlı olacaktır. Aynı blok farklı konfigürasyonlu ve farklı çoklu bölgelere yerleştirilebildiğinden, blok konfigürasyon varlıkları kullanılarak daha zor olabilir. İşin güzel yanı, belirli bir yapılandırmaya sahip bir blok oluşturmak isteyebilirsiniz, kötü olan şey, yapılandırma kimliklerini arayüzle uğraştırarak değiştirebilmeleridir, bu nedenle kullanıcıların blok arayüzünü kullanmasına izin verdikten sonra kod çalışmayabilir.
$block = \Drupal\block\Entity\Block::load('config.id');
$render = \Drupal::entityTypeManager()
->getViewBuilder('block')
->view($block);
return $render;