Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zakładki w php, dynamiczna zamina stylu css
camelx
post
Post #1





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 14.06.2004
Skąd: Warszawa

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


Witam

Chcę zrobić na swojej stronie zakładki. Zakładka aktywna ma klasę 'class="active"' a zakładka nieaktywna nie ma żednej klasy (mówię tu oczywiście o klasach css). Wygląda to mniej więcej tak
  1. <ul id="tabnav">
  2. <li><a href="index.php" class="active">główna</a></li>
  3. <li><a href="users.php">użytkownicy</a></li>
  4. <li><a href="files.php">pliki</a></li>
  5. <li><a href="#photos.php">zdięcia</a></li>
  6. </ul>


Mam także plik header.php (jest w nim menu z zakładkami).
Chchiałbym zrobić coś takiego, że dla plików np. users.php, adduser.php i groups.php była aktywna zakładka 'użytkownicy' (żeby miała przydzieloną klasę active), dla pliku index.php zakładka 'główna', dla files.php i upload.php zakładka pliki, itd...
Dodam, że na początku każdego pliku includowany jest plik header.php.

W jaki sposób można zrobić coś takiego?

Podobny problem był omawiany tutaj, ale ja chcę, aby jedna zakładka mogła być aktywna przy oglądaniu zarówno np. users.php jak i adduser.php.

Jeśli ktoś czegoś nie zrozumiał to proszę pytać smile.gif.

Macie jakieś pomysły jak to zrobić questionmark.gif
Będę wdzięczny za pomoc snitch.gif


--------------------
windows nie jest wirusem... wirusy coś robią :)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Fipaj
post
Post #2





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 19.01.2005
Skąd: Warszawa

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


W pliku header.php funkcja showTabs ('ktora ma byc podswietlona').
Funkcja showTabs może być oparta o switche, a może wymyślisz jakiś wydajniejszy sposób?

W każdym razie w każdej stronie oprócz header.php definiujesz nazwę strony i wpisujesz w funkcje showTabs(). Łapiesz?


--------------------
Go to the top of the page
+Quote Post
pirat
post
Post #3





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 13.05.2003
Skąd: Katowice

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


Dynamicznie tworzyć te linki albo parsować kod.

Dynamicznie -> trzeba napisać funkcję, która będzie sprawdzała, na której stronie skrypt się znajduje i ewentualnie if - normalny link else - aktywny link.

Parsowanie -> chyba za dużo pisania ;] poszukaj "parsowanie kodu", "szablony", "oddzielanie logiki od zawartości"

Ten post edytował pirat 26.06.2005, 18:22:43


--------------------
Zdrowy rozsądek to rzecz, której każdy potrzebuje, mało, kto posiada, a nikt nie wie, że mu brakuje.

Czasami myślę, iż Bóg tworząc człowieka przecenił nieco swoje zdolności.
Go to the top of the page
+Quote Post
camelx
post
Post #4





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 14.06.2004
Skąd: Warszawa

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


Wpadłem na taki pomysł, może by tak na początku każdej strony (każdego pliku) definiować która zakładka ma być aktywna (np. w pliku adduser.php dać $zakladka = 'uzytkownicy'). Tylko co dalej? Jak powinn wyglądać funkcja w pliku header.php, która by podświetlała (dodawała klase 'active') odpowiednią zakładkę?

Ten post edytował camelx 26.06.2005, 18:32:10


--------------------
windows nie jest wirusem... wirusy coś robią :)
Go to the top of the page
+Quote Post
Fipaj
post
Post #5





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 19.01.2005
Skąd: Warszawa

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


  1. <?php
  2. function showTabs ($tab) {
  3. if ($tab == 'foo') {
  4. print ('Zakładki, a foo z klasą :)');
  5. }
  6. // itd...
  7. }
  8. ?>


Rozwiązanie nieefektywne, ulepsz to smile.gif


--------------------
Go to the top of the page
+Quote Post
camelx
post
Post #6





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 14.06.2004
Skąd: Warszawa

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


Ok, jakoś sobie poradziłem smile.gif. Nie jest to może najdoskonalsze rozwiązanie ale zawsze coś...

Na początku każdego pliku definiowana jest $zak (np. $zak = 'test').
Następnie stworzyłem taką funkcję:
  1. <?php
  2. function showTabs($page, $link)
  3. {
  4. global $zak;
  5.  
  6. if($zak == $page) $class = 'active';
  7. else $class = '';
  8.  
  9. echo('<a href=\"'.$page.'.php\" class=\"'.$class.'\">'.$link.'</a>'); 
  10. }
  11. ?>


przekład wykorzystania:
  1. <?php
  2. showTabs('index', 'Strona glowna'); 
  3. showTabs('test', 'Strona testowa');
  4. ?>


No i wszystko działa smile.gif. Jeżeli ktoś macie jakieś inne pomysły to piszcie.
Dziękuję za pomoc i pozdrawiam...

Ten post edytował camelx 26.06.2005, 19:05:50


--------------------
windows nie jest wirusem... wirusy coś robią :)
Go to the top of the page
+Quote Post
pirat
post
Post #7





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 13.05.2003
Skąd: Katowice

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


Cytat(camelx @ 2005-06-26 20:03:10)
Jeżeli ktoś macie jakieś inne pomysły to piszcie.

  1. <?php
  2.  
  3. class Strona {
  4.  
  5. protected $nazwa;
  6.  
  7. function __construct($nazwa) {
  8. $this->nazwa = $nazwa;
  9. }
  10.  
  11. function getNazwa() {
  12. return $this->nazwa;
  13. }
  14.  
  15. }
  16.  
  17. class Zakladka {
  18.  
  19. protected $link;
  20. protected $nazwa;
  21.  
  22. function __construct($link, $nazwa) {
  23. $this->link = $link;
  24. $this->nazwa = $nazwa;
  25. }
  26.  
  27. function getLink() {
  28. return $this->link;
  29. }
  30.  
  31. function getNazwa() {
  32. return $this->nazwa;
  33. }
  34.  
  35. public static function getInstance($link, $nazwa) {
  36. $zwroc = new Zakladka($link, $nazwa);
  37. return $zwroc;
  38. }
  39. }
  40.  
  41. abstract class Zakladki {
  42.  
  43. protected $zakladki;
  44.  
  45. public function addZakladka(Zakladka $zakladka) {
  46. $this->zakladki[] = $zakladka;
  47. }
  48.  
  49. abstract public function wypisz(Strona $strona);
  50. }
  51.  
  52. class Pisz extends Zakladki {
  53.  
  54. function wypisz(Strona $strona) {
  55. $str = &#092;"\";
  56.  
  57. foreach ($this->zakladki as $zakladka) {
  58.  
  59. if($zakladka->getLink() == $strona->getNazwa() ){
  60. $str .= '<a href=\"'.$zakladka->getLink().'.php\" class=\"active\">'.$zakladka->getNazwa().'</a><br>';
  61. } else {
  62. $str .= '<a href=\"'.$zakladka->getLink().'.php\">'.$zakladka->getNazwa().'</a><br>';
  63. }
  64. }
  65.  
  66. print $str;
  67. }
  68. }
  69. $strona = new Strona('pierwsza');
  70. $obj1 = Zakladka::getInstance('pierwsza', 'link do pierwszej' );
  71. $obj2 = Zakladka::getInstance('druga', 'link do drugiej' );
  72.  
  73. $daj = new Pisz();
  74. $daj->addZakladka($obj1);
  75. $daj->addZakladka($obj2);
  76. $daj->wypisz($strona);
  77.  
  78. /* daje wynik */
  79. /*
  80. <a href=\"pierwsza.php\" class=\"active\">link do pierwszej</a><br>
  81. <a href=\"druga.php\">link do drugiej</a><br>
  82. */
  83.  
  84.  
  85. ?>


hmmm ale to o wiele.... większe niż twoja funkcja...
nie wiem... chyba źle to napisałem bo strasznie dużo wywołań trzeba zrobić ;] nie adekwatne do efektu .... co tu jest źle...

Ten post edytował pirat 27.06.2005, 22:24:41


--------------------
Zdrowy rozsądek to rzecz, której każdy potrzebuje, mało, kto posiada, a nikt nie wie, że mu brakuje.

Czasami myślę, iż Bóg tworząc człowieka przecenił nieco swoje zdolności.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 15:37