Быстрая CMS
Обратная связь Карта сайта
Главная Создание сайтов Практика Строим CMS Наивное О проекте Блог

Выборка разделов для меню

Чтобы выбрать из массива разделов нужные элементы для меню, не обязательно перебирать массив в цикле. В php очень хорошая библиотека для работы с массивами, в ней есть функция фильтрации array_filter(). В качестве параметров ей нужно передать массив и название пользовательской функции, в которой задано условие фильтрации. В качестве параметра эти функции получают текущий элемент массива, а возвращать должны логическое значение (соответствует ли элемент условию фильтрации). Нам нужно только написать эти функции для трех случаев:

  1. Выборка всех разделов верхнего уровня;
  2. Выборка подразделов данного раздела ;
  3. Выборка подразделов того же раздела, которому принадлежит текущий

Первая функция нужна нам всегда, поскольку главное меню есть на каждой странице. Ее задача – фильтрация разделов по признаку пустого элемента 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 – алиас «родительского» раздела.