¿Cómo renderizo enlaces contextuales para bloques que renderizo en mi código?

11

Cargué un tema y contenido de bloque module_invoke()y los utilicé render()para representarlos. Quiero usar enlaces contextuales para este bloque. ¿Cómo puedo hacerlos también?

Este es el código que estoy usando en la página - plantilla front.tpl.php.

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

¿Qué código debo usar en su lugar?

Pedram Behroozi
fuente

Respuestas:

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

Lástima que tengamos que usar funciones privadas del módulo de bloque (_ * ()) para lograr esto.

Bart
fuente
Entonces, para el ejemplo de OP, sería: $ block = block_load ('block', '4');
Cameron
12

La respuesta de Bart dará una advertencia de estándares estrictos (habilitada por defecto en PHP 5.4). Para solucionar esto, simplemente use una variable intermedia para la matriz renderizable:

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

La razón por la que ocurre la advertencia es porque la drupal_renderfunción espera que su parámetro sea una referencia. Tiene la firma drupal_render(&$elements). Para obtener más información, consulte la respuesta a esta pregunta similar .

Chris M.
fuente
2

Los enlaces contextuales son útiles y realmente fáciles de implementar. Para su caso de uso, debe implementar hook_block_view_alter()para cambiar el elemento #contextual_links para satisfacer sus necesidades. Estas referencias te ayudarán:

GL :)

ronaldofs
fuente
1
Lo que OP significa es que muestra el bloque mediante programación, pero no se agregan enlaces contextuales.
Bart