Выделение активного пункта меню (частный случай)

Константин

Новичок
Выделение активного пункта меню (частный случай)

Доброго времени суток!
Ребят, может вы сталкивались с подобными проблемами...
--------------------------------------------------------------------
Расскажу с начала:
Сайт, написанный мною, состоит из 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 меняется и выделение изчезает):
PHP:
  // моё расположение или то  что отображается в строке адреса браузера
  $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" и выделен будет совсем другой пункт меню, нежели чему принадлежит страница.
--------------------------------------------------------------------

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

dimagolov

Новичок
писать каждому пункту меню в отдельное поле в базе полный список его предков и при чтении из базы в начале строить ассоциативный массив с выводимыми пунктами, при нахождении текущего подсвечивать всез его предков (в массиве), потом выводить html из массива уже.
 

С.

Продвинутый новичок
Не все ли тебе равно, если какой лихой пользователь изменит флаг? Кому от этого плохо, кроме самого пользователя?

А вообще у тебя внутри скрипта должно быть четко определено, что page=2 соответствует такой-то пункт и подпункт.
 
Сверху