martes, 13 de agosto de 2013

Invocar un bloque en drupal

¿Cuando se hace necesario invocar un bloque?

Por ejemplo cuando queremos que nuestro bloque aparezca en dos zonas diferentes, pero sólo podemos asignarla a una de nuestro template.



Y para evitarnos tener que hacer un bloque similar para ubicarlo en otro lugar, podemos invocar el que ya creamos. Podemos aplicarlo a cualquier tipo de bloque, sólo necesitamos conocer a que módulo pertenece y como se llama y aplicar la función module_invoke();

La función se usará del siguiente modo:
module_invoke('nombre_modulo', 'block_view', 'nombre_bloque');

Y como obtenemos estos datos?

Podemos dirigirnos a  /admin/structure/block para ver el listado de nuestros bloques.
Luego buscamos el bloque que deseamos invocar, en mi caso "User menu" y le damos clic a configurar. En la barra de direcciones veremos los datos que necesitamos como se muestra en la imagen.

Figura 1: Identificar nombre del módulo y nombre del bloque para la función module_invoke();
Entonces nuestra función queda así:
module_invoke('system', 'block_view', 'user-menu');


Ya que tenemos claro como invocar el bloque, vamos a crear un bloque que invoque a otro bloque (si, ya sé que suena redundante).
  1. Primero vamos a añadir un bloque nuevo en /admin/structure/block/add
  2. Block title: | Block description: Bloque Invocado - User Menu
  3. Insertar en el cuerpo del bloque o Block body el siguiente código:
    //$block = module_invoke('nombre_modulo', 'block_view', 'nombre_bloque');
    $block = module_invoke('system', 'block_view', 'user-menu');
    print render($block['content']);
    ?>
  4. Text format: PHP code
  5. Indicar Zona donde lo ubicarás en tu template, la restricción para las paginas y la restricción para los usuarios como desees.
  6. Guardar bloque y listo!!!

También se puede usar para invocar un bloque desde una pagina (page) o una vista (view), insertándola en el encabezado o pie de pagina siempre usando el filtro PHP code.