![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
Arx |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 30.3.2002 Где: Москва Репутация: нет Всего: нет |
ДАНО:
Многоуровневое меню... в БД след. формат таблицы: ---------------------------------------- | id | parent_id | name | ---------------------------------------- НАДО: При каждом клике на пункт меню выводить только один следующий уровень, при этом все предыдущие узлы тоже должны выводится, т.е. получается мы постепенно должны открыть всю ветку. Использую рекурсивную функцию. 2 дня бьюсь!!! Ничего не выходит. Уверен что решение элементарное! Подскажите как это сделать или лучше рабочий кусок кода дайте |
|||
|
||||
BlackLFL |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 15.9.2005 Где: Москва Репутация: 3 Всего: 12 |
какая база данных
|
|||
|
||||
Arx |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 30.3.2002 Где: Москва Репутация: нет Всего: нет |
MySQL
|
|||
|
||||
Arx |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 30.3.2002 Где: Москва Репутация: нет Всего: нет |
Ну чего народ???
неужели никто не писал??? |
|||
|
||||
levcom |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 24.4.2006 Репутация: нет Всего: нет |
Я тоже одно время бился, но остановился на несколько ином решении (возможно оно покажется странным, но на универсальность не претендую)
Вначале я использовал рекурсивный спуск, и одращался к БД, хотя потом решил что куча запросов к БД это не эффективно и придумал следующее: 1) я использую модуль apache mod_rewrite для "красивых путе" (т.к. сайт на единой системе публикации) и в файле .htaccess прописано примерно слудующее: ... RewriteRule ^(.*)news/$ $1newsline.pl?_nav_build=0-1 ... причем фаил формируется программно при обновлении в системе навигации обновляется тоже, обратите внимание на _nav_build=0-1 - это формируется автоматом при обновлении при рекурсивном спуске, когда вся навигация загружается в хэш. При обрашении к странице по этому параметру любое древовидное меню строится быстро и с помощью одного запроса к БД. Замечу, что для выдачи содержания страницы достаточно взять контент из БД опять же одним запросом по id равному последней цифре параметра _nav_build=0-1. Для малых сайтов это решение очень удобно, для больших я хочу кэшировать часть таблицы навигации, для формирования навигации "на лету" без пометок в файле конфигурации. |
|||
|
||||
GoodBoy |
|
|||
![]() Главный джедай ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3886 Регистрация: 8.1.2003 Где: КМВ Репутация: 4 Всего: 83 |
Arx, попробуй по этому шаблону:
|
|||
|
||||
Arx |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 30.3.2002 Где: Москва Репутация: нет Всего: нет |
levcom, есть рабочий скриптец?
![]() Мозги закипают уже. GoodBoy, твой кусок походу выведет все дерево, а мне не надо все. Точнее надо но постепенно есть структура меню: О КОМПАНИИ КУХОННАЯ ЛОГИСТИКА СТЕЛЛАЖНЫЕ СИСТЕМЫ Стеллажи из нержавеющей стали Полки настенные Стеллажи из алюминия ТРАНСПОРТИРОВОЧНОЕ ОБОРУДОВАНИЕ Тележки для транспортировки корзин с посудой Тележки шпильки Тележки для сбора посуды ДИСПЕНСЕРЫ Диспенсеры для тарелок Диспенсеры универсальные Встраиваемые диспенсеры КУХОННЫЕ АКСЕССУАРЫ Банкетные тележки и аксессуары КОНВЕЕРНЫЕ СИСТЕМЫ ТЕЛЕЖКИ С ИНДУКЦИОННЫМ ПОДОГРЕВОМ И ОХЛАЖДЕНИЕМ МЕДИЦИНСКОЕ ОБОРУДОВАНИЕ НАДО на главной странице: О КОМПАНИИ КУХОННАЯ ЛОГИСТИКА МЕДИЦИНСКОЕ ОБОРУДОВАНИЕ ДАЛЕЕ жму КУХОННАЯ ЛОГИСТИКА О КОМПАНИИ КУХОННАЯ ЛОГИСТИКА СТЕЛЛАЖНЫЕ СИСТЕМЫ ТРАНСПОРТИРОВОЧНОЕ ОБОРУДОВАНИЕ ДИСПЕНСЕРЫ КУХОННЫЕ АКСЕССУАРЫ КОНВЕЕРНЫЕ СИСТЕМЫ ТЕЛЕЖКИ С ИНДУКЦИОННЫМ ПОДОГРЕВОМ И ОХЛАЖДЕНИЕМ МЕДИЦИНСКОЕ ОБОРУДОВАНИЕ ДАЛЕЕ жму ТРАНСПОРТИРОВОЧНОЕ ОБОРУДОВАНИЕ О КОМПАНИИ КУХОННАЯ ЛОГИСТИКА СТЕЛЛАЖНЫЕ СИСТЕМЫ ТРАНСПОРТИРОВОЧНОЕ ОБОРУДОВАНИЕ Тележки для транспортировки корзин с посудой Тележки шпильки Тележки для сбора посуды ДИСПЕНСЕРЫ КУХОННЫЕ АКСЕССУАРЫ КОНВЕЕРНЫЕ СИСТЕМЫ ТЕЛЕЖКИ С ИНДУКЦИОННЫМ ПОДОГРЕВОМ И ОХЛАЖДЕНИЕМ МЕДИЦИНСКОЕ ОБОРУДОВАНИЕ При этом при каждом клике страница перезагружается, скрипту передаются какие-то параметры, например ID ссылки на которую кликнули и т.д. Надеюсь понятно объяснил суть проблемы. Готов даже приплатить чуваку, который решит мою проблему, написав такой скрипт ![]() |
|||
|
||||
sharq |
|
|||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 2 Всего: 28 |
Arx, для твоей задачи могу посоветовать другой способ проектирования БД - Nested Sets. Вот тут хорошие статейки на эту тему.
![]() -------------------- [color=gray]There's More Than One Way To Do It[/color] |
|||
|
||||
GoodBoy |
|
|||
![]() Главный джедай ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3886 Регистрация: 8.1.2003 Где: КМВ Репутация: 4 Всего: 83 |
Arx, у меня этот швблон и взят из скрипта, который строит меню именно так, как ты описываешь! только для тебя он (скрипт) будет бесполезен, т. к. там используется много сторонних модулей...
|
|||
|
||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 12 Всего: 84 |
Если всё же не хочешь БД, то можно хеши... и ссылки на них... Алгоритм был приведён в cookbook perl в разделе CGI
![]() |
|||
|
||||
levcom |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 24.4.2006 Репутация: нет Всего: нет |
levcom, есть рабочий скриптец?
![]() Мозги закипают уже. Замечу, что скрипт строит древовидное меню _и_ строит к нему ссылки в виде /category1/category2/.. в зависимости от вложенности. Само построение дерева проше. Всего 5 функций:
Это 6 функций из модуля Navigation.pm всего из 7. У меня на сайте работает. Я пока еще только очень начинающий поэтому заранее буду благодарен любым замечаниям по коду и предложениям. Сейчас переделываю этот механизм (при тойже структуре данных) с отказом от параметра _nav_build и поддержкой кэширования части меню. Данный моду дополненый еще несколькими функциями состовляет довольно универсальную и простую систему публикации. (К сожаления, даже не представляю как подобные вещи устроены на других сайтах, поэтому реализация может показаться _глупой_) |
|||
|
||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 12 Всего: 84 |
Ну совет по кешу один, желательно кешировать то что либо не изменяется, либо очень редко
![]() К примеру ТОВАР - данная таблица может меняться, как по ценнам, так и по количеству, или даже по составу (если БД не "накапливающая"). А вот ГОРОДА естественно не меняются ;) - можно кешировать... |
|||
|
||||
Arx |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 30.3.2002 Где: Москва Репутация: нет Всего: нет |
Готов заплатить 1000 рублей за готовый скрипт меню Подробности в личку или на мыло (в профиле) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl: CGI программирование" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: разработка для Web | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |