PHP рдореЗрдВ рдкреЗрдбрд╝реЛрдВ рдкрд░ рдореЗрд░реА рдирдЬрд╝рд░

рдирдорд╕реНрддреЗ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВрдиреЗ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рд╕реЗ рдЗрд╕ рд╕рдВрджреЗрд╢ рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдореИрдВ рдЦреБрдж рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдПрдХ рд╕рдорд░реНрдердХ рдирд╣реАрдВ рдорд╛рдирддрд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрднреА-рдХрднреА рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреЗрдбрд╝ рдмрдирд╛рдирд╛ рдЧрд▓рдд рд╣реИ)ред
рдореИрдВ рдЯрд┐рдкреНрдкрдгреА рдкреЗрдбрд╝ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдореЗрдиреВ рдкреЗрдбрд╝ рдмрдирд╛рдКрдВрдЧрд╛ред рдореЗрдиреВ рдмрдирд╛рдиреЗ рдХрд╛ рдореЗрд░рд╛ рддрд░реАрдХрд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдФрд░ рдЯрд┐рдкреНрдкрдгреА рдЯреНрд░реА рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдПрдХ рдореЗрдиреВ рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рдмрдореЗрдирд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореЗрд░реА рдореЗрдиреВ рддрд╛рд▓рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдпрд╣ рд╣реИ:

m_Id
m_Position
m_LineId
m_ParentId
m_Type
m_Title
m_Description
m_Data


рдЬрдм рдореИрдВ рдПрдХ рдкреЗрдбрд╝ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдХреЗ рд╣реИрд░рд╛рди рдерд╛, рддреЛ рдореИрдВ рдЦреБрдж рдХреЗ рд▓рд┐рдП рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рдерд╛, рдореИрдВрдиреЗ рдЗрди рдЯреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдХреБрдЫ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рдереЗ, рдХрд┐рд╕реА рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЗрди рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЬреЛ рдореБрдЭреЗ рд╕реВрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рдереЗ, рдмрд╛рдХреА, рдкреЗрдбрд╝реЛрдВ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрдерд╛ рдХрд┐ рд╕рд┐рд░реНрдл 1 рдЕрдиреБрд░реЛрдз рдореЗрдВ рдПрдХ рдордирдорд╛рдирд╛ рд╡рд┐рд╢рд╛рд▓ рдкреЗрдбрд╝ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдерд╛ рдФрд░, рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ COUNT () рдФрд░ рдЕрдиреНрдп рдмрдХрд╡рд╛рд╕ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рд╡рд┐рдХреГрддрд┐ рдХреЗ рдмрд┐рдирд╛ред рдореИрдВ рд╕рдордп рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдореИрдВ рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХрд╛ рдХреЛрдб рджреВрдВрдЧрд╛, рдЬреЛ рдореЗрдиреНрдпреВ рдЯреНрд░реА рдмрдирд╛рддрд╛ рд╣реИ:
 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; } 


рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреИрд╕реЗ php рдХреЛрдб рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВред
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЧреЗрдЯрдореЗрдиреВ () рд╡рд┐рдзрд┐ рдЖрдкрдХреЛ рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдореЗрдиреВ рдЯреНрд░реА рдФрд░ рдореЗрдиреВ рджреЛрдиреЛрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдк рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ 0 рд╕реЗ рдЕрдирдВрдд рддрдХ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореЗрдиреВ рдЯреНрд░реА рдЗрд╕ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рдЧрд╣рд░рд╛рдИ рдХреЗ рд╕рд╛рде рд▓реЛрдб рд╣реЛрдЧрд╛ред

GetMenuPathTo () рд╡рд┐рдзрд┐ рдореЗрдиреВ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рд░рд╛рд╕реНрддрд╛ рдЦреЛрдЬрддреА рд╣реИ , рдЬрд┐рд╕рдХреА рдЖрдИрдбреА рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рд╕рд╛рдЗрдЯ рдкрд░ рдмреНрд░реЗрдбрдХреНрд░рдВрдм рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛

CommonUtils :: DelPrefix () рдЖрдкрдХреЛ рд╕рд╛рд╣рдЪрд░реНрдп рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рдЙрдкрд╕рд░реНрдЧреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдореЗрдиреВ рдЖрдЗрдЯрдо рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
CommonUtils :: ObjectFromArray () рдЗрд╕рдореЗрдВ рд╕реМрдВрдкреЗ рдЧрдП рд╡рд░реНрдЧ рдХреА рдПрдХ рд╡рд╕реНрддреБ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░рд┐рдд рд╕рд╛рд╣рдЪрд░реНрдп рд╕рд░рдгреА рдХреЗ рдореВрд▓реНрдпреЛрдВ рд╕реЗ рднрд░реА рдЬрд╛рдПрдЧреАред

рдореИрдВ рддрд░реНрдХ рдирд╣реАрдВ рджреЗрддрд╛, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЗрд╕ рдХреЛрдб рдХреЛ рдкрд╕рдВрдж рди рдХрд░реЗ, рд▓реЗрдХрд┐рди рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХреЗрд╡рд▓ 1 рдХреНрд╡реЗрд░реА рдХреЗ рд▓рд┐рдП рдореЗрдиреВ рдЯреНрд░реА рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╕рднреА рд╕рдлрд▓рддрд╛ред

рдЕрдкрдбреЗрдЯ : // рд╣рд░ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЬреЛ рд╢реИрд▓реА рдореЗрдВ рд╕реНрд╡рднрд╛рд╡ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ: "рдкреЗрдбрд╝ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП %% рдкрджреНрдзрддрд┐ рдирд╛рдо% рдХреНрдпреЛрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛", рдпрд╛ "рдХреНрдпреЛрдВ рдирд╣реАрдВ%%%%%?", рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ: рдкреЗрдбрд╝ рдмрдирд╛рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИред рдореИрдВ рдЕрдкрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд╛рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ% methodname% рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рдореЗрд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдФрд░ рдмрд┐рдирд╛ рдзреНрдпрд╛рди рджрд┐рдП рдирд╣реАрдВ рдЫреЛрдбрд╝реА рдЬрд╛рдПрдЧреАред

Source: https://habr.com/ru/post/In114573/


All Articles