Skip to content

Instantly share code, notes, and snippets.

@Djuki
Last active December 15, 2015 07:38
Show Gist options
  • Save Djuki/5224483 to your computer and use it in GitHub Desktop.
Save Djuki/5224483 to your computer and use it in GitHub Desktop.
Proper way to print root menu items and child menu items in separated div's.
<?php
$menu = array(
0 => array('display' => 'Writers', 'url' => 'http://www.famousauthors.org/', 'sub' => array(
array('display' => ' Alan Moore', 'url' =>'http://www.famousauthors.org/alan-moore'),
array('display' => ' Dan Brown', 'url' =>'http://www.famousauthors.org/dan-brown'),
array('display' => ' Mario Puzo', 'url' =>'http://www.famousauthors.org/mario-puzo'),
)),
1 => array('display' => 'Musicians', 'url' => 'http://www.thefamouspeople.com/musicians.php', 'sub' => array(
array('display' => ' Composer', 'sub' => array(
array('display' => 'Cesar Franck ', 'url' =>'http://www.thefamouspeople.com/profiles/cesar-franck-403.php'),
array('display' => 'Clara Wieck Schumann', 'url' =>'http://www.thefamouspeople.com/profiles/clara-wieck-schumann-393.php'),
)),
array('display' => 'Singers', 'sub' => array(
array('display' => 'Pop Music', 'sub' => array(
array('display' => 'Beyonce Knowles', 'url' =>'http://top40.about.com/od/artistsac/p/beyonce.htm'),
array('display' => 'Robbie Williams', 'url' =>'http://top40.about.com/od/artistsls/p/robbiewilliams.htm'),
)),
array('display' => 'Rock Music', 'sub' => array(
array('display' => 'Axle Rose', 'url' =>'http://www.mademan.com/mm/10-most-famous-rock-musicians-ever.html#vply=0'),
array('display' => 'Ozzy Osborne', 'url' =>'http://www.mademan.com/mm/10-most-famous-rock-musicians-ever.html#vply=0'),
)),
)),
)),
2 => array('display' => 'Contact Us', '#contact'),
);
<?php
class MenuView
{
/**
* Get Just Main Categories
* @param $menu
* @return string
*/
static public function getMainCategories($menu)
{
$html = "\n\t".'<ul>';
foreach ($menu as $menuRow)
{
$html .= self::getMenuItem($menuRow);
}
$html .= "\n\t".'</ul>'."\n";
return $html;
}
/**
* Get Main Categories Item
* @param $item
* @return string
*/
static public function getMenuItem($item)
{
$html = "\n\t".'<li> ';
if (isset($item['url'])) $html .= '<a href="'.$item['url'].'">';
$html .= $item['display'];
if (isset($item['url'])) $html .= '</a>';
$html .= '</li>'."\n";
return $html;
}
/**
* Check has menu item it's Child Menu
* @param $menuItem
* @return bool
*/
static public function hasChild($menuItem)
{
return isset($menuItem['sub']);
}
/**
* Get Separated Menu Item For Submenu
* @param $menu
* @param int $level
* @return string
*/
static public function getSubMenu($menu, $level = 1)
{
$printMenu = self::isFirstSubmenuLevel($level) ? "\n\t".'<ul class="submenu">' : "\n\t".'<ul>';
foreach ($menu as $menu_item)
{
$printMenu .= "\n\t".'<li>';
if (isset($menu_item['url'])) $printMenu .= '<a href="'.$menu_item['url'].'">';
$printMenu .= $menu_item['display'];
if (isset($menu_item['url'])) $printMenu .= '</a>';
if (isset($menu_item['sub']))
{
$printMenu .= self::getSubMenu($menu_item['sub'], $level + 1);
}
$printMenu .= '</li>'."\n";
}
$printMenu .= '</ul>'."\n";
return $printMenu;
}
/**
* Is level appropriate for first sub-menu level
* @param $level
*
* @return bool
*/
static private function isFirstSubmenuLevel($level)
{
return $level <= 1;
}
}
<div id="mainCategories">
<ul>
<li> <a href="http://www.famousauthors.org/">Writers</a></li>
<li> <a href="http://www.thefamouspeople.com/musicians.php">Musicians</a></li>
<li> Contact Us</li>
</ul>
</div>
<div id="subMenus">
<ul class="submenu">
<li><a href="http://www.famousauthors.org/alan-moore"> Alan Moore</a></li>
<li><a href="http://www.famousauthors.org/dan-brown"> Dan Brown</a></li>
<li><a href="http://www.famousauthors.org/mario-puzo"> Mario Puzo</a></li>
</ul>
<ul class="submenu">
<li> Composer
<ul>
<li><a href="http://www.thefamouspeople.com/profiles/cesar-franck-403.php">Cesar Franck </a></li>
<li><a href="http://www.thefamouspeople.com/profiles/clara-wieck-schumann-393.php">Clara Wieck Schumann</a></li>
</ul>
</li>
<li>Singers
<ul>
<li>Pop Music
<ul>
<li><a href="http://top40.about.com/od/artistsac/p/beyonce.htm">Beyonce Knowles</a></li>
<li><a href="http://top40.about.com/od/artistsls/p/robbiewilliams.htm">Robbie Williams</a></li>
</ul>
</li>
<li>Rock Music
<ul>
<li><a href="http://www.mademan.com/mm/10-most-famous-rock-musicians-ever.html#vply=0">Axle Rose</a></li>
<li><a href="http://www.mademan.com/mm/10-most-famous-rock-musicians-ever.html#vply=0">Ozzy Osborne</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div id="mainCategories">
<?= MenuView::getMainCategories($menu);?>
</div>
<div id="subMenus">
<?php foreach ($menu as $item) : ?>
<?php if (MenuView::hasChild($item)): ?>
<?= MenuView::getSubMenu($item['sub']) ?>
<?php endif ?>
<?php endforeach; ?>
</div>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment