Drupal: Mostrar bloque cuando se selecciona un item de menu y todos sus hijos

  • 21 Dic 2010
  • Drupal

Problema

Se quiere mostrar un bloque (que en realidad se trata de parte del menú principal) solo cuando se seleccione un punto determinado del menu pero también si se está visitando el contenido de uno de sus hijos.

Solución

En Drupal 6 existe la función menu_get_active_trail() que nos devuelve un array con la información del "camino" de elementos del menú hasta el que vincula la página visitada.

Lo primero que hay que hacer, es determinar el id del elemento del menú a partir del cual queremos mostrar el bloque. Para esto puede usarse el Firebug y marcar el menú. Veremos que la clase del elemento de la lista dirá algo como menu-mlid-289. Si no lo vemos, será necesario imprimir el resultador de menu_get_active_trail().

print_r(menu_get_active_trail());

En el bloque que se haya creado, marcar la opción "Mostrar si el siguiente código PHP devuelve el valor TRUE" y pegames el siguiente código PHP cambiando el <mlid> por el número obtenido anteriormente.

<?php
  $this_mlid = <mlid>;
  $this_page = menu_get_active_trail();
  $this_menu = array();
  foreach ($this_page as $key => $value) {
    if (isset($value['mlid'])) {
      $this_menu[] = $value['mlid'];
    }
  }
  if (in_array($this_mlid, $this_menu)) {
    return true;
  } else {
    return false;
  }
?>