Добрый день всем! Добро пожаловать на Блог RS! Сегодня мы с Вами поговорим о способе реализации древовидного меню. Для чего такое меню вообще нужно? Чаще всего привязка одного пункта меню к другому прибегается в случае реализации всплывающего меню. Реже древовидное меню создается лишь для того, что бы подчеркнуть пункт который является каталогом и пункт который является подкаталогом, эдакий визуальный эффект и не более того
Какое древовидное меню будем делать мы? Да любое! Отличие всплывающего меню от древовидного лишь в наличие ява скрипта который прячет часть пунктов, и показывает их при наведение мышки на определенную область меню. Сейчас разговор не об этом, сейчас необходимо понять как заставить пункты меню складывать в нужном нам порядке
Как видите с лева идут беспорядочно разбросанные пункты. Наша задача связать их таким образом, что бы подкаталог находился сразу после каталога, образуя так называемое дерево
Наша админка умеет менять порядок пунктов, но этой возможности мало. Как видите на моем блоге реализовано подобное меню, нужные пункты смещаются в правую сторону образую лесенку, как этого добиться? У меня было 4 движка, в первом я вообще не задумывался о алгоритме который в автоматическом режиме создавал бы мне меню. Во втором я реализовал возможность создавать подобную чудо штуку но вложенность таких подпунктов равнялась трем. В третьем движке я реализовал возможность создавать бесконечное количество вложенных пунктов, но этот метод реализации очень сильно нагружал базу данных. При 10 пунктов в базу данных посылалось ~20 запросов. В последнем ( то есть в этом ) движке я прибег к многомерному массиву сократив запросы в базу данных до одного. Думаю говорить о все трех способах бессмысленно, так как они все чем то похожи, поэтому я Вам поведую последний способ реализации.
Прежде чем я продолжу, хочу обратится к новоприбывшем на блог. Этот пост, как и 95% постов на данном блоге, является часть цикла "Создать блог с нуля". В этом цикле я рассказываю как написать свой движок персонального блога на php. Так как этот пост является частью цикла, то он может показаться Вам совершенно бесполезным. Если у Вас есть желание научится, на практике, программировать на php то Вы пришли туда куда нужно. Переходите по ссылке выше и приступайте к обучению =) Если у Вас возникнут какие либо вопросы, то я с удовольствием Вам на них отвечу ( если конечно знаю ответ =))) )
Если Вам понравился мой проект, то подпишитесь на RSS ленту блога через ридер, или же по почте
Смысл в принципе простой. Создается функция, которая выводит все главные меню. Что я имею ввиду под словом главные? Это те пункты которые не имеют родительных пунктов
В базе данных есть колонка ( podmenu ) которая содержит число. Это число может быть нулем, или же имеет число равное идентификатору родительного пункта. Если в этой колонке ноль, то этот пункт является главным, если же число равное какому нить идентификатору, то этот пункт является чьим то подпунктом
Надеюсь ясно как определяются главные и не "очень" главные пункты =) Так вот, создается функция которая умеет по колонке podmenu формировать пункты. Стартовая задача функции вывести все пункты у которых колонка podmenu равна нулю. Но! После создания одного пункта, функция перезапускается с новыми параметрами, тем самым вытаскивая из базы данных уже те пункты у которых колонка podmenu равна какому то числу. Внимание на изображение ниже:
Я пытался наглядно изобразить работу функции, если Вам ничего тут не понятно то не пугайтесь =) в следующем посте, во время реализации этой функции Вы все поймете =)
На сегодня теории достаточно, завтра праздник поэтому не стоит захламлять себе голову всякими кодами =) Кстати, я завтра наврятли доберусь до блога, поэтому скажу сейчас, дорогие дамы! С праздником Вас, пусть все, что придумает Ваше не логичная логика не вгоняет в тупик противоположный пол =) Если мое пожелание сбудется, то мы, мужчины, будем понимать Вас с полу слова, а насколько мне известно, Вы так этого хотите =)
На по следок скажу, если Вам понравился мой проект, то подпишитесь на RSS ленту блога через ридер, или же по почте
Всего Вам наилучшего! У меня все!
______
P.S.: Мне, как человеку замирающему от красоты нашей природы, всегда было интересно, как люди в своих двориках делают красивые сады? Вот как человек умудрился расположить клумбу с цветами так, что она гармонично смотрится с корявым, покрашенным в синий цвет, еще в 60-ые годы, забором? Если Вам интересна данная тема, то приглашаю Вас почитать примерные тексты про ландшафтный дизайн на блоге ivpr.ru