| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > Многоуровневое меню. Вывод ветки |
| Автор: Arx 21.4.2006, 15:52 |
| ДАНО: Многоуровневое меню... в БД след. формат таблицы: ---------------------------------------- | id | parent_id | name | ---------------------------------------- НАДО: При каждом клике на пункт меню выводить только один следующий уровень, при этом все предыдущие узлы тоже должны выводится, т.е. получается мы постепенно должны открыть всю ветку. Использую рекурсивную функцию. 2 дня бьюсь!!! Ничего не выходит. Уверен что решение элементарное! Подскажите как это сделать или лучше рабочий кусок кода дайте |
| Автор: BlackLFL 21.4.2006, 15:55 |
| какая база данных |
| Автор: Arx 22.4.2006, 11:52 |
| MySQL |
| Автор: Arx 24.4.2006, 12:11 |
| Ну чего народ??? неужели никто не писал??? |
| Автор: levcom 2.5.2006, 00:13 |
| Я тоже одно время бился, но остановился на несколько ином решении (возможно оно покажется странным, но на универсальность не претендую) Вначале я использовал рекурсивный спуск, и одращался к БД, хотя потом решил что куча запросов к БД это не эффективно и придумал следующее: 1) я использую модуль apache mod_rewrite для "красивых путе" (т.к. сайт на единой системе публикации) и в файле .htaccess прописано примерно слудующее: ... RewriteRule ^(.*)news/$ $1newsline.pl?_nav_build=0-1 ... причем фаил формируется программно при обновлении в системе навигации обновляется тоже, обратите внимание на _nav_build=0-1 - это формируется автоматом при обновлении при рекурсивном спуске, когда вся навигация загружается в хэш. При обрашении к странице по этому параметру любое древовидное меню строится быстро и с помощью одного запроса к БД. Замечу, что для выдачи содержания страницы достаточно взять контент из БД опять же одним запросом по id равному последней цифре параметра _nav_build=0-1. Для малых сайтов это решение очень удобно, для больших я хочу кэшировать часть таблицы навигации, для формирования навигации "на лету" без пометок в файле конфигурации. |
| Автор: GoodBoy 3.5.2006, 09:55 | ||
Arx, попробуй по этому шаблону:
|
| Автор: Arx 10.5.2006, 12:53 |
| levcom, есть рабочий скриптец? Мозги закипают уже. GoodBoy, твой кусок походу выведет все дерево, а мне не надо все. Точнее надо но постепенно есть структура меню: О КОМПАНИИ КУХОННАЯ ЛОГИСТИКА СТЕЛЛАЖНЫЕ СИСТЕМЫ Стеллажи из нержавеющей стали Полки настенные Стеллажи из алюминия ТРАНСПОРТИРОВОЧНОЕ ОБОРУДОВАНИЕ Тележки для транспортировки корзин с посудой Тележки шпильки Тележки для сбора посуды ДИСПЕНСЕРЫ Диспенсеры для тарелок Диспенсеры универсальные Встраиваемые диспенсеры КУХОННЫЕ АКСЕССУАРЫ Банкетные тележки и аксессуары КОНВЕЕРНЫЕ СИСТЕМЫ ТЕЛЕЖКИ С ИНДУКЦИОННЫМ ПОДОГРЕВОМ И ОХЛАЖДЕНИЕМ МЕДИЦИНСКОЕ ОБОРУДОВАНИЕ НАДО на главной странице: О КОМПАНИИ КУХОННАЯ ЛОГИСТИКА МЕДИЦИНСКОЕ ОБОРУДОВАНИЕ ДАЛЕЕ жму КУХОННАЯ ЛОГИСТИКА О КОМПАНИИ КУХОННАЯ ЛОГИСТИКА СТЕЛЛАЖНЫЕ СИСТЕМЫ ТРАНСПОРТИРОВОЧНОЕ ОБОРУДОВАНИЕ ДИСПЕНСЕРЫ КУХОННЫЕ АКСЕССУАРЫ КОНВЕЕРНЫЕ СИСТЕМЫ ТЕЛЕЖКИ С ИНДУКЦИОННЫМ ПОДОГРЕВОМ И ОХЛАЖДЕНИЕМ МЕДИЦИНСКОЕ ОБОРУДОВАНИЕ ДАЛЕЕ жму ТРАНСПОРТИРОВОЧНОЕ ОБОРУДОВАНИЕ О КОМПАНИИ КУХОННАЯ ЛОГИСТИКА СТЕЛЛАЖНЫЕ СИСТЕМЫ ТРАНСПОРТИРОВОЧНОЕ ОБОРУДОВАНИЕ Тележки для транспортировки корзин с посудой Тележки шпильки Тележки для сбора посуды ДИСПЕНСЕРЫ КУХОННЫЕ АКСЕССУАРЫ КОНВЕЕРНЫЕ СИСТЕМЫ ТЕЛЕЖКИ С ИНДУКЦИОННЫМ ПОДОГРЕВОМ И ОХЛАЖДЕНИЕМ МЕДИЦИНСКОЕ ОБОРУДОВАНИЕ При этом при каждом клике страница перезагружается, скрипту передаются какие-то параметры, например ID ссылки на которую кликнули и т.д. Надеюсь понятно объяснил суть проблемы. Готов даже приплатить чуваку, который решит мою проблему, написав такой скрипт |
| Автор: sharq 10.5.2006, 13:37 |
| Arx, для твоей задачи могу посоветовать другой способ проектирования БД - Nested Sets. Вот http://phoinix.ucoz.ru/publ/5-1-0хорошие статейки на эту тему. |
| Автор: GoodBoy 10.5.2006, 14:21 |
| Arx, у меня этот швблон и взят из скрипта, который строит меню именно так, как ты описываешь! только для тебя он (скрипт) будет бесполезен, т. к. там используется много сторонних модулей... |
| Автор: nitr 10.5.2006, 14:24 |
| Если всё же не хочешь БД, то можно хеши... и ссылки на них... Алгоритм был приведён в cookbook perl в разделе CGI |
| Автор: levcom 10.5.2006, 15:07 | ||
| levcom, есть рабочий скриптец? Мозги закипают уже. Замечу, что скрипт строит древовидное меню _и_ строит к нему ссылки в виде /category1/category2/.. в зависимости от вложенности. Само построение дерева проше. Всего 5 функций:
Это 6 функций из модуля Navigation.pm всего из 7. У меня на сайте работает. Я пока еще только очень начинающий поэтому заранее буду благодарен любым замечаниям по коду и предложениям. Сейчас переделываю этот механизм (при тойже структуре данных) с отказом от параметра _nav_build и поддержкой кэширования части меню. Данный моду дополненый еще несколькими функциями состовляет довольно универсальную и простую систему публикации. (К сожаления, даже не представляю как подобные вещи устроены на других сайтах, поэтому реализация может показаться _глупой_) |
| Автор: nitr 10.5.2006, 15:11 |
| Ну совет по кешу один, желательно кешировать то что либо не изменяется, либо очень редко К примеру ТОВАР - данная таблица может меняться, как по ценнам, так и по количеству, или даже по составу (если БД не "накапливающая"). А вот ГОРОДА естественно не меняются ;) - можно кешировать... |
| Автор: Arx 18.5.2006, 10:38 |
Готов заплатить 1000 рублей за готовый скрипт меню Подробности в личку или на мыло (в профиле) |