X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )

2 страниц Открыть меню   1 2 >  
Ответить в данную темуНачать новую тему
> Подсветка пункта меню и текущая страница
Jon
сообщение 2009-12-20, 20:19
Сообщение #1
Любитель
Иконка группы

Группа: Бета-тестеры
Сообщений: 282
Регистрация: 2009-07-12
Из: Москва

Репутация:   нет  
Всего: 0


3я из 5 заказчиков требуют чтобы на их сайтах всегда подсвечивались пункты меню, показывающие где юзер находится.
Допустим, человек в "контактах", то и ссылка "контакты" светится определённым цветом и не кликабельна.
Такое предусмотрено в ДЛЕ и в многих системах.

Думаю, стоит это включить в функционал "верхнего меню".
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2009-12-20, 22:31
Сообщение #2
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 261
Регистрация: 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


Цитата (Alexander @ 20.12.2009, 23:31)
И как Вы предлагаете подсвечивать нужный пункт меню? По какому алгоритму? Ведь в новости можно попасть по любой из ссылок ниже:

/news
/news.html
/news/
index.php?news
index.php?module=news

Просто. Пусть подсвечивается только тот вариант, на который указывается ссылка.

Крайний случай, можно всё сделать стилями как тут http://www.sohtanaka.com/
Перейти в начало страницы
+Цитировать сообщение
Diego
сообщение 2009-12-21, 15:49
Сообщение #5
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 298
Регистрация: 2008-12-13
Из: Ярославль

Репутация:   нет  
Всего: 14


Лично я сделал подсветку по урлу, т.е. что-то типа такого
$title = ($_SERVER[&#39;REQUEST_URI&#39;] == &#39;/&#39;.$v2[&#39;url&#39;]) ? &#39;<span>&#39;.$v2[&#39;title&#39;].&#39;</span>&#39; : $v2[&#39;title&#39;];

ну и там соответствующие стили для <span>
Перейти в начало страницы
+Цитировать сообщение
Jon
сообщение 2009-12-21, 17:53
Сообщение #6
Любитель
Иконка группы

Группа: Бета-тестеры
Сообщений: 282
Регистрация: 2009-07-12
Из: Москва

Репутация:   нет  
Всего: 0


Цитата (Diego @ 21.12.2009, 16:49)
Лично я сделал подсветку по урлу, т.е. что-то типа такого
$title = ($_SERVER['REQUEST_URI'] == '/'.$v2['url']) ? ''.$v2['title'].'' : $v2['title'];
ну и там соответствующие стили для <span>

поподробнее плиз )
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2009-12-21, 19:21
Сообщение #7
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 261
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


Цитата (Youshi @ 21.12.2009, 9:23)
И если твоя ЦМС не способна выполнить тривиальную задачу, имеет смысл задать себе вопрос

Я знаю, как это сделать так, чтобы пользователю понравилось. Но не считаю это решение красивым. Разумеется, можно сравнивать $_SERVER['REQUEST_URI'] с генерируемой ссылкой. Наверное, так и сделаю.
Перейти в начало страницы
+Цитировать сообщение
Youshi
сообщение 2009-12-21, 19:36
Сообщение #8
Любитель
Иконка группы

Группа: Разработчики
Сообщений: 118
Регистрация: 2008-12-14
Из: Россия. Астрахань

Репутация:   нет  
Всего: 8


Цитата (Alexander @ 21.12.2009, 19:21)
Я знаю, как это сделать так, чтобы пользователю понравилось.


Надо делать не только, чтобы нравилось пользователю, но еще и чтобы это все нормально работало без "костылей".

Цитата (Alexander @ 21.12.2009, 19:21)
Но не считаю это решение красивым. Разумеется, можно сравнивать $_SERVER['REQUEST_URI'] с генерируемой ссылкой. Наверное, так и сделаю.


Имхо, неверное решение. Почему, читай предыдущий коммент.
Блок ничего ни с чем сравнивать не должен. Он должен сделать единственную ведь - спросить у системы: "А в каком модуле я нахожусь?" и соответственно менять нужный пункт меню.
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2009-12-21, 20:18
Сообщение #9
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 261
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


Цитата (Youshi @ 21.12.2009, 19:36)
Блок ничего ни с чем сравнивать не должен. Он должен сделать единственную ведь - спросить у системы: "А в каком модуле я нахожусь?" и соответственно менять нужный пункт меню.

ИМХО, мимо. Т.к. пункт меню может указывать не только на модуль. Но и на одну из его страниц. Как в этом случае сравнить?
Перейти в начало страницы
+Цитировать сообщение
Youshi
сообщение 2009-12-21, 20:37
Сообщение #10
Любитель
Иконка группы

Группа: Разработчики
Сообщений: 118
Регистрация: 2008-12-14
Из: Россия. Астрахань

Репутация:   нет  
Всего: 8


Цитата (Alexander @ 21.12.2009, 20:18)
ИМХО, мимо. Т.к. пункт меню может указывать не только на модуль. Но и на одну из его страниц. Как в этом случае сравнить?


По цепочке...
Блок у системы, система у модуля и т. д.
Ну а если система такого не умеет - да. Придется изобретать костыли...
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2009-12-21, 21:03
Сообщение #11
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 261
Регистрация: 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


Цитата (Alexander @ 21.12.2009, 21:03)
Как определить что следующие строки указывают на страницу: 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 261
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


Цитата (Youshi @ 21.12.2009, 21:36)
Единственное, что нужно сделать - это в соответствующем месте модуля как-то обозначить действие, выполняемое им в данный момент.

Все, что у нас есть - это параметры командной строки и страница, которая выводится по этим параметрам.

Ладно, вижу меня не понимают. Приведем пример. Значит ссылку пункта меню сделали такой 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 261
Регистрация: 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


Цитата (Jon @ 2010-03-29, 14:33)
И как ей пользоваться?
http://php.su/functions/?strcasecmp
То есть этого достаточно чтобы сравнить ссылку блока с [REQUEST_URI]

Alexander, А если организовать переменную, которая будет хранить данные о ссылке не в ЧПУ виде. тогда отпадает выше описаных тобою два варианта
Цитата (Alexander @ 2009-12-21, 21:03)
/news/do_add.html
/news/do_add/bla_bla.html


Сообщение отредактировал termit - 2010-03-29, 15:33
Перейти в начало страницы
+Цитировать сообщение

2 страниц Открыть меню   1 2 >
Ответить в данную темуНачать новую тему
0 чел. читают эту тему (гостей: 0, скрытых пользователей: 0)
Пользователей: 0

 
RSS Текстовая версия 0.0548 сек.    11 запросов    GZIP включен    Сейчас: 2021-11-28, 21:18