Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zakładki w php
Forum PHP.pl > Forum > Przedszkole
camelx
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
Fipaj
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?
pirat
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"
camelx
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ę?
Fipaj
  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
camelx
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...
pirat
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...
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.