I try to implements @Tomas answer on this question > PHP foreach create menu from array
I have Model below:
<?php
class Menu_model extends CI_Model{
function __construct(){
parent::__construct();
$this->load->database();
}
function getCategory($lang){
$sql = "SELECT * FROM category WHERE category.lang='".mysql_real_escape_string($lang)."'";
$result = $this->db->query($sql);
return $result;
}
function getSubCategory($lang){
$sql = "SELECT * FROM subcategory WHERE subcategory.lang='".mysql_real_escape_string($lang)."'";
$result = $this->db->query($sql);
return $result;
}
}
?>
Then I use this Controller to throw the data:
<?php
$_SESSION['lang'] = 'EN';
class Home extends CI_Controller {
function __construct(){
parent::__construct();
$this->load->database();
$this->load->model("menu_model");
}
public function index()
{
$data["category"] = $this->menu_model->getCategory($_SESSION['lang']);
$data["subcategory"] = $this->menu_model->getSubCategory($_SESSION['lang']);
$this->load->view('leftmenu_view',$data);//Left Menu
}
}
This is my view to display the menu:
<?php
foreach($category->result() as $menu){
echo "<li><a class=\"sf-with-ul\" href=\"category/".$menu->urlcategory."\">".$menu->namecategory."</a></li>";
foreach($subcategory->result() as $key=>$submenu){
if ($menu->idcategory == $submenu->idcategory){
if ($key > 0){
echo "</li>";
}
echo "<ul class=\"sub-menu\"><a href=\"category/".$submenu->urlsubcategory."\">".$submenu->namesubcategory."</a><li>";
}
}
}
?>
The single menu works good on loops, but when the menu have submenu, the loops become false in structure.
ul
li-a--Single Menu--/a-/li ->Have no SubMenu, Works Good
li-a--Single Menu--/a-/li ->Have no SubMenu, Works Good
li-a--Single Menu--/a-/li ->Have SubMenu, False Structure
ul-class=submenu
a-Sub Menu-/a
li--/li
ul-class=submenu
a-Sub Menu-/a
li--/li
/ul
ul
The menu structure should become like this:
ul
li-a--Single Menu--/a-/li
li-a--Single Menu--/a-/li
li-a-Single Menu With Sub Menu-/a-/li
ul-class=submenu
li-a-Sub Menu-/a-/li
li-a-Sub Menu-/a-/li
li-a-Sub Menu-/a-/li
/ul
li-a--Single Menu--/a-/li
li-a--Single Menu--/a-/li
ul

$data["category"]? Just make sure your$menu->namesubcategorymay not be NULL