Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/02/2012, 11:37
50l3r
Invitado
 
Mensajes: n/a
Puntos:
Crear un menu dinamico de 3 niveles

Saludos

Veran, tengo que generar un array, que imite la siguiente estructura html:

Código HTML:
Ver original
  1. <div class="menu-header">
  2.             <ul class="topmenu">
  3.                 <li class="parent first current-menu-item"><a href="#"><span>Sliders</span></a>
  4.                     <ul class="sub-menu">
  5.                         <li class="first"><a href="index.html"><span>Main slider</span></a></li>
  6.                         <li><a href="index-slider-images.html"><span>Nivo slider</span></a></li>
  7.                         <li><a href="index-slider-text.html"><span>Text / Video slider</span></a></li>                        
  8.                     </ul>
  9.                 </li>
  10.                 <li class="parent"><a href="#"><span>Pages</span></a>
  11.                     <ul class="sub-menu">
  12.                         <li class="first"><a href="page-sidebar-r.html"><span>Pages with Sidebar</span></a></li>
  13.                         <li class="parent"><a href="#"><span>Portfolio pages</span></a>
  14.                             <ul class="sub-menu">
  15.                                 <li class="first"><a href="portfolio.html"><span>1 column with Sidebar</span></a></li>
  16.                                 <li><a href="portfolio-2cols.html"><span>2 columns with Sidebar</span></a></li>
  17.                                 <li><a href="portfolio-3cols.html"><span>3 columns Full Width</span></a></li>
  18.                                 <li class="last"><a href="portfolio-4cols.html"><span>4 columns Full Width</span></a></li>
  19.                              </ul>
  20.                         </li>
  21.                         <li class="last"><a href="page-pricing.html"><span>Pricing page</span></a></li>
  22.                     </ul>
  23.               </li>
  24.               <li class="last"><a href="contacts.html"><span>Contact</span></a></li>
  25.           </ul>
  26.         </div>

Para ello me he creado este array:

Código PHP:
$config['menu'] = array(
    
=> array(
        
'ItemText' => 'Sliders',
        
'ItemLink' => 'sliders',
        
'ParentID' => null,
    ),

    
=> array(
        
'ItemText' => 'Pages',
        
'ItemLink' => 'pages',
        
'ParentID' => null,
    ),
    
    
=> array(
        
'ItemText' => 'Pages with Sidebar',
        
'ItemLink' => 'sidebar',
        
'ParentID' => 2,
    ),
    
    
=> array(
        
'ItemText' => 'Portfolio Pages',
        
'ItemLink' => 'sidebar',
        
'ParentID' => 2,
    ),
    
    
=> array(
        
'ItemText' => '1 Column with SIdebar',
        
'ItemLink' => 'gamerack',
        
'ParentID' => 4,
    ),
    
    
=> array(
        
'ItemText' => 'Contact',
        
'ItemLink' => 'contacto',
        
'ParentID' => null,
    ),
); 
No esta completo, pero tiene una estructura buena para visualizar todo.


Lo que necesito, es poder emular con los datos que brindo en el array, la estructura anterior. Para ello he creado este proceso:

Código PHP:
foreach ($menu as &$menuItem){$menuItem['Children'] = array();} //Asignamos hijos vacios
                                
                                
$contachild=0;
                                foreach (
$menu as $ID => &$menuItem){ //Añadimos los hijos a los padres
                                    
if ($menuItem['ParentID'] != null){
                                        
                                        
$menu[$menuItem['ParentID']]['Children'][$contachild] = &$menuItem;$contachild++;
                                    }
                                }

                                foreach (
array_keys($menu) as $ID){ //Eliminamos los hijos
                                    
if ($menu[$ID]['ParentID'] != null){unset($menu[$ID]);}
                                }
                                
                                
$contamenu 0;
                                foreach (
$menu as $Itemmenu){
                                    
$contamenu++; $class "";
                                    if(
$contamenu==1){$class="first";}
                                    if(
count($Itemmenu['Children'])>0){$class+=" parent";}
                                        echo 
"<li class='".$class."'>";
                                        echo 
"<a href='".base_url($Itemmenu['ItemLink'])."'><span>".strip_tags($Itemmenu['ItemText'])."</span></a>";
                                        
                                        if(
count($Itemmenu['Children'])>0){
                                            
$contasubmenu 0;
                                            for(
$i=0;$i<count($Itemmenu['Children']);$i++){
                                                
$contasubmenu++;$subclass="";
                                                if(
$contasubmenu==1){echo "<ul class='sub-menu'>";$subclass="first";}
                                                echo 
"<li class='".$subclass."'>";
                                                echo 
"<a href='".base_url($Itemmenu['Children'][$i]['ItemLink'])."'><span>".strip_tags($Itemmenu['Children'][$i]['ItemText'])."</span></a>";
                                                
//echo var_dump($Itemmenu['Children']);
                                                
echo "</li>";
                                            }
                                            if(
$contasubmenu>0){echo "</ul>";}
                                        }
                                        echo 
"</li>";
                                } 
He realizado algo mal, creo que al asignar los hijos solo asigna los del segundo nivel.

Alguien me puede hechar una mano?