Помощник
Здравствуйте, гость ( Вход | Регистрация )
Подсветка пункта меню и текущая страница |
Jon |
2009-12-20, 20:19
Сообщение
#1
|
|
Любитель Группа: Бета-тестеры Сообщений: 282 Регистрация: 2009-07-12 Из: Москва Репутация: нет Всего: 0 |
3я из 5 заказчиков требуют чтобы на их сайтах всегда подсвечивались пункты меню, показывающие где юзер находится.
Допустим, человек в "контактах", то и ссылка "контакты" светится определённым цветом и не кликабельна. Такое предусмотрено в ДЛЕ и в многих системах. Думаю, стоит это включить в функционал "верхнего меню". |
|
|
||
Alexander |
2009-12-20, 22:31
Сообщение
#2
|
|
Eleanor developer Группа: Администраторы Сообщений: 5 262 Регистрация: 2008-11-11 Из: Николаев Версия системы: RC5 Репутация: нет Всего: 67 |
И как Вы предлагаете подсвечивать нужный пункт меню? По какому алгоритму? Ведь в новости можно попасть по любой из ссылок ниже:
/news /news.html /news/ index.php?news index.php?module=news |
|
|
||
Youshi |
2009-12-21, 9:23
Сообщение
#3
|
|
Любитель Группа: Разработчики Сообщений: 118 Регистрация: 2008-12-14 Из: Россия. Астрахань Репутация: нет Всего: 8 |
А я все искал, к чему бы придраться
И вот оно! Сань, человек дело говорит. А как это дело претворить в жизнь - твоя головная боль. И если твоя ЦМС не способна выполнить тривиальную задачу, имеет смысл задать себе вопрос: "А что же я не так в ней сделал?" А затем второй: "Как это исправить?" Сообщение отредактировал Youshi - 2009-12-21, 9:28 |
|
|
||
Jon |
2009-12-21, 10:28
Сообщение
#4
|
|
Любитель Группа: Бета-тестеры Сообщений: 282 Регистрация: 2009-07-12 Из: Москва Репутация: нет Всего: 0 |
Просто. Пусть подсвечивается только тот вариант, на который указывается ссылка. Крайний случай, можно всё сделать стилями как тут http://www.sohtanaka.com/ |
|
|
||
Diego |
2009-12-21, 15:49
Сообщение
#5
|
|
Любитель Группа: Eleanor user Сообщений: 298 Регистрация: 2008-12-13 Из: Ярославль Репутация: нет Всего: 14 |
Лично я сделал подсветку по урлу, т.е. что-то типа такого
ну и там соответствующие стили для <span> |
|
|
||
Jon |
2009-12-21, 17:53
Сообщение
#6
|
|
Любитель Группа: Бета-тестеры Сообщений: 282 Регистрация: 2009-07-12 Из: Москва Репутация: нет Всего: 0 |
поподробнее плиз ) |
|
|
||
Alexander |
2009-12-21, 19:21
Сообщение
#7
|
|
Eleanor developer Группа: Администраторы Сообщений: 5 262 Регистрация: 2008-11-11 Из: Николаев Версия системы: RC5 Репутация: нет Всего: 67 |
Я знаю, как это сделать так, чтобы пользователю понравилось. Но не считаю это решение красивым. Разумеется, можно сравнивать $_SERVER['REQUEST_URI'] с генерируемой ссылкой. Наверное, так и сделаю. |
|
|
||
Youshi |
2009-12-21, 19:36
Сообщение
#8
|
|
Любитель Группа: Разработчики Сообщений: 118 Регистрация: 2008-12-14 Из: Россия. Астрахань Репутация: нет Всего: 8 |
Надо делать не только, чтобы нравилось пользователю, но еще и чтобы это все нормально работало без "костылей". Имхо, неверное решение. Почему, читай предыдущий коммент. Блок ничего ни с чем сравнивать не должен. Он должен сделать единственную ведь - спросить у системы: "А в каком модуле я нахожусь?" и соответственно менять нужный пункт меню. |
|
|
||
Alexander |
2009-12-21, 20:18
Сообщение
#9
|
|
Eleanor developer Группа: Администраторы Сообщений: 5 262 Регистрация: 2008-11-11 Из: Николаев Версия системы: RC5 Репутация: нет Всего: 67 |
ИМХО, мимо. Т.к. пункт меню может указывать не только на модуль. Но и на одну из его страниц. Как в этом случае сравнить? |
|
|
||
Youshi |
2009-12-21, 20:37
Сообщение
#10
|
|
Любитель Группа: Разработчики Сообщений: 118 Регистрация: 2008-12-14 Из: Россия. Астрахань Репутация: нет Всего: 8 |
По цепочке... Блок у системы, система у модуля и т. д. Ну а если система такого не умеет - да. Придется изобретать костыли... |
|
|
||
Alexander |
2009-12-21, 21:03
Сообщение
#11
|
|
Eleanor developer Группа: Администраторы Сообщений: 5 262 Регистрация: 2008-11-11 Из: Николаев Версия системы: RC5 Репутация: нет Всего: 67 |
Youshi, система этого пока не умеет только потому что ее не научили. А не научили ее потому, что я не могу придумать корректного алгоритма сравнения адресов страниц. Подскажи, пожалуйста, если есть как.
Как определить что следующие строки указывают на страницу: array('mdoule'=>'news',array('do'=>'add')) ? /news/do_add.html /news/do_add/bla_bla.html index.php?module=news&do=add index.php?module=news&do=add&bla=bla Мне кажется что никак... По сему вариант один: сравнивать REQUEST_URI. Сообщение отредактировал Alexander - 2009-12-21, 21:03 |
|
|
||
Youshi |
2009-12-21, 21:36
Сообщение
#12
|
|
Любитель Группа: Разработчики Сообщений: 118 Регистрация: 2008-12-14 Из: Россия. Астрахань Репутация: нет Всего: 8 |
Еще раз повторю: не нужно ничего сравнивать и ничего определять. У тебя уже ВСЕ определено. Единственное, что нужно сделать - это в соответствующем месте модуля как-то обозначить действие, выполняемое им в данный момент. (хотя конечно я пока не знаю, в какой последовательности у тебя обрабатываются блоки и модули, и можно ли такое проделать).
Да. как именно и откуда блок берет данные для меню, я тоже пока не представляю. Но алгоритм нахождения мне видится таким: Далее в процессе обработки блока, он делает запрос к Mainclass например, Mainclass в свою очередь считывает необходимые данные из выполняемого модуля. На их основе формируется массив Цитата array('mdoule'=>'news',array('do'=>'add')) Если же поступить, как хочешь ты, то придется учитывать настройки ЧПУ, возможность появления в URI посторонних данных и т. п.... |
|
|
||
Jon |
2009-12-21, 23:28
Сообщение
#13
|
|
Любитель Группа: Бета-тестеры Сообщений: 282 Регистрация: 2009-07-12 Из: Москва Репутация: нет Всего: 0 |
Как определить что следующие строки указывают на страницу: array('mdoule'=>'news',array('do'=>'add')) ? /news/do_add.html /news/do_add/bla_bla.html index.php?module=news&do=add index.php?module=news&do=add&bla=bla Мне кажется что никак... По сему вариант один: сравнивать REQUEST_URI. array('module'=>'news',array('do'=>'add')) 'module'=>'news' = этого вполне достаточно. И пункт в меню "Новости" уже светицо. Разве трудно из этой строки извлечь данные? ПыСы. Нам жеж не нужно учитывать на какой именно странице чел... Нас только интересует модуль. Хотя, если бы и подсвечивались подпункты меню, был бы вообще отпад. Но тут только REQUEST_URI. И даже двойной... На вкладку и на подвкладку. Сообщение отредактировал Jon - 2009-12-21, 23:29 |
|
|
||
Alexander |
2009-12-22, 1:22
Сообщение
#14
|
|
Eleanor developer Группа: Администраторы Сообщений: 5 262 Регистрация: 2008-11-11 Из: Николаев Версия системы: RC5 Репутация: нет Всего: 67 |
Все, что у нас есть - это параметры командной строки и страница, которая выводится по этим параметрам. Ладно, вижу меня не понимают. Приведем пример. Значит ссылку пункта меню сделали такой news/категория/новость.html. Пользователь перешел по ссылке index.php?module=news&nid=2. Обе ссылки ведут на одну и ту же страницу. Как Вы предллагаете вычислить идентичность первой и второй строки? Я, например, не вижу корректного способа. Конечно, Вы можете возразить "А с какого перепугу пользователь должен переходить по ссылке index.php?module=news&nid=2??? Ведь он же только кликает на менюшке!". Но тогда у меня тоже вопрос: нафига нужно сравнивать какие-то параметры, если можно сравнить REQUEST_URI и ссылку, которая генерируется меню? |
|
|
||
Youshi |
2009-12-22, 10:12
Сообщение
#15
|
|
Любитель Группа: Разработчики Сообщений: 118 Регистрация: 2008-12-14 Из: Россия. Астрахань Репутация: нет Всего: 8 |
Если блок статичен и набивается вручную - вообще без вариантов. Если создается в админке, можно сделать какие-то доп. поля, указывающие на принадлежность ссылки (при этом не обязательно просить юзера их заполнить. распарсить ссылку можно и самостоятельно). Если же он каким-то образом генерится системой автоматически - тут все просто.
Я ж говорил, что пока не имею представления, как именно работает блок, и высказывал то, как я это вижу. |
|
|
||
Jon |
2009-12-28, 16:56
Сообщение
#16
|
|
Любитель Группа: Бета-тестеры Сообщений: 282 Регистрация: 2009-07-12 Из: Москва Репутация: нет Всего: 0 |
Пример подсветки меню http://www.dejurka.ru/
|
|
|
||
Jon |
2010-03-03, 23:08
Сообщение
#17
|
|
Любитель Группа: Бета-тестеры Сообщений: 282 Регистрация: 2009-07-12 Из: Москва Репутация: нет Всего: 0 |
Напоминаю...
Еще 4 клиента хотят видеть на сайте такую опцию... Одному из них пришлось делать сайт на джумле. Где это поддерживается. |
|
|
||
Alexander |
2010-03-06, 3:45
Сообщение
#18
|
|
Eleanor developer Группа: Администраторы Сообщений: 5 262 Регистрация: 2008-11-11 Из: Николаев Версия системы: RC5 Репутация: нет Всего: 67 |
Jon, есть замечательная функция strcasecmp... Ею можно сравнивать запрос прользователя и ссылку. Такое Вас устроит?
|
|
|
||
Jon |
2010-03-29, 14:33
Сообщение
#19
|
|
Любитель Группа: Бета-тестеры Сообщений: 282 Регистрация: 2009-07-12 Из: Москва Репутация: нет Всего: 0 |
И как ей пользоваться?
|
|
|
||
termit |
2010-03-29, 15:32
Сообщение
#20
|
|
Опытный Группа: Бета-тестеры Сообщений: 705 Регистрация: 2009-06-02 Из: Житомир Репутация: нет Всего: 11 |
http://php.su/functions/?strcasecmp
То есть этого достаточно чтобы сравнить ссылку блока с [REQUEST_URI] Alexander, А если организовать переменную, которая будет хранить данные о ссылке не в ЧПУ виде. тогда отпадает выше описаных тобою два варианта Сообщение отредактировал termit - 2010-03-29, 15:33 |
|
|
||
Текстовая версия | 0.0392 сек. 11 запросов GZIP включен Сейчас: 2025-01-22, 5:02 |