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.