Недавно я написал рекурсивную функцию PHP, которая генерирует навигацию по сайту на основе структуры типа «родители-потомки», как это
<ul>
<li>parent
<li>child</li>
</li>
</ul>
Код выглядит так
function generateMenu($parent, $level, $db){
$q = $db->query("select id, name FROM menu WHERE parent = '$parent'");
if($level > 0 && $q->num_rows > 0) echo "\n<ul>\n";
while($row=$q->fetch_object()){
echo "<li>";
echo '<a href="?page=' .$page. '">' . $row->name . '</a>';
//display this level's children
generateMenu($row->id, $level++, $menu, $db);
echo "</li>\n\n";
}
if($level > 0 && $q->num_rows > 0) echo "</ul>\n";
}
Часть кода выше просто повторяет структуру <ul><li>
(как в приведенном выше примере) из таблицы БД.
Теперь возникает вопрос, как создать меню навигации, как на этом сайте?
Пожалуйста, посмотрите на левую боковую панель.
http://www.smithsdetection.com/continuous_vapour_sampling.php
Теперь я думаю, что:
- Прежде всего, мы должны повторить все родители
- Функция должна получить идентификатор текущей страницы в качестве входного значения (например, $ current)
- Функция должна отображать текущий уровень страниц
Я не могу понять, как изменить мою функцию, чтобы получить результат, как на данном сайте. Пожалуйста, помогите.
КСТАТИ
Моя таблица БД выглядит так
ПРИМЕЧАНИЕ Пожалуйста, не публикуйте ответы о дырах в SQL-инъекциях, я уже позаботился о них: проверка с помощью in_array (если переменная указана в массиве имен столбцов) и прохождение через real_escape.