Muszę wypisać niektóre regiony z szablonu html.tpl.php, ponieważ nie zmieniają się one między page.tpl.php i page-front.tpl.php (żeby wymienić tylko dwa). Zasadniczo chcę uniknąć duplikacji kodu.
Jednak wydaje się, że nic nie jest powiązane z regionami w html.tpl.php, ani nie mogłem niczego odzyskać za pomocą drupal_get_region_content (zarówno z parametrami, jak i bez parametrów, po prostu zwraca pustą tablicę).
Pomysły?
drupal_set_region_content()
ustawiłeś zawartość regionu?drupal_add_region_content()
ale nie widzę w tym sensu: ustawiam zawartość regionów poprzez interfejs administratora bloków.drupal_add_region_content()
.Odpowiedzi:
Rozwiązałem w ten sposób:
i wtedy mógłbym zrobić
źródło
drupal_get_region_content()
zwraca treść ustawioną przy użyciu poprzednich wywołańdrupal_add_region_content()
, ale nie obejmuje treści bloków, które są renderowane na stronie za pomocą block_page_build () .Jeśli szukasz „drupal_add_region_content” w kodzie źródłowym Drupal, zauważysz, że funkcja jest wywoływana przez:
drupal_get_region_content()
install_display_output()
template_preprocess_maintenance_page()
update_task_list()
Dla bloków na stronie administracyjnej ustawia się regiony, w których bloki będą renderowane, ale ich zawartość nie jest dodawana
drupal_add_region_content()
; w rzeczywistości żadna z wymienionych powyżej funkcji (które są jedynymi wywoływanymi funkcjamidrupal_add_region_content()
, z wyjątkiem kodu do testowania instalacji Drupal) nie służy do renderowania / dodawania zawartości bloku.Jeśli chcesz wyrenderować bloki we własnym kodzie, powinieneś sprawdzić kod użyty w
block_page_build()
. W szczególności jest to kod, który prawdopodobnie jest dla Ciebie bardziej przydatny:Pierwsze dwa wiersze potwierdzają, że wyświetlana strona nie jest stroną demonstracyjną służącą do pokazania, gdzie znajdują się regiony tematyczne.
Jeśli chcesz wyrenderować bloki w inny sposób, bardziej prawdopodobne jest, że chcesz zastąpić theme_block () w swoim motywie lub (co bardziej prawdopodobne) utworzyć niestandardowy plik szablonu block.tpl.php. Innym sposobem zmiany sposobu renderowania bloków jest użycie funkcji wstępnego przetwarzania dla bloków ( hook_preprocess_block () ).
źródło