Вывод родительских разделов меню и главной страницы
Пользователь щелкнул на одном из разделов сайта. Далее поворот событий
зависит от того, есть ли у раздела подразделы. Если подразделов нет, то
будут выведены название раздела, список страниц и информация о разделе (как
мы помним, поле txt таблицы cats может содержать произвольный HTML-
код), все это изображено на рис. 14.6.
Если же в разделе есть подразделы, то будет выведен список подразделов и
информация о разделе. На рис. 14.7 информация о разделе не заполнена.
Обычно, если у раздела есть подразделы, то такой раздел не содержит
страниц. Не нужно представлять разделы сайта, как каталоги файловой системы,
а страницы — как файлы. Ведь в каталогах могут быть как подкаталоги, так
и файлы. В случае с разделами сайта все иначе. Предположим, вы делаете
каталог продукции фирмы. У вас есть раздел «Процессоры», а в нем три
подраздела— «Процессоры AMD», «Процессоры Intel» и «Процессоры прочие».
Следовательно, все страницы, описывающие процессоры разных
производителей, будут помещены в один из этих подразделов. Иного не дано. Поэтому
если раздел содержит подразделы, то не нужно искать в базе данных
страницы, которые относятся к данному разделу. Хотя вы можете немного
модифицировать код CMS (он будет представлен далее), чтобы разделы и страницы
сайта были похожи на файлы и каталоги файловой системы.
172
Часть IV. Разработка собственной CMS
Рис. 14.6. Вывод содержимого раздела
Рис. 14.7. Вывод раздела,
содержащего подразделы
Когда же пользователь откроет страницу, меню станет иерархическим
(рис. 14.8), т. е. будут отображены разделы и подразделы (если это нужно),
а также содержимое последнего активного раздела/подраздела. До этого
отображать иерархию меню нет смысла— зачем выводить лишнюю
информацию?
Глава 14. Реализация основных функций CMS
173
Рис. 14.8. Иерархическое меню сайта
14.5.2. Сценарий menu.php
Теперь, когда нам ясен алгоритм работы меню, напишем сценарий menu.php,
который будет его выводить. Отдельный сценарий нужен, чтобы не
перегружать основной файл CMS — index.php. А то рано или поздно он станет таким
большим, что вы в нем запутаетесь.
Наш сценарий будет выводить ссылки двух видов:
? т(1ех.рЬр?р=8Ьо\у&1с1=номер_раздела — показывает содержимое раздела;
? index.php?p=showpage&id=HOMep_CTpaHH4bi — отображает страницу.
Сценарий menu.php работает с переменной $menu, в которую он помещает
HTML-код будущего меню. Сценарий index.php, в свою очередь, передает
эту переменную шаблонизатору.
Мы будем использовать несколько служебных переменных:
? $sub— если данная переменная принимает значение 1, то выводимый
раздел является подразделом;
О $is_ext_menu— если данная переменная равна 1, то нужно вывести
иерархическое меню.
174 Часть IV. Разработка собственной CMS
Первым делом наш сценарий получает список корневых разделов и
помещает его в переменную результата $г:
$q = «select * from cats where root=-l»;
$r = mysql_query($q);
Затем нужно установить переменную $is_ext_menu, поскольку мы
подразумеваем, что сначала нам не нужно раскрывать меню:
$is_ext_menu =0; //Не раскрывать меню
Мы с вами договорились, что меню будет раскрыто только во время
отображения страницы (когда переменная $р принимает значение f showpgef).
Следовательно, наш сценарий должен выполнить некоторые подготовительные
действия перед отображением страницы, а именно определить номер раздела
выводимой страницы (номер раздела, к которому принадлежит страница) и
выяснить, является ли раздел подразделом или нет. Выяснить это очень
легко, когда мы знаем номер раздела. Тогда нужно найти значение поля root
таблицы cats для нашего раздела. Если поле root равно -1, то перед нами
родительский раздел, а если же поле root больше -1, то наш раздел является
подразделом. В случае если раздел является подразделом, нам нужно
запомнить его номер (переменная $orig) и номер родительского раздела
(переменная $number), а также установить переменную $sub в -1.
Все вышесказанное можно реализовать с помощью следующего кода:
if ($p===»showpage») {
// Узнаем номер раздела выводимой страницы (поле cat)
$qur = «select * from pages where id=$id»;
$res = @mysql_query($qur);
$row = @mysql_fetch_array($res);
// Номер раздела
$number = $row[cat];
// Нужно раскрыть меню — мы выводим страницу
$is_ext_menu = 1;
// Если переменная $sub =1, то перед нами — подраздел
$sub = 0;
Глава 14.
5th Фев 2011
|
Теги:
|