2013-04-12 7 views
8

Hallo Ich habe ein Menü auf meiner Seite auf jeder Seite, ich möchte es in seine eigene menu.php Datei setzen, aber ich bin mir nicht sicher, wie Sie die class = setzen "Aktiv" für welche Seite ich bin. Hier ist mein Code: Bitte helfen Sie mirWie setze ich die aktuelle Seite "aktiv" in PHP

menu.php:

<li class=" has-sub"> 
    <a class="" href="javascript:;"><i class=" icon-time"></i> Zeiten<span class="arrow"></span></a> 
    <ul class="sub"> 
     <li><a class="" href="offnungszeiten.php">Öffnungszeiten</a></li> 
     <li><a class="" href="sauna.php">Sauna</a></li> 
     <li><a class="" href="frauensauna.php">Frauensauna</a></li> 
     <li class=""><a class="" href="custom.php">Beauty Lounge</a></li> 
     <li><a class="" href="feiertage.php">Feiertage</a></li> 
    </ul> 
</li> 
+0

meinst du aktive Verbindung?oder den Link anders machen? abhängig von der aktuellen Seite? –

+0

benutze $ _SERVER ['REQUEST_URI'] .. um den aktuellen Seitenlink zu bekommen – alwaysLearn

+0

bitte sende deine URL wenn du auf irgendeiner Seite wie zB offnungszeiten oder sauna etc. bist –

Antwort

10

Es wäre einfacher, wenn Sie eine Reihe von Seiten in Ihrem Skript bauen würden und gibt es mit der aktuell aktiven Seite der Ansicht Datei zusammen:

//index.php or controller 

$pages = array(); 
$pages["offnungszeiten.php"] = "Öffnungszeiten"; 
$pages["sauna.php"] = "Sauna"; 
$pages["frauensauna.php"] = "Frauensauna"; 
$pages["custom.php"] = "Beauty Lounge"; 
$pages["feiertage.php"] = "Feiertage"; 

$activePage = "offnungszeiten.php"; 


//menu.php 
<?php foreach($pages as $url=>$title):?> 
    <li> 
     <a <?php if($url === $activePage):?>class="active"<?php endif;?> href="<?php echo $url;?>"> 
     <?php echo $title;?> 
     </a> 
    </li> 

<?php endforeach;?> 

Mit einem Template-Engine wie Smarty Ihr Menü.php aussehen würde noch schöner:

//menu.php 
{foreach $pages as $url=>$title} 
    <li> 
     <a {if $url === $activePage}class="active"{/if} href="{$url}"> 
     {$title} 
     </a> 
    </li> 
{/foreach} 
12

Erstellen Sie eine Variable in jedem Ihrer PHP-Datei wie:

$activePage = "sauna"; (different for each page) 

dann diese Variable überprüfen in Ihrem html Seite wie diese

<?php if ($activePage =="sauna") {?> 
class="active" <?php } ?> 
1

dort ich s zwei Dinge, die Sie tun können.

erste können Sie den aktuellen Dateinamen der PHP-Datei lesen Sie verlangen von $_SERVER['PHP_SELF'] oder $_SERVER['REQUEST_URI'] oder andere $_SERVER global Variablen verwenden, die Sie verwenden können, die aktuelle Seite zu lesen und vergleichen Sie es mit der URL des Link, so etwas wie dieses

<a href="offnungszeiten.php" <?php if($_SERVER['PHP_SELF']=='offnungszeiten.php'){ ?>class="activatepage" <?php } ?> > 
     Öffnungszeiten 
    </a> 

die zweite ist eine Variable erstellen, die Sie global lesen können, die den aktuellen Namen der aktuellen Seite, wie diese

<?php 
$cur_page ="offnungszeiten" 
?> 

<a href="offnungszeiten.php" <?php if($cur_page=='offnungszeiten'){ ?>class="activatepage" <?php } ?> > 
Öffnungszeiten 
</a> 
+0

Dies ist die beste Antwort (der erste). – Lesik2008

3

Setzen Sie alle den Code unten inspeichern würdeund alles wird erledigt.

// function to get the current page name 
function PageName() { 
    return substr($_SERVER["SCRIPT_NAME"],strrpos($_SERVER["SCRIPT_NAME"],"/")+1); 
} 

$current_page = PageName(); 

die oben Verwenden Sie die aktuelle Seite Name dann setzen diese in Ihrem Menü

<li><a class="<?php echo $current_page == 'offnungszeiten.php' ? 'active':NULL ?>" href="offnungszeiten.php">Öffnungszeiten</a></li> 
<li><a class="<?php echo $current_page == 'sauna.php' ? 'active':NULL ?>" href="sauna.php">Sauna</a></li> 
<li><a class="<?php echo $current_page == 'frauensauna.php' ? 'active':NULL ?>" href="frauensauna.php">Frauensauna</a></li> 
<li><a class="<?php echo $current_page == 'custom.php' ? 'active':NULL ?>" href="custom.php">Beauty Lounge</a></li> 
<li><a class="<?php echo $current_page == 'feiertage.php' ? 'active':NULL ?>" href="feiertage.php">Feiertage</a></li> 

wo active ist der Name der Klasse zu erhalten, die Ihre Menüpunkt

0

Seite senden Name Highlight wird in Abfragezeichenfolge und überprüfen Sie es auf jeder Seite, indem Sie die Variable abrufen.

+0

Wirklich? Dies ist eine Antwort? – asprin

1

Ich habe es mit PHP auf diese Weise getan,

function createTopNav($active) 
{ 
    $pages = array(
     array(
      'name'=>'Home', 
      'link'=>'index' 
     ), 
     array(
      'name'=>'Smartphone', 
      'link'=>'smartphone' 
     ), 
     array(
      'name'=>'Tablet', 
      'link'=>'tablet' 
     ), 
     array(
      'name'=>'About Us', 
      'link'=>'about' 
     ), 
     array(
      'name'=>'Contact Us', 
      'link'=>'contact' 
     ) 
    ); 
    $res = "<ul>"; 
    $activePage = ""; 
    foreach($pages as $key=>$val) 
    { 
     if($val['link']==$active) 
     { 
      $res.= "<li><a href='".$val['link']."' class='active' >".$val['name']."</a></li>"; 
     } 
     else 
     { 
      $res.= "<li><a href='".$val['link']."'>".$val['name']."</a></li>";   
     } 
    } 
    $res.="</ul>"; 
    return $res; 
} 

Und dann wird diese Funktion

echo createTopNav("about"); 

und die Ausgabe so zu nennen

<ul> 
    <li><a href="index">Home</a></li> 
    <li><a href="smartphone">Smartphone</a></li> 
    <li><a href="tablet">Tablet</a></li> 
    <li><a href="about" class="active">About Us</a></li> 
    <li><a href="contact">Contact Us</a></li> 
</ul> 
+0

Was ist der Sinn dieses? Der springende Punkt ist, das Menü in einer separaten PHP-Datei zu haben. Wenn Sie sowieso das gesamte Menü auf jeder Seite einbinden, brauchen Sie nicht die 'php' Funktion – CodyBugstein

0

Einfache Lösung:

Ausleihen des Codes von asprin oben;

Erstellen Sie eine neue Datei menu.php, wo Sie die einzige Kopie des Menüs speichern. In dieser Datei erstellen Sie eine Funktion addMenu($pageName), die einen Parameter als Seitenname verwendet und nach dem Hinzufügen des aktuellen Tags eine Zeichenfolge aus dem Menü zurückgibt. In Ihrem HTML-Code würden Sie include(menu.php) und dann die Funktion addMenu mit dem aktuellen Seitenname aufrufen. So wird Ihr Code wie folgt aussehen:

menu.php

 <?php 

     function addMenu($pageName){ 
      $menu = 

       '<ul> 
        <li><a href="Öffnungszeiten.php"' . ($pageName == "Öffnungszeiten" ? "class=\"current\"" : "") . '><span>Öffnungszeiten</span></a></li> 
        <li><a href="sauna.php"' . ($pageName == "Öffnungszeiten" ? "class=\"current\"" : "") . '><span>Sauna</span></a></li> 
        <li><a href="frauensauna.php"' . ($pageName == "Frauensauna" ? "class=\"current\"" : "") . '><span>Frauensauna</span></a></li> 
        <li><a href="custom.php" ' . ($pageName == "lounge" ? "class=\"current\"" : "") . '><span>Beauty Lounge</span></a></li> 
        <li><a href="Feiertage.php"' . ($pageName == "feiertage" ? "class=\"current\"" : "") . '><span>Feiertage</span></a></li>                     
       </ul>'; 
      return $menu; 
    } 
     ?> 

Und in Ihrem HTML, sagen diese:

<div id="menu"> 
      <?php 
       include('menu.php'); 
       echo addMenu("index"); 
       echo $hello;  
      ?> 
     </div> 
0

ich diese mit jQuery/Javascript gelöst, indem Sie den Code unten jeder Lauf Zeit, meint jede Seite geladen wird:

$(document).ready(function() {  
    //Get CurrentUrl variable by combining origin with pathname, this ensures that any url appendings (e.g. ?RecordId=100) are removed from the URL 
    var CurrentUrl = window.location.origin+window.location.pathname; 
    //Check which menu item is 'active' and adjust apply 'active' class so the item gets highlighted in the menu 
    //Loop over each <a> element of the NavMenu container 
    $('#NavMenu a').each(function(Key,Value) 
     { 
      //Check if the current url 
      if(Value['href'] === CurrentUrl) 
      { 
       //We have a match, add the 'active' class to the parent item (li element). 
       $(Value).parent().addClass('active'); 
      } 
     }); 
}); 

Diese Implementierung übernimmt Ihr Menü des ‚NavMenu‘ ID hat, und verwendet http://hostname/scriptname.php href Attribute wie folgt:

<ul id="NavMenu"> 
    <li><a href="http://localhost/index.php">Home</a></li> 
    <li><a href="http://localhost/smartphone.php">Smartphone</a></li> 
    <li><a href="http://localhost/tablet.php">Tablet</a></li> 
    <li><a href="http://localhost/about.php" class="active">About Us</a></li> 
    <li><a href="http://localhost/contact.php">Contact Us</a></li> 
</ul> 

die Javascript Kommentare lesen, um zu sehen, was los ist. Wenn Sie ein anderes href-Layout bevorzugen (wie in Ihrem ursprünglichen Beispiel), müssen Sie mit der CurrentUrl-Variable ein wenig spielen, um dasselbe Layout wie Ihre href-Attribute zu verwenden.

Für mich war dies die einfachste Lösung, da ich eine bestehende Seiten mit einem großen Menü und vielen Seiten hatte, und wollte vermeiden, dass alle Seiten geändert werden müssen. Dies erlaubt mir, einen Stück JavaScript-Code in die Header-Datei (die bereits eine zentrale Datei war) einzufügen, die das Problem für alle existierenden Seiten löst.

0

Ein bisschen spät am Ball, aber ich musste das selbst lösen und endete mit this Javascript method, mit einer kleinen Änderung. Dies hat den Vorteil, dass der aktuelle Code nicht viele Änderungen erfordert, führen Sie einfach das Skript aus und voila.

window.onload = activateCurrentLink; 

function activateCurrentLink(){ 
    var a = document.getElementsByTagName("A"); 
    for(var i=0;i<a.length;i++) 
     if(a[i].href == window.location.href.split("#")[0]) 
      a[i].className = 'activelink'; 
} 
0

können Sie

<?php 
function active($current_page){ 
    $page = $_GET['p']; 
    if(isset($page) && $page == $current_page){ 
     echo 'active'; //this is class name in css 
    } 
} 
?> 
<ul> 
    <li><a class="<?php active('page1');?>" href="?p=page1">page1</a></li> 
    <li><a class="<?php active('page2');?>" href="?p=page2">page2</a></li> 
    <li><a class="<?php active('page3');?>" href="?p=page3">page3</a></li> 
    <li><a class="<?php active('page4');?>" href="?p=page4">page4</a></li> 
</ul> 
8

verwenden diese Methode wird die aktuelle Seite mit PHP, das es ein Wort in diesem Fall aktiv und Orte in der Klasse-Parameter übergeben wird die Seite aktiv zu setzen.

<?php 
function active($currect_page){ 
    $url_array = explode('/', $_SERVER['REQUEST_URI']) ; 
    $url = end($url_array); 
    if($currect_page == $url){ 
     echo 'active'; //class name in css 
    } 
} 
?> 
<ul> 
    <li><a class="<?php active('page1.php');?>" href="http://localhost/page1.php">page1</a></li> 
    <li><a class="<?php active('page2.php');?>" href="http://localhost/page2.php">page2</a></li> 
    <li><a class="<?php active('page3.php');?>" href="http://localhost/page3.php">page3</a></li> 
    <li><a class="<?php active('page4.php');?>" href="http://localhost/page4.php">page4</a></li> 
</ul> 
+0

guten Job iraqi_love4ever – Jayesh

Verwandte Themen