php добавить класс css в выбранный пункт меню

#php #css #class #dynamic-data

#php #css #класс #динамические данные

Вопрос:

У меня есть меню, сгенерированное в php таким образом.

 <?php 
    while($rowMenu = mysql_fetch_array($rsMenu)){
       $link="category.php?cat=".$rowMenu['MenuItemID'];
       $name = utf8_encode($rowMenu['name']);
?>                    
    <a href="<?php echo $link; ?>"><li><?php echo $name; ?></li></a>                       
<?php 
     }
?>
  

и теперь я хочу добавить цвет фона к элементу текущей страницы.Цвет фона определяется в css ( .productActive )

Я ищу добавить класс css в php, как я делаю с помощью javascript, но не нашел никакого решения, поэтому я сделал так

 <?php 
            $cat=$_GET['cat']; /gets the id from the URL

        while($rowMenu = mysql_fetch_array($rsMenu)){
           $link="category.php?cat=".$rowMenu['MenuItemID'];
           $name = utf8_encode($rowMenu['name']);
    ?>                    
        <a href="<?php echo $link; ?>"><li><?php echo $name; ?></li></a>                       
    <?php

            if($cat == $rowMenu['MenuItemID']) {
          echo"<a href=".$link."><li class='productActive'>".$nome."</li></a>"; 
             }

         }//end of while
    ?>
  

Но таким образом добавьте в меню еще один пункт. он повторяет текущий элемент li. Есть ли другой способ??

Спасибо

Комментарии:

1. Это ваш точный код? Если это так, PHP искажен, и вам повезло, что вы получили какой-либо вывод.

2. Рассмотрите возможность использования if /else, а не только if

3. @ Мистер Разочарование Не понимаю, почему. все работает нормально @Михаил да. Я сделал, как вы сказали. Спасибо

4. Я согласен с г-ном Д. Код плохо отформатирован и перемешан. Есть несколько опечаток (например, одиночная косая черта для комментария и nome вместо имени). Я тоже предвижу будущие ошибки. приведенный ниже код Джулио намного легче читать, даже без комментариев

Ответ №1:

 while($rowMenu = mysql_fetch_array($rsMenu)){
    $link="category.php?cat=".$rowMenu['MenuItemID'];
    $name = utf8_encode($rowMenu['name']);

    if($cat == $rowMenu['MenuItemID']) {
        echo"<a href=".$link."><li class='productActive'>".$name."</li></a>"; 
    } else {
        echo"<a href=".$link."><li>".$name."</li></a>";
    }
}
  

Я думаю, это должно сработать

Ответ №2:

 while($rowMenu = mysql_fetch_array($rsMenu)){
  $link = "category.php?cat=".$rowMenu['MenuItemID'];
  $name = utf8_encode($rowMenu['name']);

  // add active class?
  $class = $cat == $rowMenu['MenuItemID']
         ? ' class="productActive"'
         : '';

  ?>                    
    <li<?= $class; ?>><a href="<?= $link; ?>"><?= $name; ?></a></li>
  <?php
}//end of while
  

Затем, если элемент совпадает, он добавит класс в тег, в противном случае он ничего не добавит.

Хотя я бы предпочел это:

 printf('<li%s><a href="%s">%s</a></li>', $class, $link, $name);
  

ps. Якоря всегда должны быть внутри <li> , а не снаружи.

Комментарии:

1. Голосование без причины? Что было не так в приведенном выше коде?