Jak renderować linki kontekstowe dla bloków renderowanych w kodzie?

11

Załadowałem temat bloku i treść module_invoke()i użyłem ich render()do renderowania. Chcę użyć linków kontekstowych dla tego bloku. Jak mogę je również renderować?

To jest kod, którego używam w szablonie strona - front.tpl.php.

$block = module_invoke('block', 'block_view', '4);
print render($block);

Jakiego kodu powinienem użyć zamiast tego?

Pedram Behroozi
źródło

Odpowiedzi:

16
$block = block_load('module', 'delta');
print drupal_render(_block_get_renderable_array(_block_render_blocks(array($block))));

Szkoda, że ​​do tego celu musimy użyć funkcji prywatnych z modułu blokowego (_ * ()).

Bart
źródło
Tak więc dla przykładu PO byłoby to: $ block = block_load ('block', '4');
Cameron
12

Odpowiedź Barta da ostrzeżenie o ścisłych standardach (domyślnie włączone w PHP 5.4). Aby to naprawić, po prostu użyj zmiennej pośredniej dla tablicy do renderowania:

$block = block_load('module', 'delta');
$renderable_array = _block_get_renderable_array(_block_render_blocks(array($block)));
print drupal_render($renderable_array);

Przyczyną tego ostrzeżenia jest to, że drupal_renderfunkcja oczekuje, że jej parametr będzie referencją. Ma podpis drupal_render(&$elements). Aby uzyskać więcej informacji, zobacz odpowiedź na to podobne pytanie .

Chris M.
źródło