Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Как сделать подсветку для активного пункта меню?


Автор: semjaza 15.1.2014, 21:36
есть несколько функций-получение массива и вывод полученного с помощью рекурсивной функции..вот код функций: 
Код

//Функция получения массива каталога
function get_cat() {
//запрос к базе данных
$sql = "SELECT * FROM menu";
$result = mysql_query($sql);
if(!$result) {
  return NULL;
}
$arr_cat = array();
if(mysql_num_rows($result) != 0) {

  //В цикле формируем массив
  for($i = 0; $i < mysql_num_rows($result);$i++) {
     $row = mysql_fetch_array($result,MYSQL_ASSOC);

     //Формируем массив где ключами являются айдишники на родительские категории
     if(empty($arr_cat[$row['parent_id']])) {
        $arr_cat[$row['parent_id']] = array();
     }   
     $arr_cat[$row['parent_id']][] = $row;   
  }
  //возвращаем массив
  return $arr_cat;
 }
}

//вывод каталогa с помощью рекурсии      
function view_cat($arr,$parent_id = main) {

//Условия выхода из рекурсии
if(empty($arr[$parent_id])) {
  return;
}

echo "<ul>";
//перебираем в цикле массив и выводим на экран
for($i = 0; $i < count($arr[$parent_id]);$i++) {
  echo "<li><a href=\"?category_id={$arr[$parent_id][$i]['title_url']}&parent_id=        {$parent_id}\""
    .($category_id == $arr[$parent_id][$i]['title_url'] ? ' class="menu-active"':'')
    .">{$arr[$parent_id][$i]['title']}</a>";
  //рекурсия - проверяем нет ли дочерних категорий
  view_cat($arr,$arr[$parent_id][$i]['title_url']);
  echo "</li>";
  }
  echo "</ul>";

 }


вывод происходит в файле site.php, примерно так-
Код

//получаем массив каталога
 $result = get_cat();

 //Выводим каталог на экран с помощью рекурсивной функции
 echo '<div id="header">';
 echo '<img class="logo" src="images/logo.png">';
 echo '<img class="yab" src="images/yab1.png">';
 echo '<div id="menu">';
 $menu = view_cat($result);
 echo '</div>';
 echo '</div>';


крутил разные значения,например

Код

$category_id == $arr[$parent_id][$i]['title_url']


или

Код

$category_id == $_GET['title_url']


ничего не выходит...помогите понять как задать условие правильно-чтоб активному пункту меню соответствовал класс со стилем:"menu-active"...в параметры url попадает значение :
Код

$category_id == $arr[$parent_id][$i]['title_url']


....как я понимаю...я совсем новичок ....подскажите почему не выходит?...заранее спасибо...

Автор: cia 16.1.2014, 12:22
А что не выходит-то? В чём конкретно проблема? Стиль "menu-active" лучше прикручивать к тегу <li>, а не <a>.

Автор: semjaza 16.1.2014, 17:24
в css  данному классу прописано:
Код

.menu-active{
    color:#ffffff!important;
}


значит по идее если его применить к тегу a в таком виде как я описал,то активный пункт меню будет написан белым цветом....но этого не происходит(((я практически уверен что сравниваю не те параметры вот тут-
Код

$category_id == $arr[$parent_id][$i]['title_url']


хотя может я и не прав)подскажите может действительно ошибочно?

Автор: cia 16.1.2014, 17:34
В функции view_cat нет объявления переменной $category_id. Вместо неё вероятно нужно использовать $_GET['category_id']. Вот так:
Код

$menu=$arr[$parent_id];
foreach($menu as $item) {
  echo '<li><a href="?category_id='.$item['title_url'].'&parent_id='.$parent_id.'"'
    .($_GET['category_id'] == $item['title_url'] ? ' class="menu-active"':'')
    .">'.$item['title'].'</a>';
  //рекурсия - проверяем нет ли дочерних категорий
  view_cat($arr,$item['title_url']);
  echo "</li>";
  }


код чуть исправил чтобы был более читаемым.

Автор: semjaza 16.1.2014, 18:24
не могу разобрать)))
по-моему в способе который Вы описали-формирование меню протекает не внутри функции?так?

Добавлено через 5 минут и 22 секунды
всё понял)))спасибо огромное за помощь))в параметр url попадает значение 
Код

$_GET['category_id']


вот и получается что сравнивать нужно 
Код

$_GET['category_id'] == $arr[$parent_id][$i]['title_url']



всё заработало)))
ещё раз спасибо...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)