2013-04-12 21 views
8

Ciao ho un menu sul mio sito su ogni pagina, voglio metterlo nel proprio file menu.php ma non sono sicuro come impostare la classe = "attivo" per qualsiasi pagina in cui sono. Ecco il mio codice: please help meCome impostare la pagina corrente "attiva" 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

intendi collegamento attivo?o rendere il collegamento diverso dagli altri? dipende dalla pagina corrente? –

+0

usa $ _SERVER ['REQUEST_URI'] .. per ottenere il link corrente della pagina – alwaysLearn

+0

per favore il tuo URL quando sei su qualsiasi pagina come offnungszeiten o sauna ecc. –

risposta

10

Sarebbe più facile se si potrebbe costruire una serie di pagine del copione e lo passò al file vista lungo con la pagina attualmente attiva:

//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;?> 

Con un motore di template come Smarty vostro menu.php apparirebbe ancora più bello:

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

Creare una variabile in ciascuno dei vostri file php come:

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

quindi verificare che variabile nel pagina html come questa

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

lì io s due cose che puoi fare.

prima si può leggere il nome del file corrente del file php si richiede utilizzando $_SERVER['PHP_SELF'] o $_SERVER['REQUEST_URI'] o altri $_SERVER global variabili che è possibile utilizzare per leggere la pagina corrente e confrontarlo con l'URL del link, qualcosa di simile

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

il secondo è quello di creare una variabile che si può leggere a livello globale che memorizzare il nome attuale della pagina corrente, in questo modo

<?php 
$cur_page ="offnungszeiten" 
?> 

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

Questa è la migliore risposta (il primo). – Lesik2008

3

Mettere tutto il codice qui sotto a menu.php e tutto sarà curato.

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

$current_page = PageName(); 

Utilizzare la sopra per ottenere il nome della pagina corrente poi mettere questo nel vostro 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> 

dove active è il nome della classe che metterà in evidenza la vostra voce di menu

0

Invia nome della pagina nella stringa di query e controllarlo su ogni pagina ottenendo la variabile.

+0

Davvero? Questo costituisce una risposta? – asprin

1

ho fatto con php in questo modo,

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

E poi chiamare questa funzione

echo createTopNav("about"); 

e l'uscita sarà così

<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

Qual è il punto di questo? L'intero punto è di avere il menu in un file php separato. Se siete tra cui l'intero menu in ogni pagina in ogni caso, non è necessario la funzione di 'php' – CodyBugstein

0

Soluzione semplicissima:

Presa in prestito del codice da asprin sopra;

Creare un nuovo file menu.php in cui verrà memorizzata la sola copia del menu. In questo file, creerai una funzione addMenu($pageName) che accetta un parametro come nome della pagina e restituisce una stringa che consiste nel menu dopo aver aggiunto il tag corrente.

Nel codice HTML, si dovrebbe include(menu.php) e quindi chiamare la funzione addMenu con il nome della pagina corrente. Così il codice sarà simile a questa:

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

E nel codice HTML, dicono che questo:

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

ho risolto questo jQuery/javascript utilizzando eseguendo il codice qui sotto ogni viene caricata una qualsiasi pagina:

$(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'); 
      } 
     }); 
}); 

Questa implementazione presuppone che il proprio menu abbia l'ID 'NavMenu', e utilizza http://hostname/scriptname.php attributi href in questo modo:

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

leggere i commenti javascript per vedere cosa sta succedendo. Se preferisci utilizzare un layout href diverso (come nell'esempio originale), devi giocare un po 'con la variabile CurrentUrl per farlo usare lo stesso layout degli attributi href.

Per me questa è stata la soluzione più semplice poiché disponevo di siti esistenti con un menu di grandi dimensioni e molte pagine e volevo evitare di dover modificare tutte le pagine. Questo mi consente di inserire un codice javascript nel file di intestazione (che era già un file centrale) che risolve il problema per tutte le pagine esistenti.

0

Un po 'in ritardo sulla palla, ma ho dovuto risolvere io stesso e ho finito per usare this Javascript method, con una piccola modifica. Questo ha il vantaggio di non richiedere molte modifiche al codice corrente, basta eseguire lo script e voilà.

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

È possibile utilizzare

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

questo metodo ottiene la pagina corrente utilizzando PHP che passerà una parola in questo caso attiva e lo colloca dentro il parametro di classe per impostare la pagina attiva.

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

buon lavoro iraqi_love4ever – Jayesh

Problemi correlati