m_Id
m_Position
m_LineId
m_ParentId
m_Type
m_Title
m_Description
m_Data
class MenuFactory extends BaseClass { /** * * var mixed */ public $MenuTree; /** * * @var mixed , .. , */ public $MenuList; private $level=0; /** * * @param int Id * @param int/bool bool==true - , . , * @return mixed */ public function GetMenu($menu_id, $return_as_list = false) { // $this->sql->Query("SELECT * FROM `menus` WHERE `m_LineId`=?d ORDER BY m_Position, m_ParentId", $menu_id); // $this->MenuList = array(); $ml = array(); while($r = $this->sql->Assoc()) { // MenuItem $m = CommonUtils::ObjectFromArray('MenuItem', CommonUtils::DelPrefix($r,'m_')); // $this->MenuList[] = $m; // , $ml[] = clone $m; } // $return_as_list == true if(is_bool($return_as_list) && $return_as_list) { return $this->MenuList; } // , $return_as_list == false else if(!$return_as_list) { $this->MenuTree = array(); $this->MenuTree = $this->GetMenuChilds(0,$ml); return $this->MenuTree; } // , $return_as_list == , , else if(is_numeric($return_as_list)) { $this->MenuTree = array(); $this->MenuTree = $this->GetMenuChilds(0,$ml, $return_as_list); return $this->MenuTree; } //print_r($this->menuTree); } /** * * @param int $p_id Id * @param mixed $menuList , * @param int $levels * @return mixed */ private function GetMenuChilds($p_id, $menuList, $levels = null) { // , $a = array(); // foreach($menuList as $item) { //TODO: Optimize code // ParentId id, // , . if($item->ParentId == $p_id) { $this->level++; // $levels , $this->levels, // , $levels if($levels != null && $this->level <= $levels) { // . // $this->MenuList , ParentId id , // , $item->ChildMenus = $this->GetMenuChilds($item->Id, $menuList, $levels); // $this->level $item->Level = $this->level; // $a[] = $item; } else { // $this->MenuList $item->ChildMenus = $this->GetMenuChilds($item->Id, $menuList); $item->Level = $this->level; } $this->level--; // $levels , ParentId , // , if($levels == null) { $a[] = $item; } } } // return $a; } /** * * @return mixed */ public function GetMenuList() { return $this->MenuList; } /** * * @param int $menu_id Id , * @return mixed */ public function GetMenuPathTo($menu_id) { // , // , . $a = array(); for($i=0; $i<count($this->MenuList); $i++) { // id id if($this->MenuList[$i]->Id == $menu_id) { // $a[] = $this->MenuList[$i]; // , , // $menu_id , id $menu_id = $this->MenuList[$i]->ParentId; // , ) $i=-1; } } // -> , // , : -> return array_reverse($a); } /** * * @param int $menu_id Id , * @return MenuItem */ public function GetMenuById($menu_id) { $this->sql->Query("SELECT * FROM `menus` WHERE `m_Id`=?d LIMIT 1", $menu_id); $record = $this->sql->Assoc(); if($record) { $record = CommonUtils::DelPrefix($record,'m_'); return CommonUtils::ObjectFromArray('MenuItem', $record); } return null; } }
class MenuItem { public $Id; public $Position; public $ParentId; public $LineId; public $Type; public $Title; public $Description; public $Data; public $Level; public $ChildMenus; }
Source: https://habr.com/ru/post/114573/