¿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?

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.


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 .


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 :)


1
Lo que OP significa es que muestra el bloque mediante programación, pero no se agregan enlaces contextuales.
Bart
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.