OK, this is a small example:
===
The MySQL Dump of the database:
/*Table structure for table `MenuItemsTesting` */
DROP TABLE IF EXISTS `MenuItemsTesting`;
CREATE TABLE `MenuItemsTesting` (
`ID` int(10) unsigned NOT NULL auto_increment,
`ItemText` varchar(50) character set utf8 collate utf8_unicode_ci NOT
NULL,
`IsTopMenu` tinyint(1) default NULL,
`HasSubMenu` tinyint(1) default NULL,
`Link` varchar(255) character set utf8 collate utf8_unicode_ci default
NULL,
`ParentMenuID` int(10) unsigned default NULL,
`TopMenuOrder` int(10) unsigned default NULL,
UNIQUE KEY `ID` (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=120 DEFAULT CHARSET=latin1;
/*Data for the table `MenuItemsTesting` */
insert into
`MenuItemsTesting`(`ID`,`ItemText`,`IsTopMenu`,`HasSubMenu`,`Link`,`Pare\
ntMenuID`,`TopMenuOrder`) values (1,'Menu 1',1,0,'',0,1),(2,'Menu 1 Item
1',0,0,'',1,1),(3,'Menu 1 Item 2',0,0,'',1,2),(4,'Menu
2',1,0,'',0,2),(5,'Menu 2 Item 1',0,0,'',4,1),(6,'Menu 2 Item
2',0,0,'',4,2),(7,'Menu 2 Item 1',0,0,'',4,3),(8,'Menu
3',1,0,'',0,3),(9,'Menu 3 Item 1',0,0,'',8,1),(10,'Menu 3 Submenu
1',0,1,'',8,2),(11,'Menu 3 Submenu 1 Item 1',0,0,'',10,1),(12,'Menu 3
Submenu 1 Item 2',0,0,'',10,2);
===
On the PHP server I have the following setup for WebORB:
===
/WebORB/Services/WeborbTesting/VOs/Menu.php:
?php
class Menu
{
public $ID;
public $label;
public $ParentMenuID;
public $children;
function __construct()
{
$this-label = ;
$this-ParentMenuID = null;
$this-children = array();
}
}
?
===
/WebORB/Services/WeborbTesting/VOs/MenuItem.php:
?php
class MenuItem
{
public $ID;
public $label;
public $Link;
public $ParentMenuID;
function __construct()
{
$this-label = ;
$this-Link = ;
$this-ParentMenuID = null;
}
}
?
===
/WebORB/Services/WeborbTesting/MenusService.php:
?php
require_once VOs/MenuItem.php;
require_once VOs/Menu.php;
class MenusService
{
/**
* Get Menus
* @returns An Array of Menus
*/
function getMenus()
{
$menus = array();
$menuDB = new mysqli(myserver.com, user, password,
database);
if(!mysqli_connect_errno())
{
$query = SELECT * FROM MenuItemsTesting WHERE IsTopMenu=1
ORDER BY TopMenuOrder ASC;
$queryResult = $menuDB-query($query);
$menusArray = array();
if($queryResult-num_rows 0)
{
while ($row = $queryResult-fetch_assoc())
{
$menu = new Menu();
$menu-ID = (int)$row['ID'];
$menu-label = $row['ItemText'];
$menusArray[] = $menu;
}
}
foreach ($menusArray as $menu)
{
$menu = (object)$menu;
$query = select * from MenuItemsTesting WHERE
ParentMenuID= . $menu-ID . ORDER BY TopMenuOrder;
$queryResult = $menuDB-query($query);
if($queryResult-num_rows 0)
{
$menuItems = array();
while ($row = $queryResult-fetch_assoc())
{
if($row['HasSubMenu'])
{
$menuItem = new Menu();
$menuItem-ID = (int)$row['ID'];
$menuItem-label = $row['ItemText'];
$menuItem-ParentMenuID =
$row['ParentMenuID'];
$menuItem-children =
$this-getSubMenu($row['ID']);
}
else // Not a Sub Menu
{
$menuItem = new MenuItem();
$menuItem-ID = (int)$row['ID'];
$menuItem-label = $row['ItemText'];
$menuItem-ParentMenuID =
$row['ParentMenuID'];
$menuItem-Link = $row['Link'];
}
$menuItems[] = $menuItem;
}
$menu-children = $menuItems;
}
$menus[] = $menu;
}
}
return $menus;
} // End Function getMenus
function getSubMenu($parentMenuID)
{
$subMenuItemsArray = array();
$subMenuDB = new mysqli(myserver.com, user, password,
database);
$subMenuQuery = select * from MenuItemsTesting WHERE
ParentMenuID= . $parentMenuID . ORDER BY TopMenuOrder;
$subMenuQueryResult