Esistono due tipi di blocchi e il metodo di rendering dei due è leggermente diverso:
Blocchi di contenuto
I blocchi di contenuto sono blocchi creati nell'interfaccia. Sono molto simili a strutture di dati configurabili dei nodi, con campi ecc. Se si desidera eseguire il rendering di uno di questi, è possibile fare ciò che si farebbe normalmente con le entità, caricarle e renderle con il generatore di viste:
$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;
Blocchi plugin
I blocchi possono anche essere plug-in, definiti in vari moduli. Un esempio potrebbe essere il blocco del pangrattato. Se si desidera renderizzarli, sarà necessario utilizzare il gestore plug-in di blocco.
$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;
Configurare le entità
Condivisi per i due tipi sono blocchi, che una volta inseriti in una regione, si creerà un'entità di configurazione che ha tutte le impostazioni per il blocco. In alcuni casi sarà più utile gestire le entità di configurazione. Poiché lo stesso blocco può essere posizionato in più aree con e con diversa configurazione, può diventare più complicato utilizzando le entità di configurazione del blocco. La cosa bella è che potresti voler rendere un blocco con una configurazione specifica, la cosa brutta è che gli ID di configurazione possono cambiare facendo un casino con l'interfaccia, quindi il codice potrebbe finire per non funzionare dopo aver permesso agli utenti di usare l'interfaccia del blocco.
$block = \Drupal\block\Entity\Block::load('config.id');
$render = \Drupal::entityTypeManager()
->getViewBuilder('block')
->view($block);
return $render;