Having trouble with a multidimensional array menu
| From: | Daevid Vincent | Date: | Thu, 19 Feb 2009 03:33:02 +0000 |
| Subject: | Having trouble with a multidimensional array menu | ||
| Groups: | php.general | ||
| Request: | Send a blank email to php-general+get-288587@lists.php.net to get a copy of this message | ||
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>