Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][CSS]a:active ?
Forum PHP.pl > Forum > Przedszkole
Strarus
Cześć:)
Chciałbym zrobić menu, które gdy jestem na danej stronie zmienia wygląd. Przykład:

Normalnie menu:

home site1 site2 site3

Gdy jesteśmy na site2:

home site1 site2 site3

Niestety używając a.menu:active nie udało mi się osiągnąć tego efektu, w jaki sposób mogę uzyskać taki efekt?

edit: coś takiego: smile.gif
Rafal Filipek
Na pewno nie przez
Kod
a:active
bo to sie 'wykonuje' jak klikasz na link.
w php definiuj sobie ktory link ma byc 'aktywny' i potem do dopowiedniego elementu <a> dodawaj sobie klase css np. 'active'.
Strarus
dzięki, zaraz wypróbuję smile.gif
Skie
Ja bym to zrobił z poziomu PHP, w sensie, że:

  1. <?php
  2. if ($_SERVER[PHP_SELF] == stronka1.php) {
  3.   print('<a class=normalny>cos</a>');
  4. } else {
  5.   print('<a class=aktywny>cos</a>');
  6. }
  7. ?>


...a jeśli masz kilka tych linków to zrób sobie z nimi tablicę i wszystko ustaw w pętli smile.gif
Strarus
I to do pętli? czy jak bo chyba nie rozumiem... sad.gif

Bo mam menu z np. 5 linkami:
home
forum
galeria
inne
inne2


i jak to niby zrobić, żeby było podświetlany aktywny link?
Skie
Np.

  1. <?php
  2. $arrpages = array();
  3. $arrpages['file1.php'] = 'stronka1';
  4. $arrpages['file2.php'] = 'stronka2';
  5. $arrpages['file3.php'] = 'stronka3';
  6.  
  7. foreach($arrpages as $key => $value) {
  8.    if ($_SERVER['PHP_SELF'] == $key) {
  9.       print('<a class=aktywny href='.$key.'>'.$value.'</a>');
  10.    } else {
  11.       print('<a class=normalny href='.$key.'>'.$value.'</a>');
  12.    }
  13. }
  14. ?>


Możesz też domyślnie każdemu na początku ustawić class=normalny, a na podmienić, np. za pomocą substr() klasę tylko dla aktywnego linka - być może takie coś byłoby wydajniejsze niż pętla z if'em.
Strarus
tylko jest jeden problem. ja mam dynamicznie generowane strony: index.php?site=costam index.php?site=costam2 itd. wtedy PHP_SELF nie działa...
Rafal Filipek
Kod
$_SERVER['REQUEST_URI']
tylko nie pisz od razu ze nie dziala. zobacz co to zwraca i jak to wykorzystac.
Skie
Hmmm... no to możesz zamiast $_SERVER['PHP_SELF'] zrobić jakąś własną zmienną i w każdym pliku ją nadpisywać, czyli np.:

I sposób:

  1. <?php
  2. function colora($stronka) {
  3.   $arrpages = array();
  4.   $arrpages['file1.php'] = 'stronka1';
  5.   $arrpages['file2.php'] = 'stronka2';
  6.   $arrpages['file3.php'] = 'stronka3';
  7.  
  8.   foreach($arrpages as $key => $value) {
  9.      if ($stronka == $key) {
  10.         print('<a class=aktywny href='.$key.'>'.$value.'</a>');
  11.      } else {
  12.         print('<a class=normalny href='.$key.'>'.$value.'</a>');
  13.      }
  14.   }
  15. }
  16. ?>


I w każej podstronie tak robić:

  1. <?php
  2. colora($adres);
  3. ?>


Gdzie $adres jest adresem podstronki - np. index.php?action=main.

II sposób:

Rafał Filipek: nie pomyślałem o tym, możesz tak zrobić jak on o tym pisał:


  1. <?php
  2. $arrpages = array();
  3.   $arrpages['file1.php'] = 'stronka1';
  4.   $arrpages['file2.php'] = 'stronka2';
  5.   $arrpages['file3.php'] = 'stronka3';
  6.  
  7.   foreach($arrpages as $key => $value) {
  8.      if ($_SERVER['REQUEST_URI'] == $key) {
  9.         print('<a class=aktywny href='.$key.'>'.$value.'</a>');
  10.      } else {
  11.         print('<a class=normalny href='.$key.'>'.$value.'</a>');
  12.      }
  13.   }
  14. ?>
Strarus
Właśnie.
  1. <?php
  2. $arrpages = array();
  3. $arrpages['index.php'] = 'index';
  4. $arrpages['index.php?site=about'] = 'about';
  5. $arrpages['index.php?site=gallery'] = 'gallery';
  6.  
  7. foreach($arrpages as $key => $value) {
  8.   if ($_SERVER['REQUEST_URI'] == $key) {
  9.      print('<a class="aktywny" href="'.$key.'">'.$value.'</a>');
  10.   } else {
  11.      print('<a class="normalny" href="'.$key.'">'.$value.'</a>');
  12.   }
  13. }
  14. ?>

Tylko, że nie pokazuje się w źródle strony class aktywny jak jestem na danej stronie. Jeszcze myślałem nad opcją taką, że: jeśli adres jest (np.) index.php?site=about to pokaz (i tu całe menu ze zmienioną tylko tą klasą) ale to by było samobójstwo haha.gif jakieś 150 linijek kodu haha.gif na samo menu haha.gif Może jednak jakieś inne metody? Albo modyfikacja tej smile.gif (tej co podałem kod)
Rafal Filipek
Myfgod. Prosiłem cię żebyś sprawdził co zwraca ta zmienna, ok. łopatologicznie;
plik test.php
  1. <?php
  2. echo $_SERVER['REQUEST_URI'];
  3. ?>

wywołuje
Kod
http://localhost/test.php?cos=tam

dostaje
Kod
/test.php?cos=tam

jak widzisz
Kod
/test.php?cos=tam !== test.php?cos=tam

jasność ?
Skie
Aaa... błąd jest w tym co Ci podałem - moja wina, nie sprawdziłem dokładnie co zwraca $_SERVER['REQUEST_URI'], oczywiście tak powinno być:

  1. <?php
  2. $arrpages = array();
  3. $arrpages['index.php'] = 'index';
  4. $arrpages['index.php?site=about'] = 'about';
  5. $arrpages['index.php?site=gallery'] = 'gallery';
  6.  
  7. foreach($arrpages as $key => $value) {
  8.  if ($_SERVER['REQUEST_URI'] == '/'.$key) {
  9.     print('<a class="aktywny" href="'.$key.'">'.$value.'</a>');
  10.  } else {
  11.     print('<a class="normalny" href="'.$key.'">'.$value.'</a>');
  12.  }
  13. }
  14. ?>


lub

  1. <?php
  2. $arrpages = array();
  3. $arrpages['/index.php'] = 'index';
  4. $arrpages['/index.php?site=about'] = 'about';
  5. $arrpages['/index.php?site=gallery'] = 'gallery';
  6.  
  7. foreach($arrpages as $key => $value) {
  8.  if ($_SERVER['REQUEST_URI'] == $key) {
  9.     print('<a class="aktywny" href="'.$key.'">'.$value.'</a>');
  10.  } else {
  11.     print('<a class="normalny" href="'.$key.'">'.$value.'</a>');
  12.  }
  13. }
  14. ?>


... Brakowało "/" smile.gif
Strarus
troszkę lepiej haha.gif zaraz popróbuję smile.gif

Dzięki @Skie - Twój skrypt działa smile.gif Teraz sobie przeanalizuje i zastosuje smile.gif Stawiam Wam pomógł bo oboje bardzo mi pomogliście smile.gif
piotrooo89
jeśli chcesz zobaczyć ja rozwiązałem to tak: klik
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.