简体   繁体   中英

creating class active dynamically in php

I am creating a menu dynamically based on the categories registered on the dataBase, What I need is: When someone click in the link, this option should have the css class 'active', showing in with page the user is and even the pages are created dynamically. I have no idea how to do this because I am php student and I couldn't find this information in google for "Dynamically menus" Thank you very much.

<nav class="menu">
   <ul class="list">
      <li class="line"><a id="item" href="index.php">Home</a></li>

       <?php
       $categories = $db->select("select * from tbl_category");
       if($categories){
          while ($result = $categories->fetch_assoc()){
             echo <<<HTML
             <li id="line" ><a class="item" href="categories.php?category=$result[id]">$result[name]</a></li>
HTML;
          }
       }
       ?>
   </ul>
<nav>

First of all, you're looping through that while loop and adding the id of "line" to each and every <li> element. I suggest you create unique id's for each list item. I don't necessary advocate using the code the way you have it, just as an example, here's your code edited to do just that:

if($categories){
      $i = 1;
      while ($result = $categories->fetch_assoc()){
         $i++;
         echo <<<HTML
         <li id="line$i" ><a class="item" href="categories.php?category=$result[id]">$result[name]</a></li>
         HTML;
      }
}

Then when someone clicks on your link, just use jQuery with something like this:

$(".item").click(function() {
    $(this).parent('li').addClass('active');
});

Try something like that:

<nav class="menu">
   <ul class="list">
      <li class="line"><a id="item" href="index.php">Home</a></li>

       <?php
       $current_page = isset($_GET['category']) ? $_GET['category']: -1;

       $categories = $db->select("select * from tbl_category");
       if($categories){
          while ($result = $categories->fetch_assoc()){
             echo '<li id="line">';
             if($result['category'] === $current_page) {
                // If we're currently in the active page then add the active class to the <a>
                echo   '<a class="item active" href="categories.php?category='. $result[id] .'">';
             } else {
                echo   '<a class="item" href="categories.php?category='. $result[id] .'">';
             }
             echo       $result['name'];
             echo   '</a>';
             echo  '</li>';
          }
       }
       ?>
   </ul>
<nav>

Thank you all for help, based on your code, I solved doing this:

menu.php:

<nav class="menu" id="menu">

   <ul id="list" class="list">

      <li id="line" class="<?php if($presentPage == '0')echo 'active';?>"><a id="item" class="item" href="index.php">Home</a></li>

   <?php
   function checked($pp, $id){
      if($pp == $id){
         $status = 'active';
         return $status;
      }
   }
   $query = "select * from tbl_category";
   $category = $db->select($query);
   if($category){
      while ($result = $category->fetch_assoc()){

         echo "
            <li id='line' class='".checked($presentPage, $result['id'])."'><a id='item' class='item' href='categories.php?category=".$result['id']."'>".$result['name']."</a></li>
         ";//end echo

      }//end while
   }//end if
   ?>
   </ul>
</nav>

In my index.php:

  <?php $presentPage = 0;?>
  <?php require_once 'header.php';?>
  <?php require_once 'menu.php';?>

and in my categories.php:

  <?php
     if (!isset($_GET['category']) || $_GET['category'] == NULL) {
        $presentPage = 0;
     }else{
        $presentPage = intval($_GET['category']);//just to make sure  that the variable is a number
     }
  ?>

  <?php require_once 'header.php';?>
  <?php require_once 'menu.php';?>
  ///...my code...

and in my CSS of course:

.active{
   background: linear-gradient(#821e82, #be5abe);
}

Thats is working perfectly for me, Thank for all help.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM