[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выделение пуктов меню в зависимости от нахождения
__kosmas__
Доброго времени суток!
Ребят, может вы сталкивались с подобными проблемами...
--------------------------------------------------------------------
Расскажу с начала:
Сайт, написанный мною, состоит из 3 html частей.
1 часть: лого + меню
2 часть: открытие таблицы и содержимое
переменной $content
3 часть: закрытие таблицы


2 и 3 часть на рисунке выделены красной рамкой.
То есть в пределах этой рамки можно засунуть любой html.
--------------------------------------------------------------------






Проблема в следующем:

Мне нужно чтобы когда я захожу в пункт меню, он выделялся и оставался выделенным пока я нахожусь в нем, смотрю его страницы.

То есть, например, если я зашел в <a href='index.php?page=2'>Пункт 1</a>(см. рис.), загрузилась страница 'index.php?page=2', а затем нажал на ссылку <a href='index.php?page=10'>Ссылка 1</a>, которая находиться на странице "index.php?page=2", но при этом "Пункт 1" остался выделенным, так как я нахожусь внутри него.
То есть это совсем разные страницы, которых ничего не связывает, кроме как путь как добраться до них.

<a href='index.php?page=2'>Пункт 1</a> -> <a href='index.php?page=10'>Ссылка 1</a>

Вот что мне необходимо, схематично:

Пункт 1
_________сслыка 1
_________ссылка 2
Пункт 2
Пункт 3
Пункт 4


Вот как меню строится (в этом коде реализуется только выделение основного меню, идет сравнение location с адресом ссылки каждого пункта меню, и если они совпадают, то выделяем этот пункт, но при переходе на другую страницу location меняется и выделение изчезает):
Код
  // моё расположение или то  что отображается в строке адреса браузера
  $this = eregi_replace("^.*\/", "", @$_SERVER['REQUEST_URI']);  
  $menu = "";
  $result = sql_query("SELECT link_title, link_addr FROM menu", $dbi);
  while(list($link_title, $link_addr) = sql_fetch_row($result))
  {    
       if($link_addr != "" && $link_title != "")
      {
          $bold = "";
          if($this == $link_addr)
         {
                 $bold = "style=\"font-weight:bold;\"";
         }
         $menu .= "<a class=\"top_menu\" ".$bold." href=\"".$link_addr."\">".$link_title."</a> ".$exploder."\n";

      }
}



Я попробовал сделать это 2 способами:
1. В cookies засовываю мой location. То есть пока я нахожусь в одном из пунктов меню, пункт меню выделяется и location не меняется.
Работает, но кукис не успевает меняться и выделяется предыдущий пункт меню, а потом тот куда зашел. Такая же ситуация и с $_SESSION[] - не успевает

2. Сделал это с флагами.
То есть каждому пункту меню соответствует свой идентификатор, передаваемый методом GET

Например: <a href='index.php?page=2&flag=punkt1'>Пункт 1</a>

И если заходить на любые страницы внутри сайта, в ссылке на которую будет присутствовать "flag=punkt1", то этот пункт будет выделяться.
На этой идее и остановился, но мне она очень не нравиться, так как любой пользователь сможет изменить "flag" и выделен будет совсем другой пункт меню, нежели чему принадлежит страница.
--------------------------------------------------------------------

Очень прошу помочь мне с реализацией этой задачи! sad.gif







Спустя 1 час, 4 минуты, 39 секунд (20.10.2007 - 16:42) Fedot написал(а):
Лично на мой субъективный взгляд тебе было бы лучше сделать так что бы пункты меню обозначались бы page, ссылки как-то иным способом subpage например.
По твоему примеру:
<a href='index.php?page=2'>Пункт 1</a> -> <a href='index.php?page=2&subpage=10'>Ссылка 1</a>
А то раз Пункт1 не имеет ничего общего с Ссылка1, то зачем они обе просто меняют page, а если пунктов меню станет непредсказуемо больше, это ж у тебя такая белиберда в коде будет что мама не горюй.
Плюс если у тебя они будут обозначаться по разному ты всегда спокойно сможешь определять где пользователь сейчас находится.

Спустя 1 день, 17 часов, 43 минуты, 22 секунды (22.10.2007 - 10:25) zaxar написал(а):
Цитата
любой пользователь сможет изменить "flag" и выделен будет совсем другой пункт меню, нежели чему принадлежит страница.


Поверь, пользователь не будет менять "flag", так как ему это просто на хрен не надо. Он даже не заметит. Посуди сам по себе. Ты, когда лазишь по сайтам, часто меняешь какие-либо параметры в адресной строке?

Спустя 3 дня, 5 часов, 6 минут, 45 секунд (25.10.2007 - 15:32) kyryll написал(а):
А в чем собственно проблема. Если это статическое, как я понял, меню, то получай переменную $_GET и анализируй её. Если пункт меню совпадает с переменной, то выводить её жирным текстом. Например, через switch case. А, если меню динамическое, то проверяй условие в циклке вывода.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.