admin_pages_list[$parent_slug])) { $parent = $this->admin_pages_list[$parent_slug]; $link = &$parent["link"]; $parent_level = $link["level"]; $page_info = array( "level" => $parent_level + 1, "title" => $page_title, "function" => $function, "pages" => array(), "params" => $params, "hide" => $hide, "icon" => $icon, "slug" => $page_slug ); $link["pages"][$page_slug] = $page_info; $page_info["link"] = &$link["pages"][$page_slug]; } else { $page_info = array( "level" => 0, "title" => $page_title, "function" => $function, "pages" => array(), "params" => $params, "hide" => $hide, "icon" => $icon, "slug" => $page_slug ); $this->admin_pages[$page_slug] = $page_info; $page_info["link"] = &$this->admin_pages[$page_slug]; } $this->admin_pages_list[$page_slug] = $page_info; } // Проверить есть ли у страницы дочерний элемент по с нужной подстрокой public function admin_page_has_search($parent_slug, $search): bool { if(!$search) return true; $parent_page = $this->admin_pages_list[$parent_slug]; $parent_page_link = &$parent_page["link"]; if(mb_strpos(mb_strtolower($parent_page["title"]), mb_strtolower($search)) !== false) return true; return $this->admin_page_has_search_recurse($parent_page_link["pages"], $search); } // Рекурсивная функция проверки дочерних элементов для поиска подстроки private function admin_page_has_search_recurse($pages, $search): bool { foreach ($pages as $key => $page) { if(mb_strpos(mb_strtolower($page["title"]), mb_strtolower($search)) !== false) return true; $result = $this->admin_page_has_child_recurse($page["pages"], $search); if($result === true) return true; } return false; } // Проверить есть ли у страницы дочерний элемент public function admin_page_has_child($parent_slug, $page_slug): bool { $parent_page = &$this->admin_pages_list[$parent_slug]["link"]; if($parent_slug == $page_slug) return true; return $this->admin_page_has_child_recurse($parent_page["pages"], $page_slug); } // Рекурсивная функция проверки дочерних элементов private function admin_page_has_child_recurse($pages, $page_slug): bool { foreach ($pages as $key => $page) { if($key === $page_slug) return true; $result = $this->admin_page_has_child_recurse($page["pages"], $page_slug); if($result === true) return true; } return false; } // Отрисовка страницы в админ панели public function admin_page_render($slug, $dive = false): bool { $page = $this->admin_pages_list[$slug]; if(!isset($page)) return false; $link = &$page["link"]; if($page["level"] == 0 && $dive === true) return $this->admin_page_render(array_shift($link["pages"])["slug"]); if(is_callable($page["function"])) { $page["function"](); return true; } $func_name = $page["function"]; $func_body = $GLOBALS[$func_name]; $func_body(); return true; } }