Выборка разделов для меню
Чтобы выбрать из массива разделов нужные элементы для меню, не обязательно перебирать массив в цикле. В php очень хорошая библиотека для работы с массивами, в ней есть функция фильтрации array_filter(). В качестве параметров ей нужно передать массив и название пользовательской функции, в которой задано условие фильтрации. В качестве параметра эти функции получают текущий элемент массива, а возвращать должны логическое значение (соответствует ли элемент условию фильтрации). Нам нужно только написать эти функции для трех случаев:
- Выборка всех разделов верхнего уровня;
- Выборка подразделов данного раздела ;
- Выборка подразделов того же раздела, которому принадлежит текущий
Первая функция нужна нам всегда, поскольку главное меню есть на каждой странице. Ее задача – фильтрация разделов по признаку пустого элемента parent. Вызов array_filter() с этой функцией вернет нам массив, состоящий из разделов верхнего уровня.
<?php
function getmain ($var) {
return ($var['parent']==='');
}
?>
Вторая функция нужна в том случае, когда мы находимся в разделе верхнего уровня и выбираем его подразделы для формирования локального меню раздела.
<?php
function getsub($var) {
global $knot;
return ($var['parent']===$knot);
}
?>
Но если мы находимся в подразделе, то локальное меню раздела состоит из подразделов с тем же предком, что и у текущего подраздела.
<?php
function getlevel($var) {
global $parent;
return ($var['parent']===$parent);
}
?>
Функции для фильтрации готовы. Теперь с их помощью можно получить список разделов для формирования любого меню. Но это лишь выборка разделов. Для сборки строк меню нам нужно сформировать ссылки из наименований и алиасов выбранных разделов. Собрать реальную динамическую ссылку достаточно просто: есть алиас раздела, который будет параметром для основного скрипта, и есть наименование раздела. Для того, чтобы собрать псевдостатическую ссылку, нам нужны правила преобразования.
Вариантов таких ссылок может быть несколько.
В простейшем случае cсылка может быть представлена как имя файла с расширением или без расширения – в этом случае именем файла будет алиас раздела, а нужное расширение (возможно и пустое, т.е. никакого расширения) скрипт должен к нему дописать.
Более сложный случай, когда ссылка формируется как путь по каталогам:
http://domain.ru/page/ – здесь page – алиас раздела верхнего уровня;
http://domain.ru/parent/page/ – в этом примере page – алиас раздела нижнего уровня, а parent – алиас «родительского» раздела.

