2013-04-12 17 views
8

Witam Mam menu na mojej stronie na każdej stronie, chcę umieścić ją w swoim własnym pliku menu.php, ale nie wiem jak ustawić klasę = "aktywny" dla dowolnej strony, na której się znajduję. Oto mój kod: proszę mi pomócJak ustawić aktualną stronę "aktywną" w 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

Masz na myśli aktywny link?lub czy link jest inny od innych? w zależności od bieżącej strony? –

+0

użyj $ _SERVER ['REQUEST_URI'] .. aby uzyskać aktualny link do strony – alwaysLearn

+0

proszę podać swój adres URL, gdy jesteś na jakiejkolwiek stronie takiej jak offnungszeiten lub sauna itp. –

Odpowiedz

10

Byłoby łatwiej, gdyby zbudować tablicę stron w skrypcie i przekazał go do pliku widoku wraz z aktualnie aktywnej strony:

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

z silnikiem szablonów jak Smarty menu.php by wyglądać jeszcze ładniej:

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

Tworzenie zmiennej w każdym pliku php jak:

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

następnie sprawdzić, czy zmienna w swój Strona html podobna do tej

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

tam dwie rzeczy, które możesz zrobić.

pierwszy można odczytać aktualną nazwę pliku php Państwo zażądać za pomocą $_SERVER['PHP_SELF'] lub $_SERVER['REQUEST_URI'] lub innych $_SERVER global zmienne, które można użyć, aby odczytać bieżącą stronę i porównać go z adresu URL łącza, coś w tym

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

drugi jest stworzenie zmiennej, które można odczytać, że globalnie przechowywać aktualną nazwę bieżącej strony, jak to

<?php 
$cur_page ="offnungszeiten" 
?> 

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

To jest najlepsza odpowiedź (pierwszy). – Lesik2008

3

umieścić wszystkie poniższy kod menu.php i wszystko będzie załatwione.

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

$current_page = PageName(); 

Użyj powyższego dostać obecna nazwa strona następnie umieścić to w menu

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

gdzie active to nazwa klasy, która będzie podkreślać swoją pozycję menu

0

Wyślij nazwę strony w łańcuchu zapytania i sprawdź go na każdej stronie, pobierając zmienną.

+0

Naprawdę? To stanowi odpowiedź? – asprin

1

Zrobiłem go z php w ten sposób

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

a następnie wywołać tę funkcję

echo createTopNav("about"); 

a wyjście będzie tak

<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

Jaki jest sens tego? Chodzi o to, aby menu było oddzielnym plikiem php. Jeśli mimo wszystko włączysz całe menu na każdej stronie, nie potrzebujesz funkcji 'php'. – CodyBugstein

0

Proste rozwiązanie:

Pożyczanie kodu od asprin powyżej;

Utwórz nowy plik menu.php, w którym można zapisać tylko jedną kopię menu. W tym pliku utworzysz funkcję addMenu($pageName), która przyjmuje parametr jako nazwę strony i zwraca ciąg składający się z menu po dodaniu bieżącego tagu.

W kodzie HTML można uzyskać include(menu.php), a następnie wywołać funkcję addMenu z bieżącą nazwą strony. Więc twój kod będzie wyglądać następująco:

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

I w HTML, to powiedzieć:

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

I rozwiązać ten przy użyciu jQuery/javascript uruchamiając poniższy kod każdego razem moja każda strona jest ładowana:

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

Ta implementacja zakłada swoją menu ma identyfikator „NavMenu” i wykorzystuje http://hostname/scriptname.php atrybutów href tak:

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

przeczytać komentarze javascript, aby zobaczyć co się dzieje. Jeśli wolisz korzystać z innego układu href (jak w oryginalnym przykładzie), musisz trochę pobawić się zmienną CurrentUrl, aby uzyskać taki sam układ jak atrybuty href.

Dla mnie było to najłatwiejsze rozwiązanie, ponieważ miałem istniejące witryny z dużym menu i wieloma stronami i chciałem uniknąć konieczności modyfikowania wszystkich stron. To pozwala mi rzucić kawałek kodu javascript w pliku nagłówkowym (który był już plikiem centralnym), który rozwiązuje problem dla wszystkich istniejących stron.

0

Trochę za późno na balu, ale musiałem rozwiązać to sam i skończyłem używając this Javascript method, z małą modyfikacją. Ma to tę zaletę, że nie wymaga wielu zmian w bieżącym kodzie, wystarczy uruchomić skrypt i 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

Można użyć

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

metoda ta staje bieżącej strony za pomocą PHP, które będą przekazywać słowo w tym przypadku aktywnego i umieszcza go wewnątrz parametru klasy ustawić stronę czynną.

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

Dobra robota iraqi_love4ever – Jayesh

Powiązane problemy