Inserire un blocco in qualsiasi template (inserimento di un blocco Drupal in un template)
Drupal 8
Nel template Twig non è possibile richiamare codice PHP, quindi è necessario passare il blocco già pronto al template. Se devi passare una variabile a un template di tipo nodo, puoi utilizzare la funzione themename_preprocess_node() nel tema; per il template della pagina, invece, themename_preprocess_page(). Passi la variabile al template Twig e poi la stampi direttamente al suo interno.
Blocchi creati tramite l’interfaccia di amministrazione
$block = \Drupal\block\Entity\Block::load('your_block_id'); $variables['block_output'] = \Drupal::entityTypeManager() ->getViewBuilder('block') ->view($block);
Per la funzione themename_preprocess_node() (il preprocess del template del nodo), puoi visualizzare il blocco in questo modo:
function themename_preprocess_node(&$variables) { $block = \Drupal\block\Entity\Block::load('your_block_id'); $variables['block_output'] = \Drupal::entityTypeManager() ->getViewBuilder('block') ->view($block); }
Nel template node.html.twig puoi ora mostrare il blocco così:
{{ block_output }}
Blocchi creati tramite plugin
Questi blocchi possono essere visualizzati nello stesso modo di quelli creati tramite l’interfaccia amministrativa, ma il codice da usare è leggermente diverso:
$block_manager = \Drupal::service('plugin.manager.block'); // Puoi definire qui le impostazioni del blocco. $config = []; $plugin_block = $block_manager->createInstance('system_breadcrumb_block', $config); // Alcuni blocchi possono avere restrizioni di accesso. $access_result = $block_plugin->access(\Drupal::currentUser()); // Restituisce un array vuoto se l’accesso è negato. if ($access_result->isForbidden()) { return []; } $render = $plugin_block->build(); // È possibile aggiungere tag o contesti di cache qui. // Puoi anche aggiungerli nei metodi render(), ::getCacheTags, ::getCacheContexts. return $render;
Lo stesso codice senza commenti:
$block_manager = \Drupal::service('plugin.manager.block'); $config = []; $plugin_block = $block_manager->createInstance('system_breadcrumb_block', $config); $access_result = $block_plugin->access(\Drupal::currentUser()); if ($access_result->isForbidden()) { return []; } $render = $plugin_block->build(); return $render;
Drupal 7
In Drupal 7 la funzione è simile, ma con parametri leggermente diversi: invece dei due parametri block e view, si usa un solo block_view:
print render(module_invoke('block', 'block_view', '12'));
Per inserire un blocco di tipo Views, si scrive così:
print render(module_invoke('views', 'block_view', 'feedbacks-block'));
In questo modo, in Drupal 7 inseriamo un blocco View; nota che nella delta del primo blocco non c’è un numero, ma scriviamo semplicemente feedbacks-block.
Drupal 6
Per inserire un blocco nel punto desiderato, usa la funzione module_invoke():
$block = module_invoke('views', 'block', 'view', 'block_name'); print $block['content'];
Ad esempio, per inserire un blocco creato tramite l’interfaccia amministrativa, usa il seguente codice:
$block = module_invoke('block', 'block', 'view', 12); print $block['content'];
Dove 12 è l’ID (delta) del blocco.
Se vuoi inserire un blocco di tipo Views, scrivilo così:
$block = module_invoke('views', 'block', 'view', 'feedbacks-block_1'); print $block['content'];
Dove feedbacks-block_1 è il nome del blocco nella View: feedbacks è il nome della View e block_1 è il nome del display all’interno della View.