Вертикальное выпадающее меню

Деркачев

Новичок
Вертикальное выпадающее меню

Здравствуйте, всем
Пока хочу обсудить проблему создания меню в общем виде, т.к. не уверен, правильно ли я эту проблему представляю, поскольку считаю себя еще новичком, хотя копал эту тему в интернете довольно много. Хотелось бы, чтобы содержание меню было каким-то образом задано в виде, например, массива, а его вид в HTML-тэгах был бы создан автоматически. И еще - имею ввиду именно вертикальное меню и именно раздвигающееся при раскрытии подменю (подменю,раскрывающееся под родительским пунктом с некоторым смещением). Вариант меню, подменю которого выстраивается справа от меню (выпадающее подменю), я не рассматриваю, т.к. для многоуровневые подменю будут занимать много места на странице по горизонтали. Итак, меню с раскрывающимися подменю.
В основном вопрос построения меню на странице сайта в интернете решается средствами сложных CSS с привлечением небольшого кода на JavaScript для поодержки IE 6. Есть варианты решений с простыми CSS, но объемным и сложным кодом на JavaScript. Оба этих подхода на мой взгляд имеют свои недостатки. В решениях со сложными CSS динамическое сворачивание или раскрытие подменю задается псевдоклассом hover и оно довольно сложно выглядит для многоуровневых меню и не очень понятно, как автоматически создать эти CSS. Вообще то CSS должны отвечать только за визуальное оформление элементов страницы, а управлять их видимостью, их перепостроением при различных действиях пользователя удобнее в соответсвующих обработчиках событий на JavaScript.
Вариант со сложным кодом JavaScript плох тем, что весь этот код принимается клиентским браузером и визуальное отображение меню строится скриптом после загрузки всей страницы. При этом скрипту надо каким-то образом передать информацию о том какая ветка подменю должна быть показана, а остальные скрыты.
Я прихожу к выводу, что должно быть комбинированное решение - основное построение HTML-тэгов меню надо выполнить на стороне сервера PHP-кодом, а на JavaScript надо реализовать только обработку событий от мышки пользователя. Задача обработчика состоит в скрытии одного подменю и в отображении другого.
И последнее соображение. Хоть в интернете все примеры используют меню на основе списков <ul>, я прихожу к выводу, что надо использовать таблицы, т.к. у них больше возможностей дизайнерского оформления.
Прошу прощения за длинный опус, но если мои доводы правильны, то готов делиться своими разработками по мере их реализации.
 

AmdY

Пью пиво
Команда форума
Деркачев
javascript обычно вовсе не нужен, css тоже довольно прост, загвоздка только что приходится завязывать на a:hover, чтобы поддерживался ослик.
если для *тебя* эта задача сложная, то ты должен прийти к выводу, что вёрсткой должен заниматься верстальщик
 

Деркачев

Новичок
Автор оригинала: *****
непонятно, при чем здесь PHP код.
PHP-код при том, что я не хотел бы вручную расписывать меню с помощью тэгов, будь то теги списков или тэги таблиц. Я хотел бы определить структуру меню в удобном для меня, программиста, виде, например так

$aMenu=array('пункт 1'=>'url1',
'пункт 2'=>'url2',
'пункт 3'=>array('пункт 3.1'=>'url31',
'пункт 3.2'=>'url32',
'пункт 3.3'=>array('пункт 3.3.1'=>'url331',
'пункт 3.3.2'=>'url332'
)
),
'пункт 4'=>'url4'
);

и вызвать некоторую функцию

menu_vert_show($aMenu);

которая сгенерирует все необходимые тэги для отображения меню на странице с генерацией в них уникальных id, чтобы обработчики JavaScript могли управлять их видимостью. А задача верстальщика описать CSS-стили элементов меню, используя определенные названия классов, которые PHP-код также влючит в тэги.
Вот что я сейчас разрабатываю, считая что какие бы оргинальные по дизайну страницы ни были, но построение меню и форм должно быть в какой-то степени автоматизировано.
 

baev

‹°°¬•
Команда форума
Деркачев, определение структуры меню никак не связано с реализацией его оформления.

В идеале html-страница должна показываться в удобном для навигации виде даже при отключенных CSS и JavaScript.
 

LONGMAN

Dark Side of the Moon..
Ведь с помошью php нужно при генерации менюшки изменить css класс для активной на active
 

Фанат

oncle terrible
Команда форума
Деркачев
в описанной задаче нигде не говорится о генерации кода.
Вопрос, насколько я его понял, состоит в том, КАКОЙ код генерировать, а не чем.

Возможно, надо переформулировать либо вопрос, либо свое понимание проблемы.
 

Деркачев

Новичок
Все-таки мой вопрос состоит в том, правильна ли мысль, что меню нужно генерировать и если, да, то ЧЕМ ?. Последние ответы подтверждают, что мысль правильна. Был вопрос и какой код генерировать - с использованием тэгов <ul> или <table>. Попробовав и тот и другой вариант, пока склоняюсь к таблицам. Чем генерировать - конечно PHP-скриптом, а на JavaScript будут небольшие обработчики, упрпавляющие видимостью элементов меню. Думаю, что автоматически настраивать CSS не придется, т.к. хочу, чтобы CSS содержали только правила визуального представления элементов меню и с ними должен работать дизайнер, не знающий ничего о PHP и JavaScript. А вот замечание участника baev об отключенных CSS и Javascript является предметом другой темы. Я для себя принял решение вежливо сообщить пользователю, что возможности его браузера ограничены, дать общую ознакомительную информацию о назначении и возможностях моего сайта, чтобы пользователь мог определиться, снять ли ограничения для работы с моим сайтом.
Спасибо всем за учатие в дискуссии.

-~{}~ 09.06.10 10:02:

P.S. Если кому интересна реализация обсужденной проблемы, дайте знать, поделюсь, буду рад и совместной работе над реализацией.
 

newARTix

Новичок
Деркачев
что вы проблема да проблема. Нет никакой проблемы. Обычный прием пользовательского интерфейса. Есть более 9000 реализаций различной степени технологичности с использованием навороченного JS и без него вообще. И с ul и c div. И это может сделать любой верстальщик с опытом от 1 года. И уже под его решение (которое полностью зависит от сложности дизайна и особенностей проекта) будет писаться строчка на PHP которая будет генерить необходимый HTML.

И да, если сайт плохо работает в каком-то популярном браузере, то это ваша проблема, а не пользователя. За что-то же вам (и верстальщику) платят деньги.
 

baev

‹°°¬•
Команда форума
Был вопрос и какой код генерировать - с использованием тэгов <ul> или <table>. Попробовав и тот и другой вариант, пока склоняюсь к таблицам.
— написали же уже: пусть вёрсткой верстальщик занимается.
Генерируйте код без тегов.
 
Сверху