CMS Eleanor - Поиск
Полная версия этой страницы: Официальный форум Eleanor CMS » Подсветка пункта меню и текущая страница
Официальный форум Eleanor CMS » Поддержка пользователей системы Eleanor CMS » Запросы функционала
Страницы: 1, 2
Jon
3я из 5 заказчиков требуют чтобы на их сайтах всегда подсвечивались пункты меню, показывающие где юзер находится.
Допустим, человек в "контактах", то и ссылка "контакты" светится определённым цветом и не кликабельна.
Такое предусмотрено в ДЛЕ и в многих системах.

Думаю, стоит это включить в функционал "верхнего меню".
Alexander
И как Вы предлагаете подсвечивать нужный пункт меню? По какому алгоритму? Ведь в новости можно попасть по любой из ссылок ниже:

/news
/news.html
/news/
index.php?news
index.php?module=news
Youshi
А я все искал, к чему бы придраться :)
И вот оно!

Сань, человек дело говорит. А как это дело претворить в жизнь - твоя головная боль.
И если твоя ЦМС не способна выполнить тривиальную задачу, имеет смысл задать себе вопрос: "А что же я не так в ней сделал?"
А затем второй: "Как это исправить?"
Jon
Цитата (Alexander @ 20.12.2009, 23:31)
И как Вы предлагаете подсвечивать нужный пункт меню? По какому алгоритму? Ведь в новости можно попасть по любой из ссылок ниже:

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

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

Крайний случай, можно всё сделать стилями как тут http://www.sohtanaka.com/
Diego
Лично я сделал подсветку по урлу, т.е. что-то типа такого
$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
Цитата (Diego @ 21.12.2009, 16:49)
Лично я сделал подсветку по урлу, т.е. что-то типа такого
$title = ($_SERVER['REQUEST_URI'] == '/'.$v2['url']) ? ''.$v2['title'].'' : $v2['title'];
ну и там соответствующие стили для <span>

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

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


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

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


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

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


По цепочке...
Блок у системы, система у модуля и т. д.
Ну а если система такого не умеет - да. Придется изобретать костыли...
Alexander
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.
Youshi
Еще раз повторю: не нужно ничего сравнивать и ничего определять. У тебя уже ВСЕ определено. Единственное, что нужно сделать - это в соответствующем месте модуля как-то обозначить действие, выполняемое им в данный момент. (хотя конечно я пока не знаю, в какой последовательности у тебя обрабатываются блоки и модули, и можно ли такое проделать).

Да. как именно и откуда блок берет данные для меню, я тоже пока не представляю. Но алгоритм нахождения мне видится таким:

Далее в процессе обработки блока, он делает запрос к Mainclass например, Mainclass в свою очередь считывает необходимые данные из выполняемого модуля. На их основе формируется массив
Цитата
array('mdoule'=>'news',array('do'=>'add'))
и возвращается блоку. Ну а дальше уже дело техники...

Если же поступить, как хочешь ты, то придется учитывать настройки ЧПУ, возможность появления в URI посторонних данных и т. п....
Jon
Цитата (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. И даже двойной... На вкладку и на подвкладку.
Alexander
Цитата (Youshi @ 21.12.2009, 21:36)
Единственное, что нужно сделать - это в соответствующем месте модуля как-то обозначить действие, выполняемое им в данный момент.

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

Ладно, вижу меня не понимают. Приведем пример. Значит ссылку пункта меню сделали такой news/категория/новость.html. Пользователь перешел по ссылке index.php?module=news&nid=2. Обе ссылки ведут на одну и ту же страницу. Как Вы предллагаете вычислить идентичность первой и второй строки? Я, например, не вижу корректного способа.

Конечно, Вы можете возразить "А с какого перепугу пользователь должен переходить по ссылке index.php?module=news&nid=2??? Ведь он же только кликает на менюшке!". Но тогда у меня тоже вопрос: нафига нужно сравнивать какие-то параметры, если можно сравнить REQUEST_URI и ссылку, которая генерируется меню?
Youshi
Если блок статичен и набивается вручную - вообще без вариантов. Если создается в админке, можно сделать какие-то доп. поля, указывающие на принадлежность ссылки (при этом не обязательно просить юзера их заполнить. распарсить ссылку можно и самостоятельно). Если же он каким-то образом генерится системой автоматически - тут все просто.

Я ж говорил, что пока не имею представления, как именно работает блок, и высказывал то, как я это вижу.
Jon
Пример подсветки меню http://www.dejurka.ru/
Jon
Напоминаю...
Еще 4 клиента хотят видеть на сайте такую опцию...
Одному из них пришлось делать сайт на джумле. Где это поддерживается.
Alexander
Jon, есть замечательная функция strcasecmp... Ею можно сравнивать запрос прользователя и ссылку. Такое Вас устроит?
Jon
И как ей пользоваться?
termit
Цитата (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
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.