Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.77.71] |
|
Сообщ.
#1
,
|
|
|
На моём сайте используется простое иерархическое меню а-ля Проводник.
Для использования такого меню в более серьёзных проектах необходимо динамически подгружать (а если выгружать, то вообще отлично) ветки меню, которые выбирает пользователь. В настоящее время структура меню генерится из базы и один раз подгружается на страницу, при обновлении структуры меню приходится обновлять страницу. При малых объёмах данных в меню этот способ приемлем. В настоящее время я работаю над проектом в котором иерархическое меню может и будет очень быстро расти в объёме. Загружать его за один раз, тем более по интернету, будет очень накладно, если не фатально! На сайте RSDN есть то что мне надо. Я конечно выдеру необходимое оттуда, но желательно разъяснить как именно это работает. Заранее благодарен! |
Сообщ.
#2
,
|
|
|
мне тоже интересно как там работает, этот вопрос меня волновал давно, но могу предложить альтернативу:
попробуй использовать xml - обычный текстовый файл и не нужно никакой базы данных - все, что надо - это скрипт на javascript, который обходит xml-файл и выводит на экран дерево если идти дальше - можно этот xml-файл генерить на php автоматически, используя информацию из базы(например при внесении каких-либо изменений в базу вызывать этот скрипт) |
Сообщ.
#3
,
|
|
|
Цитата RaD, 31.08.04, 18:34 На моём сайте используется простое иерархическое меню а-ля Проводник. Сам делал? |
Сообщ.
#4
,
|
|
|
Мда... посмотрел я RSDN'овское меню,
там используется старый способ динамической подгрузки контента через IFRAME. Реализация,должен заметить, -- на мой взгляд, ужасная, ОЧЕНЬ много лишнего HTML'я, я бы рекомендовал автору этого меню заново перечитать учебник по HTML Цитата <UL> ................ <LI ID=li182> <A ONCLICK=expand('182',this); href=?node=182 title=Архивы> <IMG ALIGN=absmiddle alt=Архивы src=../images/tree/atc.gif ID=img182>Архивы</A> <IFRAME NAME=fra182></IFRAME> </LI> <UL class=Hidden ID=ul182></UL> </UL> Обратите внимание красным цветом выделено то что можно было-бы написать всего один , максимум два раза, но никак не ШЕСТЬ (следствие весьма поверхностного знания DOM) Жирным шрифтом синего цвета выделен тег </LI> который явно стоит не на своём месте, ведь UL не может содержать никаких других тегов кроме как <LI>, а в данном коде получается что UL(самый верхний) содержит другой тег UL - что являеться очень грубой ошибкой (браузеры не обязаны её прощать) Т.е. верстку и клиентские скрипты - на RSDN делал не профи. Вывод: копировать это меню не стоит. |
Сообщ.
#5
,
|
|
|
Цитата Mixxx @ 31.08.04, 20:30 Цитата RaD, 31.08.04, 18:34 На моём сайте используется простое иерархическое меню а-ля Проводник. Сам делал? Делал сам, по материалам сайта dhtml.ru. Добавлено в : Цитата shipbrother @ 31.08.04, 19:47 мне тоже интересно как там работает, этот вопрос меня волновал давно, но могу предложить альтернативу: попробуй использовать xml - обычный текстовый файл и не нужно никакой базы данных - все, что надо - это скрипт на javascript, который обходит xml-файл и выводит на экран дерево если идти дальше - можно этот xml-файл генерить на php автоматически, используя информацию из базы(например при внесении каких-либо изменений в базу вызывать этот скрипт) Зачем вводить промежуточный слой между MySQL и PHP. У меня есть давно отлаженный класс для работы с этой БД. Проблема в том, что информация о меню может меняться очень часто, а самое главное, она может быстро расти в объёме. Тебе приятно будет закачивать пару мегабайт в окно меню? В обычных приложениях обычно рисуют элементы верхнего уровня меню. При нажатии пользователем на конкретную ветку происходит подгрузка содержимого выбранной ветки, а затем ветка открывается. Если ветка закрыта и не используется некоторое время, можно произвести выгрузку содержимого ветки для освобождения памяти. Меня интересует именно такой аспект. Можно ли такое реализовать на JavaScript??? |
Сообщ.
#6
,
|
|
|
Цитата RaD, 1.09.04, 09:49 Тебе приятно будет закачивать пару мегабайт в окно меню если ты используешь xml - объем меню будет окоро 20kb(супербольшое меню), а выводить на экран и раскрашивать его будет javascript(как вариант), то есть при каждом нажатии на раздел в меню будет выполняться скрипт, который будет перерисовывать меню, а не перегружать его. Цитата RaD, 1.09.04, 09:49 В обычных приложениях обычно рисуют элементы верхнего уровня меню. При нажатии пользователем на конкретную ветку происходит подгрузка содержимого выбранной ветки, а затем ветка открывается. а с использованием javascript + xml, меню будет все время в памяти и будет объемом не более маленького текстового файла Удобно? По-моему очень! Цитата RaD, 1.09.04, 09:49 У меня есть давно отлаженный класс для работы с этой БД я конечно понимаю, что если механизм налажен, то отойти от него сложно. поэтому и предложил используя БД переделывать xml-файл, но в принципе можно было бы сразу(минуя БД) делать xml Добавлено в : я делал такое меню. на основе xml и javascript. могу продемонстрировать, если заинтересует. |
Сообщ.
#7
,
|
|
|
Цитата shipbrother,1.09.04, 11:39 я делал такое меню. на основе xml и javascript. могу продемонстрировать, если заинтересует. Если твой вариант меню сможет отработать с таблицой из 10 000 элементов, то я с интересом на него гляну! |
Сообщ.
#8
,
|
|
|
Не знаю, я его с таким объемом не тестировал...
Тут важно вот что: --- если иерархическая структура твоего меню генериться автоматически исходя из выборки по БД(то есть иерархия строится на основе полей РАЗДЕЛ, ПОДРАЗДЕЛ, ПОДПОДРАЗДЕЛ и т.д. КАЖДОЙ записи), то xml - плохая альтернатива, --- а если иерархия хотя бы частично(на уровне 1-3 ступеней) предопределена(т.е. например имеется несколько таблиц в базе, соответствующих каждому разделу или подразделу), то есть смысл протестить мой вариант на 10000 записей. как у тебя это все устроено? |
Сообщ.
#9
,
|
|
|
Цитата shipbrother,1.09.04, 12:55 --- если иерархическая структура твоего меню генериться автоматически исходя из выборки по БД(то есть иерархия строится на основе полей РАЗДЕЛ, ПОДРАЗДЕЛ, ПОДПОДРАЗДЕЛ и т.д. КАЖДОЙ записи), то xml - плохая альтернатива, Именно про это и говорю. Уровень вложенности может быть произвольным. База большая, рост непредсказуем. Оптимально, именно подгружать нужную ветку и выгружать через некоторое время неактивности. Твою идею я понял, её можно переделать так: Цитата Копирайт адназначна! 1. В скрытый фрейм (старо как мир), подгружаем содержимое выбранной ветки (только верхний уровень) в виде XML или CSV (это пофиг). 2. Скрипт перегенерирует меню из ещё одного (главного) скрытого фрейма с учетом подгруженной информации. 3. Во время перегенерации, если есть "подгруженная" ветка/ветки, она закрыта и давно не открывалась (это надо хранить), то игнорировать её содежимое (происходит "выгрузка"). Думаю, этот алгоритм мне подойдёт. Кстати, иерархия делается не по РАЗДЕЛ, ПОДРАЗДЕЛ, ПОДПОДРАЗДЕЛ и т.д, а по типу ID, PARENT_ID. Это предоставляет нам требуемую гибкость при создании иерархии. |
Сообщ.
#10
,
|
|
|
RaD
Сегодня сделал простенькое меню с динамической подгрузкой узлов В аттаче все необходимые файлы (Но учти что в IE работает только если запускать файл с сервера, а не с диска) Скрипт кросбраузерный: IE 5.01, IE 6.0, IE 6.0, Opera 7.60 и Mozilla Прикреплённый файлxmlMenu.zip (5.73 Кбайт, скачиваний: 167) |
Сообщ.
#11
,
|
|
|
Справочник по javascript и объектам в студию.
Особенно интересно, где берут информацию про XMLHttpRequest и так далее. Интересует направление в сторону Mozilla. |
Сообщ.
#12
,
|
|
|
Мозилла -> http://www.xulplanet.com/references/elemre...ttpRequest.html
Ослик -> http://msdn.microsoft.com/library/default....httprequest.asp Добавлено в : А вот сводная статья: http://developer.apple.com/internet/webcon...xmlhttpreq.html |
Сообщ.
#13
,
|
|
|
Повозился на выходных, почитал, попрограммировал...
Очень интересная технология. Наполовину переделал код, теперь он работает "правильно", т.е. как надо мне Теперь можно многое делать, не перегружая страничку, экономия траффика в чистом виде! Надо протестировать идею и заставить переделать текущий форум... |
Сообщ.
#14
,
|
|
|
Цитата RaD, 6.09.04, 13:06 Теперь можно многое делать, не перегружая страничку, экономия траффика в чистом виде! А как же системы удалённой статистики (mail, rambler top 100, RAX, Hot Log) ? |
Сообщ.
#15
,
|
|
|
Нам шашечки или ехать?
Если сайт для работы, пример Дозор, то нам статистика ни к чему... Я на этот форум хожу только с работы, дома у меня GPRS и просмотр нескольких тем форума выведет из олигархического состояния счёт моего мобильника. Экономика должна быть экономной (с) неглупый человек |