2016-06-09 9 views
0

Ich erstelle ein Menü dynamisch basierend auf den Kategorien auf der dataBase registriert, Was ich brauche, ist: Wenn jemand in den Link klicken, sollte diese Option die CSS-Klasse 'aktiv', in angezeigt werden Mit der Seite ist der Benutzer und sogar die Seiten werden dynamisch erstellt. Ich habe keine Ahnung, wie man das macht, weil ich PHP-Student bin und ich konnte diese Informationen in Google für "Dynamically menus" nicht finden Vielen Dank.creating class dynamisch in 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> 

Antwort

0

Zu allererst Sie Looping durch diese while Schleife und das Hinzufügen der ID von „Linie“ zu jedem einzelnen <li> Elemente. Ich schlage vor, Sie erstellen eindeutige IDs für jeden Listeneintrag. Ich weiß nicht notwendig Anwalt mit dem Code so, wie Sie es haben, nur als Beispiel, hier ist der Code zu tun bearbeitet nur das:

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

Dann, wenn jemand auf Ihren Link klickt, benutzen Sie einfach jQuery mit so etwas wie dies:

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

versuchen, etwas wie folgt aus:

<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

Vielen Dank für Hilfe, basierend auf Ihren Code, ausgewertete tun ich dies:

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 meiner index.php:

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

und in meinem 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... 

und in meinem CSS natürlich:

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

Das funktioniert perfekt für mich, Danke für die Hilfe.