2016-06-09 102 views
0

我正在基于dataBase上注册的类别动态创建菜单,我需要的是: 当有人点击链接时,此选项应该有css类'active',显示在用户所在的页面,甚至页面都是动态创建的。 我不知道如何做到这一点,因为我是PHP的学生,我无法在谷歌找到“动态菜单”的信息非常感谢。在php中动态创建动态类

所有的
<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> 

回答

0

首先,你通过while回路循环和加入“行”的ID为每一位<li>元素。我建议你为每个列表项目创建唯一的ID。我没有必要提倡使用的代码,你有它的方式,只是作为一个例子,这里是你的代码编辑,以做到这一点:

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; 
     } 
} 

然后当有人点击你的链接,只需使用jQuery的东西,如这样的:

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

尝试类似的东西:

<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> 
0

谢谢大家的帮助,根据你的代码,我解决了这样:

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> 

在我的index.php:

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

,并在我的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... 

在我当然CSS:

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

这对我来说是完美的,感谢所有的帮助。