Odpowiedzi:
Możesz wydrukować regiony w dowolnym szablonie, ale nie są one dostępne od razu w node.tpl.phpszablonie. Aby je udostępnić, utworzysz w node.tpl.phpszablonie nową zmienną, która będzie zawierać całą zawartość regionu.
Tworzenie nowych zmiennych szablonu odbywa się za pomocą funkcji wstępnego przetwarzania. W template.phppliku motywu utwórz funkcję, która wygląda następująco:
function mytheme_preprocess_node(&$variables) {
}
Zastępowanie mythemekrótką nazwą motywu. Teraz, aby Drupal rozpoznał tę nową funkcję wstępnego przetwarzania, musisz odbudować rejestr motywów witryny. Jest to tak proste, jak przejście do Konfiguracja → Programowanie → Wydajność i naciśnięcie przycisku „Wyczyść wszystkie pamięci podręczne” u góry.
Teraz działają funkcje preprocesowania, które $variableszawierają tablicę odpowiadającą dostępnym zmiennym twojego szablonu. Na przykład, w node.tpl.php, $submittedzawiera autora wiersza autora. W powyższej funkcji preprocess znajduje się w $variables['submitted'].
Aby naśladować to, co masz page.tpl.php, gdzie masz tablicę o nazwie $pagezawierającą wszystkie regiony, chciałbyś zapełnić $variables['page'].
Problem polega na tym, że parametr $pagein node.tpl.phpjest już wypełniony wartością true / false, która informuje, czy patrzysz na węzeł sam, czy na liście.
Aby uniknąć kolizji nazw, $regionzamiast tego wypełnij :
function mytheme_preprocess_node(&$variables) {
// Get a list of all the regions for this theme
foreach (system_region_list($GLOBALS['theme']) as $region_key => $region_name) {
// Get the content for each region and add it to the $region variable
if ($blocks = block_get_blocks_by_region($region_key)) {
$variables['region'][$region_key] = $blocks;
}
else {
$variables['region'][$region_key] = array();
}
}
}
Następnie w node.tpl.phpszablonie motywu możesz renderować dowolny region, wykonując następujące czynności:
<?php print render($region['sidebar_first']); ?>
Gdzie sidebar_firstjest nazwa regionu, który chcesz wyrenderować.
<?php print render(block_get_blocks_by_region('machine_name_of_your_region'));?>. Stąd: webomelette.com/add-region-node-template
block_get_blocks_by_region()zwraca tylko tablicę bloków i jeśli chcesz wyrenderować go jako region, musisz dodać opakowanie regionu.