I'm trying to build a multi-array menu (but open to using classes or
something if that makes this easier).
Does anyone have a solution already working?

I'm very close, but I can't seem to get my "directories" to work and I
end up with extraneous <ul> blocks.

here's what I need to re-create:

<div class = "portlet nav closed">
        <div class="header"><h2>Admin</h2></div>
        <div class="content">
                <ul class="navTree">

                        <li class="directory collapsed"><a href="" 
class="toggle">Users</a>
                                <ul  class="navTree toggleClosed">
                                        <li class="file ext_txt"><a 
href="operators">Roles</a></li>
                                        <li class="file ext_txt"><a 
href="operators">Report</a></li>
                                </ul>
                        </li>

                        <li class="directory collapsed"><a href=""
class="toggle">Aircraft</a>
                                <ul  class="navTree toggleClosed">
                                        <li class="file ext_txt"><a 
href="operators">Admin</a></li>
                                        <li class="file ext_txt"><a 
href="operators">Search</a></li>
                                        <li class="file ext_txt"><a 
href="operators">Audit</a></li>
                                </ul>
                        </li>

                        <li class="directory collapsed"><a href="" 
class="toggle">Data</a>
                                <ul  class="navTree toggleClosed">
                                        <li class="file ext_txt"><a
href="operators">Airline/Aircraft</a></li>
                                        <li class="directory collapsed"><a 
href="" class="toggle">Fault
Logs</a>
                                                <ul  class="navTree 
toggleClosed">
                                                        <li class="file 
ext_txt"><a href="operators">Daily</a></li>
                                                        <li class="file 
ext_txt"><a href="operators">One Day</a></li>
                                                </ul>
                                        </li>
                                        <li class="file ext_txt"><a 
href="operators">Duplicate Fault
Log</a></li>
                                </ul>
                        </li>

                        <li class="file ext_txt"><a 
href="operators">News</a></li>

                </ul>
        </div>
</div>

Here's my array (basically):

$navArray['admin'] = array ('alt' => 'Administration',
                                                         'title' => 
'Administration',
                                                         'description' => 
'Administration Tools and Links',
                                                         'headline' => true,
                                                         'users' => array 
('alt' => 'Users',
                                                                                
                  'title' => 'Users',
                                                                                
                  'description' => 'Users',
                                                                                
                  'panasonic_only' => true),
                                                         'aircraft' => array 
('alt' => 'Aircraft',
                                                                                
                  'title' => 'Aircraft',
                                                                                
                  'description' => 'Aircraft',
                                                                                
                  'panasonic_only' => true),
                                                         'logs' => array ('alt' 
=> 'Fault Logs',
                                                                                
                  'title' => 'Fault Logs',
                                                                                
                  'description' => 'Fault Logs',
                                                                                
                  'panasonic_only' => true),
                                                         'airline' => array 
('alt' => 'Airline/Aircraft',
                                                                                
                  'title' => 'Airline/Aircraft',
                                                                                
                  'description' => 'Airline/Aircraft',
                                                                                
                  'page' => 'XXXXX.php',
                                                                                
                  'panasonic_only' => true),
                                                         'news' => array ('alt' 
=> 'News',
                                                                                
                  'title' => 'News',
                                                                                
                  'description' => 'News',
                                                                                
                  'page' => 'XXXXX.php',
                                                                                
                  'panasonic_only' => true)
);

$navArray['admin']['users']['roles'] =  array ('alt' => 'Roles',
                                                                                
          'title' => 'Roles',
                                                                                
          'description' => 'Roles',
                                                                                
          'page' => 'XXXXX.php',
                                                                                
          'panasonic_only' => true);
$navArray['admin']['users']['report'] =  array ('alt' => 'Report',
                                                                                
          'title' => 'Report',
                                                                                
          'description' => 'Report',
                                                                                
          'page' => 'XXXXX.php',
                                                                                
          'panasonic_only' => true);

$navArray['admin']['aircraft']['admin'] =  array ('alt' => 'Admin',
                                                                                
          'title' => 'Admin',
                                                                                
          'description' => 'Admin',
                                                                                
          'page' => 'XXXXX.php',
                                                                                
          'panasonic_only' => true);
$navArray['admin']['aircraft']['search'] =  array ('alt' => 'Search',
                                                                                
          'title' => 'Search',
                                                                                
          'description' => 'Search',
                                                                                
          'page' => 'XXXXX.php',
                                                                                
          'panasonic_only' => true);
$navArray['admin']['aircraft']['audit'] =  array ('alt' => 'Audit',
                                                                                
          'title' => 'Audit',
                                                                                
          'description' => 'Audit',
                                                                                
          'page' => 'XXXXX.php',
                                                                                
          'panasonic_only' => true);

$navArray['admin']['logs']['daily'] =  array ('alt' => 'Daily',
                                                                                
          'title' => 'Daily',
                                                                                
          'description' => 'Daily',
                                                                                
          'page' => 'XXXXX.php',
                                                                                
          'panasonic_only' => true);
$navArray['admin']['logs']['day'] =  array ('alt' => 'One Day',
                                                                                
          'title' => 'One Day',
                                                                                
          'description' => 'One Day',
                                                                                
          'page' => 'XXXXX.php',
                                                                                
          'panasonic_only' => true);
$navArray['admin']['logs']['dupes'] =  array ('alt' => 'Duplicate
Faults',
                                                                                
          'title' => 'Duplicate Faults',
                                                                                
          'description' => 'Duplicate Faults',
                                                                                
          'page' => 'XXXXX.php',
                                                                                
          'panasonic_only' => true);

And here's my recursive function:

function multiArray2MenuTree( $menu, $indent = 0, $sub = false )
{
    if (!is_array($menu)) return false;

    echo str_repeat("\t",$indent)."   <ul class=\"navTree toggleClosed
\">\n";
    foreach ($menu as $key => $value)
    {
        //echo "<b>$key</b> = $value<br/>\n";

                if (is_array($value))
        {
            echo str_repeat("\t",$indent+1).'<li id="'.$key.'"
class="file ext_txt"><a
href="'.$value['page'].'">'.$value['alt']."</a>\n";
            echo multiArray2MenuTree($value, $indent+1, true);
            echo str_repeat("\t",$indent+1)."</li>\n";
        }
        elseif ($key == 'alt' && !$sub)
           echo str_repeat("\t",$indent+1).'<li id="'.$key.'"
class="directory collapsed"><a href="#"
class="toggle">'.$value['alt']."</a></li>\n";
    }
    echo str_repeat("\t",$indent)."   </ul>\n";
}

multiArray2MenuTree($navArray);

and the output of that:

        <li id="admin" class="file ext_txt"><a href="">Administration</a>
           <ul class="navTree toggleClosed">
                <li id="users" class="file ext_txt"><a href="">Users</a>
                   <ul class="navTree toggleClosed">
                        <li id="roles" class="file ext_txt"><a 
href="XXXXX.php">Roles</a>
                           <ul class="navTree toggleClosed">
                           </ul>
                        </li>
                        <li id="report" class="file ext_txt"><a 
href="XXXXX.php">Report</a>
                           <ul class="navTree toggleClosed">
                           </ul>
                        </li>
                   </ul>
                </li>
                <li id="aircraft" class="file ext_txt"><a href="">Aircraft</a>
                   <ul class="navTree toggleClosed">
                        <li id="admin" class="file ext_txt"><a 
href="XXXXX.php">Admin</a>
                           <ul class="navTree toggleClosed">
                           </ul>
                        </li>
                        <li id="search" class="file ext_txt"><a 
href="XXXXX.php">Search</a>
                           <ul class="navTree toggleClosed">
                           </ul>
                        </li>
                        <li id="audit" class="file ext_txt"><a 
href="XXXXX.php">Audit</a>
                           <ul class="navTree toggleClosed">
                           </ul>
                        </li>
                   </ul>
                </li>
                <li id="logs" class="file ext_txt"><a href="">Fault Logs</a>
                   <ul class="navTree toggleClosed">
                        <li id="daily" class="file ext_txt"><a 
href="XXXXX.php">Daily</a>
                           <ul class="navTree toggleClosed">
                           </ul>
                        </li>
                        <li id="day" class="file ext_txt"><a 
href="XXXXX.php">One Day</a>
                           <ul class="navTree toggleClosed">
                           </ul>
                        </li>
                        <li id="dupes" class="file ext_txt"><a 
href="XXXXX.php">Duplicate
Faults</a>
                           <ul class="navTree toggleClosed">
                           </ul>
                        </li>
                   </ul>
                </li>
                <li id="airline" class="file ext_txt"><a
href="XXXXX.php">Airline/Aircraft</a>
                   <ul class="navTree toggleClosed">
                   </ul>
                </li>
                <li id="news" class="file ext_txt"><a href="XXXXX.php">News</a>
                   <ul class="navTree toggleClosed">
                   </ul>
                </li>
           </ul>
        </li>

Reply via email to