Umetanje bloka u bilo koji šablon (Drupal insert block into template)
Drupal 8
U Twig šablonu ne možete direktno pozvati PHP kod, zato je potrebno već pripremljeni blok proslediti u šablon. Ako treba da prosledite promenljivu Twig šablonu za nodu, koristite funkciju themename_preprocess_node() u temi, a za page šablon koristite themename_preprocess_page(). Prosledite promenljivu u Twig i u njemu je prikažite.
Blokovi kreirani preko admin panela
$block = \Drupal\block\Entity\Block::load('your_block_id');
$variables['block_output'] = \Drupal::entityTypeManager()
->getViewBuilder('block')
->view($block);
U funkciji themename_preprocess_node() (za šablon node) blok možete prikazati ovako:
function themename_preprocess_node(&$variables) {
$block = \Drupal\block\Entity\Block::load('your_block_id');
$variables['block_output'] = \Drupal::entityTypeManager()
->getViewBuilder('block')
->view($block);
}
U šablonu node.html.twig blok se ispisuje kao:
{{ block_output }}
Blokovi kreirani preko plugina
Ove blokove možete prikazati slično kao blokove iz admin panela, ali sa malo drugačijim kodom:
$block_manager = \Drupal::service('plugin.manager.block');
// Ovde možete podesiti konfiguraciju bloka.
$config = [];
$plugin_block = $block_manager->createInstance('system_breadcrumb_block', $config);
// Provera pristupa bloku
$access_result = $plugin_block->access(\Drupal::currentUser());
// Ako nema pristupa, vraća prazan niz.
if ($access_result->isForbidden()) {
return [];
}
$render = $plugin_block->build();
// Po potrebi dodajte cache tagove ili kontekste.
return $render;
Isti kod bez komentara:
$block_manager = \Drupal::service('plugin.manager.block');
$config = [];
$plugin_block = $block_manager->createInstance('system_breadcrumb_block', $config);
$access_result = $plugin_block->access(\Drupal::currentUser());
if ($access_result->isForbidden()) {
return [];
}
$render = $plugin_block->build();
return $render;
Drupal 7
U Drupal 7 funkcija je slična, samo su parametri malo drugačiji, umesto dva parametra block, view koristi se jedan block_view:
print render(module_invoke('block', 'block_view', '12'));
Za Views blok umetanje izgleda ovako:
print render(module_invoke('views', 'block_view', 'feedbacks-block'));
Ovako u Drupal 7 umetnemo views blok; primetite da se sada u delti za prvi blok ne koristi broj bloka već samo ime, npr. feedbacks-block.
Drupal 6
Da biste ubacili blok na željeno mesto koristite funkciju module_invoke():
$block = module_invoke('views', 'block', 'view', 'block_name');
print $block['content'];
Na primer, ako treba da ubacite blok kreiran preko admin panela, koristite sledeći kod:
$block = module_invoke('block', 'block', 'view', 12);
print $block['content'];
Gde je 12 broj (delta) bloka.
Ako ubacujete views blok, uradite to ovako:
$block = module_invoke('views', 'block', 'view', 'feedbacks-block_1');
print $block['content'];
Gde je feedbacks-block_1 naziv bloka u view-u, feedbacks je ime view-a, a block_1 je ime prikaza u tom view-u.