Рекурсивное построение меню страницы из массива в пределах одной и той же функции

Я пытаюсь создать новое меню для моего сайта, чтобы использовать 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

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]