7 de septiembre de 2010

Drupal: Cómo mostrar el submenú activo dentro de un nodo

Drupal es un CMS que separa por completo la gestión del contenido de los menús de navegación, esta manera de hacer las cosas implica que cuando mostramos el contenido de un nodo en pantalla no nos pone fácil mostrar además otros datos como el submenú (si lo hubiera) de la opción del menú que nos muestra este contenido.

Os pongo aquí el código he tenido que desarrollar para una web con Drupal 6 que permite mostrar en un nodo el submenú del item del menú activo que invoca a ese nodo.

<?php
// Requiere tener instalado el módulo Menu Node API (http://drupal.org/project/menu_node)

$query = "SELECT nid,
 mlid
 FROM menu_node
 WHERE
 nid=". $node->nid ."
";


$queryResult =  db_query($query);

while ($datos = db_fetch_object($queryResult)) {
   
    $menuID = $datos->mlid;

    $menu_item = menu_link_load($menuID);
    $tree = _menu_subtree_data($menu_item, menu_tree_all_data($menu_item['menu_name']));
   
    $treeNew = array_values($tree);
    $treeNew = $treeNew[0];
   
    if($treeNew["link"]["has_children"]==1){
        $tree = array_shift($tree);
        print menu_tree_output($tree['below']);
    }

}


function _menu_subtree_data($item, $tree) {
    foreach ($tree as $cid => $data) {
      if ($item['mlid'] == $data['link']['mlid']) {
        return array($cid => $data);
      }
   
      if ($data['below']) {
        $return = _menu_subtree_data($item, $data['below']);
        if ($return) {
          return $return;
        }
      }
    }
    return FALSE;
}

?>

No hay comentarios: