Я пытаюсь создать новое меню для моего сайта, чтобы использовать SEO дружественные URL-адреса вместо идентификаторов страниц, однако я столкнулся с проблемой создания меню динамически.
Ранее наше меню создавалось с использованием рекурсивной функции MySQL, которая собирала все содержимое и рекурсивно создавала меню, добавляя его в html, где это необходимо, и выводя результаты, однако на этот раз мне бы хотелось, чтобы PHP и массив генерировали меню.
По сути, я извлекаю все страницы из базы данных и вставляю их в массив, который вызывается $ this-> ApplicationPages, однако с функцией ниже я сталкиваюсь с двумя проблемами.
выпуск 1
Я могу пройти только 2 уровня, так как мне нужно иметь возможность пройти столько уровней, сколько в базе данных.
Например, с помощью функции ниже я могу получить только «Parent> Child», тогда как мне нужно иметь возможность перейти к «Parent> Child> Child> Child».
выпуск 2
Со старой функцией mysql я имел обыкновение подсчитывать, сколько будет детей, и если бы там были дети, он создавал бы меню с выпадающим меню, если нет, то создавал бы меню как простую ссылку.
Это возможно с массивами? если так, как я могу достигнуть этого?
Функция в вопросе.
function BuildMenu(){
function ChildMenu($Pages,$parent){
$tree=null;
$tree .= "<ul class='dropdown-menu'>";
for($i = 0; $i < count($Pages); $i++) {
if($Pages[$i]['page_parent'] == $parent){
$tree .= "<li><a href='" . $Pages[$i]['page_slug'] . "' title=''>" . $Pages[$i]['page_title'] . "</a></li>";
}
}
$tree .= "</ul>";
return $tree;
}
function ParentMenu($Pages){
$tree=null;
for($i = 0; $i < count($Pages); $i++) {
if($Pages[$i]['page_parent'] == 0 AND $Pages[$i]['page_disablemenu'] <> 'yes'){
$tree .= "<li class='dropdown'>";
$tree .= "<a data-toggle='dropdown' href='" . $Pages[$i]['page_slug'] . "' title=''>" . $Pages[$i]['page_title'] . "<span class='caret'></span></a>";
$tree .= ChildMenu($Pages,$Pages[$i]['page_idno']);
$tree .= "</li>";
}
}
return $tree;
}
return ParentMenu($this->ApplicationPages);
}
Таблица в настоящее время выглядит следующим образом
page_idno | page_slug | название_страницы | page_parent
1 | test | Test | 0
2 | test2 | Test 2 | 1
Задача ещё не решена.
Других решений пока нет …