[php][css]Menu z aktywnymi zakładkami

Aktywne zakladkiPierwszy tutorial na tym blogu będzie o tym jak zrobić menu z aktywnymi zakładkami, ponieważ sam stanąłem przed tym wyzwaniem robiąc tego bloga. Googlowałem dużo, aby znaleźć odpowiednie rozwiązanie dla siebie. Na szczęście nie znalazłem i skłoniło mnie to do napisania własnego prostego skryptu. Będzie to bardzo proste  lecz spełniające swoje zadanie menu do strony web. Ponieważ bardzo często chcemy, aby gość odwiedzający naszą stroną wiedział w jakiej zakładce menu się znajduję, lub po prostu wykorzystujemy takie rozwiązanie ze względów estetycznych.

Użyte zostaną tutaj techniki: HTML, CSS, PHP

Demo tutoriala: Menu z aktywnymi zakładkami

W poniższym tutorialu będziemy chcieli osiągnąć efekt na na obrazku powyżej. Aktywny element menu będzie podświetlony na czerwono, jak element „Strona główna„. Naszym zadaniem będzie dodanie klasy .aktywny do odnośnika <a>. Gdy na naszej stronie posiadamy strony, które nie są dostępne bezpośrednie z menu, skrypt będzie wyróżniał element „Strona Główna”.

Na początku posiadamy zwykłe menu zrobione na listach:

Kod:

<div style="text-align: left;">
<ul>
<h2>Menu</h2>
	<li><a href="zakladka1.php">Zakładka 1</a></li>
	<li><a href="zakladka2.php">Zakładka 2</a></li>
	<li><a href="zakladka3.php"> Zakładka 3</a></li>
</ul>
</div>

Dodajemy do niego style:

li {
list-style:none;
}

li a {
background-color:Bisque;
border:medium solid;
color:Crimson;
display:block;
line-height:1.65em;
margin-top:10px;
text-align:center;
text-decoration:none;
border:outset;
}

li a:hover
{
background-color:#F33;
color:white;
font-weight:bold;
border:inset;
}

.aktywny
{
background-color:#F33;
color:white;
}

Kod CSS, który widzimy poniżej wpisujemy pomiędzy w sekcji head pomiędzy style:

<head><style ="text/css"> TUTAJ </style></head>

Zostało nam już teraz tylko napisanie skryptu PHP, odpowiedzialnego za wybieranie aktywnej zakładki:

<ul>
<h2>Menu</h2>
<li><a href="zakladka1.php" <?php if(($_SERVER['REQUEST_URI']!="zakladka2.php")&&($_SERVER['REQUEST_URI']!="zakladka3.php")) echo 'class="aktywny"' ?> >Zakładka 1</a></li>
<li><a href="zakladka2.php" <?php if($_SERVER['REQUEST_URI']=="zakladka2.php") echo 'class="aktywny"' ?>>Zakładka 2</a></li>
<li><a href="zakladka3.php" <?php if($_SERVER['REQUEST_URI']=="zakladka3.php") echo 'class="aktywny"' ?>> Zakładka 3</a></li>
</ul>
zakladka1.phpJu

Już wyjaśniam o co chodzi w tym kodzie:

$_SERVER['REQUEST_URI']

Kod ten odpowiedzialny jest za pobranie aktualnej podstrony, dzięki temu możemy kod ten porównać z aktualnie odwiedzaną podstroną:

$_SERVER['REQUEST_URI']=="zakladka2.php"

Jeżeli pobrana podstrona rzeczywiście jest odnośnikiem z menu dodajemy do naszego <a> klasę .aktywny robimy to za pomocą instrukcji warunkowej:

<?php if($_SERVER['REQUEST_URI']=="zakladka2.php") echo 'class="aktywny"' ?>

Ładnie wygląda, gdy jedna zakładka jest aktywna zawsze, nawet gdy w rzeczywistości nie odwiedzamy żadnej pozycji z menu, możemy to osiągnąć dzięki ustawieniu, że zakładka ta ma mieć klase .aktywny wtedy i tylko wtedy gdy jest różna od pozostałych pozycji w menu:

<?php if(($_SERVER['REQUEST_URI']!="zakladka2.php")&&($_SERVER['REQUEST_URI']!="zakladka3.php")) echo 'class="aktywny"' ?>

Myślę, że tutorial napisałem prosto i przejrzyście. Każdy następny będzie już tylko lepszy :) .

Liczę na Wasze komentarze i uwagi.

Ten wpis został opublikowany w kategorii PHP, Projektowanie stron WWW. Dodaj zakładkę do bezpośredniego odnośnika.

12 odpowiedzi na „[php][css]Menu z aktywnymi zakładkami

  1. Zerbus pisze:

    Witam, tego własnie szukałem.
    Raczkuje w php i natrafiłem na pewien problem

    1
    <li><a href="index.php?page=porady" <?php if($_SERVER['REQUEST_URI']=="index.php?page=download") echo 'class="active"' ?>><span>Download</span></a></li>

    nie wiem co jest nie tak ale powyższy warunek nie jest spełniany czy to wina „index.php?page=download” ?

  2. Zerbus pisze:

    Mój poprzedni komentarz się nie wyświetlił, poradziłem sobie z problemem, wystarczyło przed adresem dodać /, artykuł przeczytałem przyda się na przyszłość.

    1
    <li><a href="zakladka1.php" <?php if(($_SERVER['REQUEST_URI']=="/")||($_SERVER['REQUEST_URI']=="zakladka1.php")) echo 'class="aktywny"' ?> >Zakładka 1</a></li>

    tę linijkę trochę przerobiłem przy większej ilości pozycji w menu można się zapisać :P
    Pozdrawiam

  3. Milenium pisze:

    jak zrobić żeby zakładki były na górze strony koło siebie? :D

    • można to np zrobić tak jak jest na tej stronie:

      1
      2
      3
      4
      5
      6
      <ul style="list-style: none outside none; overflow: hidden;  margin-top: 20px;">
          <li style="float: left; display: block; margin-left: 6px;"><a class="aktywny" href="/">Start</a></li>
          <li style="float: left; display: block; margin-left: 6px;"><a href="/2010">Archiwum</a></li>
          <li style="float: left; display: block; margin-left: 6px;"><a href="/o-autorze">O autorze</a></li>
          <li style="float: left; display: block; margin-left: 6px;"><a href="/kontakt">Kontakt</a></li>
       </ul>

      Pozdrawiam:
      Roman Barzyczak

  4. Maciek pisze:

    Mam problem, ponieważ po wstawieniu kodu, ciągle podświetlony jest pierwszy link – w moim wypadku strona główna. oto kod:

    1
    2
    3
    4
    5
    6
    7
    <ul>
    <li><a href="index.php?id=home" <?php if(($_SERVER['REQUEST_URI']!="index.php?id=home")&&($_SERVER['REQUEST_URI']!="index.php?id=o_firmie")&&($_SERVER['REQUEST_URI']!="index.php?id=projekty")&&($_SERVER['REQUEST_URI']!="index.php?id=innowacje")&&($_SERVER['REQUEST_URI']!="index.php?id=kontakt")) echo 'class="aktywny"' ?>>Strona Główna</a></li>
    <li><a href="index.php?id=o_firmie" <?php if($_SERVER['REQUEST_URI']=="index.php?id=o_firmie") echo 'class="aktywny"' ?>>O Firmie</a></li>
    <li><a href="index.php?id=projekty" <?php if($_SERVER['REQUEST_URI']=="index.php?id=projekty") echo 'class="aktywny"' ?>>Projekty</a></li>
    <li><a href="index.php?id=innowacje" <?php if($_SERVER['REQUEST_URI']=="index.php?id=innowacje") echo 'class="aktywny"' ?>>Innowacje</a></li>
    <li><a href="index.php?id=kontakt" <?php if($_SERVER['REQUEST_URI']=="index.php?id=kontakt") echo 'class="aktywny"' ?>>Kontakt</a></li>
    </ul>

    Zmieniałem również REQUEST_URI na QUERY_STRING ale to nic nie zmieniło.

    • Zerbus pisze:

      Bo zawsze jest spełniany pierwszy warunek, ja bym to zrobił tak:

      1
      <li><a href="index.php?id=home" <?php if(($_SERVER['REQUEST_URI']=="/")||($_SERVER['REQUEST_URI']=="/index.php?id=home")) echo 'class="aktywny"' ?>>Strona Główna</a></li>

      czyli porównuje adres jaki otrzymał od serwera jeśli jest równy „/” lub „index.php?id=home” wtedy dopiero wykonuje echo.

      • Maciek pisze:

        Twoje rozwiązanie spowodowało to że pierwszy link już nie świeci cały czas, ale nadal nie mam aktywnych zakładek. Znaczy się po najechaniu na link on zmienia swój kolor ale po kliknięciu nie zostaje podświetlony na stałe.
        A na twojej stronie działa to poprawnie?

        • Zerbus pisze:

          tak u mnie wszystko działa,

          1
          2
          $adres= $_SERVER['REQUEST_URI'];
          echo $adres;

          użyj tego w kodzie i zobacz jaki link Ci generuje, ale na pierwszy rzut oka widzę ze robisz błąd jeśli mówi o tej stronie którą masz w nicku to do każdego linku powinieneś dopisać /test np

          1
          <li><a href="index.php?id=home" <?php if(($_SERVER['REQUEST_URI']=="/test")||($_SERVER['REQUEST_URI']=="/test/index.php?id=home")) echo 'class="aktywny"' ?>>Strona Główna</a></li>
          • Zerbus pisze:

            błąd powinno być

            1
            <li><a href="test/index.php?id=home" <?php if(($_SERVER['REQUEST_URI']=="/test")||($_SERVER['REQUEST_URI']=="/test/index.php?id=home")) echo 'class="aktywny"' ?>>Strona Główna</a></li>
  5. Maciek pisze:

    Super twój sposób działa. Dzięki wielkie za pomoc:]

  6. PeeLeN pisze:

    Problem jest jeżeli ktoś znajdzie się na podstronie strony wtedy zakładki nie działają :)

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

*

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>