Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][CSS]a:active ?
Strarus
post
Post #1





Grupa: Zarejestrowani
Postów: 339
Pomógł: 12
Dołączył: 22.11.2008

Ostrzeżenie: (20%)
X----


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: (IMG:http://img132.imageshack.us/img132/752/adasdsafyc4.jpg) (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował Strarus 4.01.2009, 18:55:49
Go to the top of the page
+Quote Post
Rafal Filipek
post
Post #2





Grupa: Zarejestrowani
Postów: 274
Pomógł: 54
Dołączył: 2.05.2006
Skąd: Nadarzyn

Ostrzeżenie: (0%)
-----


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'.
Go to the top of the page
+Quote Post
Strarus
post
Post #3





Grupa: Zarejestrowani
Postów: 339
Pomógł: 12
Dołączył: 22.11.2008

Ostrzeżenie: (20%)
X----


dzięki, zaraz wypróbuję (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Skie
post
Post #4





Grupa: Zarejestrowani
Postów: 555
Pomógł: 84
Dołączył: 20.02.2008
Skąd: Małopolska

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował Skie 4.01.2009, 18:59:47
Go to the top of the page
+Quote Post
Strarus
post
Post #5





Grupa: Zarejestrowani
Postów: 339
Pomógł: 12
Dołączył: 22.11.2008

Ostrzeżenie: (20%)
X----


I to do pętli? czy jak bo chyba nie rozumiem... (IMG:http://forum.php.pl/style_emoticons/default/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?

Ten post edytował Strarus 4.01.2009, 19:01:18
Go to the top of the page
+Quote Post
Skie
post
Post #6





Grupa: Zarejestrowani
Postów: 555
Pomógł: 84
Dołączył: 20.02.2008
Skąd: Małopolska

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Strarus
post
Post #7





Grupa: Zarejestrowani
Postów: 339
Pomógł: 12
Dołączył: 22.11.2008

Ostrzeżenie: (20%)
X----


tylko jest jeden problem. ja mam dynamicznie generowane strony: index.php?site=costam index.php?site=costam2 itd. wtedy PHP_SELF nie działa...
Go to the top of the page
+Quote Post
Rafal Filipek
post
Post #8





Grupa: Zarejestrowani
Postów: 274
Pomógł: 54
Dołączył: 2.05.2006
Skąd: Nadarzyn

Ostrzeżenie: (0%)
-----


Kod
$_SERVER['REQUEST_URI']
tylko nie pisz od razu ze nie dziala. zobacz co to zwraca i jak to wykorzystac.
Go to the top of the page
+Quote Post
Skie
post
Post #9





Grupa: Zarejestrowani
Postów: 555
Pomógł: 84
Dołączył: 20.02.2008
Skąd: Małopolska

Ostrzeżenie: (0%)
-----


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


Ten post edytował Skie 4.01.2009, 19:24:21
Go to the top of the page
+Quote Post
Strarus
post
Post #10





Grupa: Zarejestrowani
Postów: 339
Pomógł: 12
Dołączył: 22.11.2008

Ostrzeżenie: (20%)
X----


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 (IMG:http://forum.php.pl/style_emoticons/default/haha.gif) jakieś 150 linijek kodu (IMG:http://forum.php.pl/style_emoticons/default/haha.gif) na samo menu (IMG:http://forum.php.pl/style_emoticons/default/haha.gif) Może jednak jakieś inne metody? Albo modyfikacja tej (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) (tej co podałem kod)
Go to the top of the page
+Quote Post
Rafal Filipek
post
Post #11





Grupa: Zarejestrowani
Postów: 274
Pomógł: 54
Dołączył: 2.05.2006
Skąd: Nadarzyn

Ostrzeżenie: (0%)
-----


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ść ?
Go to the top of the page
+Quote Post
Skie
post
Post #12





Grupa: Zarejestrowani
Postów: 555
Pomógł: 84
Dołączył: 20.02.2008
Skąd: Małopolska

Ostrzeżenie: (0%)
-----


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 "/" (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Strarus
post
Post #13





Grupa: Zarejestrowani
Postów: 339
Pomógł: 12
Dołączył: 22.11.2008

Ostrzeżenie: (20%)
X----


troszkę lepiej (IMG:http://forum.php.pl/style_emoticons/default/haha.gif) zaraz popróbuję (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Dzięki @Skie - Twój skrypt działa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Teraz sobie przeanalizuje i zastosuje (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Stawiam Wam pomógł bo oboje bardzo mi pomogliście (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
piotrooo89
post
Post #14


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




jeśli chcesz zobaczyć ja rozwiązałem to tak: klik
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 30.08.2025 - 10:22