Jerarquia de Menus

Jerarquía de menus tipo plantilla de ProyectoHispano

*************************

1.- Modificar el codigo del archivo mod_mainmenu.php para que cuando el menu lo pongas horizontal marque la opcion activa, y en el modulo marcarle la opcion activate parent a yes

reemplazar

 
function mosGetMenuLink( $mitem, $level=0, &$params, $open=null ) {
    global $Itemid, $mosConfig_live_site, $mainframe;

por



function mosGetMenuLink( $mitem, $level=0, &$params , $open=null) {
        global $database,$Itemid, $mosConfig_live_site, $mainframe;

reemplazar



// Active Menu highlighting
   $current_itemid = $Itemid;
    if ( !$current_itemid ) {
            $id = '';
        } else if ( $current_itemid == $mitem->id ) {
            $id = 'id="active_menu'. $params->get( 'class_sfx' ) .'"';
        } else {
            $id = '';
        }

Por:



// Active Menu highlighting
$current_itemid = $Itemid;
$query="SELECT id FROM #__menu WHERE parent=".$mitem->id."";
$database->setQuery($query);
$eltern=$database->LoadObjectlist();
if ( !$current_itemid ) {
    $id = '';
} else if ( $current_itemid == $mitem->id ) {
    $id = 'id="active_menu'. $params->get( 'class_sfx' ) .'"';
} else if ($eltern) {
    foreach ($eltern as $kind) {
        
        if ($current_itemid == $kind->id) {
            $id = 'id="active_menu'. $params->get( 'class_sfx' ) .'"';    
                    /* ^^hier kann man auch für 'active_menu' beispielsweise
                    'active_menu_1_elternlevel' definieren, um das Eltern-Menüelement zu definieren*/
        }
        $query="SELECT id FROM #__menu WHERE parent=".$kind->id."";
            $database->setQuery($query);
            $grandparents=$database->LoadObjectlist();    
                foreach ($grandparents as $grandchild) {
                    if ($current_itemid == $grandchild->id) {
                    $id = 'id="active_menu'. $params->get( 'class_sfx' ) .'"';    
                /* ^^hier kann man auch für 'active_menu' beispielsweise
                    'active_menu_2_elternlevel' definieren, um das Eltern-Menüelement 2. Grades, also das
                    zwei über der aktuellen Ebene zu definieren */        
                    }
                }
    }
} else {
    $id = '';
}

2.- Usar un modulo que te muestre los submenus, para ello podemos usar el modulo children submenu que puedes encontrar aqui

3.- Si quieres que tambien en el submenu se quede marcada la opcion en la que estas tendras que modificar el codigo, te paso el codigo como lo he dejado yo

codigo del mod_children_submenu.php modificado por mi



<?php
/**
* Name: Show SubMenu Children
* Version: 1.0
* Author: Mike Teigen
* CreationDate: 21/09/2005
* This module is released under the GNU/GPL License
*/
defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );

$menuclass = $params->get( 'class_sfx' );

$sql = "SELECT id FROM #__menu "
    . "\nWHERE parent='$Itemid'";
        
$database->setQuery( $sql );
        
$rows1 = $database->loadResult();
        
if($rows1){
    $parent1 = $Itemid;
}
else {
    $sql = "SELECT parent FROM #__menu "
        . "\nWHERE id='$Itemid'";
        
    $database->setQuery( $sql );
    
    $rows1 = $database->loadResult();
    $parent1 = $rows1;
}
        
$sql = "SELECT name FROM #__menu "
    . "\nWHERE id='$parent1'";
        
$database->setQuery( $sql );
        
$rows1 = $database->loadResult();
if(!$rows1){
    $parent1 = "0";
    $menuname = "Main Menu";
} else {
    $menuname = $rows1;
}
        
$sql = "SELECT m.* FROM #__menu AS m"
    . "\nWHERE published=1 AND parent='$parent1' AND menutype='mainmenu'"
    . "\nORDER BY ordering";

$database->setQuery( $sql );

$rows = $database->loadObjectList( 'id' );
foreach ($rows as $p ) {
    $content = vert_submenu_list( $rows , $menuclass, $menuname );
    //echo "z";
}

function vert_submenu_list( $data , $class, $menuname ) {
global $Itemid;

/*$html = "<table><tr>
    <th valign=\"top\">$menuname Menu</th>
    </tr>";*/
$html = "<h3>$menuname Menu</h3><table border='0' cellpadding='0' cellspacing='0' width='100%'>";
foreach ($data as $v ) {
    if ($v->type != 'url') {
            $v->link .= "&amp;Itemid=$v->id";
        }
        //echo "$v->name";
        $theLink = str_replace('&amp;', '##########', $v->link);
        $theLink = str_replace('&', '&amp;', $theLink);
        $theLink = str_replace('##########', '&amp;', $theLink);
        $theLink = sefRelToAbs($theLink);
        
        
        $current_itemid = $Itemid;
        if ( !$current_itemid )
        {
            $id = '';
        }
        else if ( $current_itemid == $v->id )
        {
            $id = 'id="active_menu"';
        }
        else
        {
            $id = '';
        }
        
        
        $html = $html . "\n<tr align=\"left\"><td><a xhref=\"$theLink\" $id class=\"sublevel" . "$class\">$v->name</a></td></tr>";
    }
    $html = $html . "</table>";
    return $html;
}



?>

Este tutorial esta basado en un post recogido del foro oficial

Saludos.

***************************