Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]przerobienie zwykłego menu na php
Forum PHP.pl > Forum > Przedszkole
adek-
Chciałem zautomatyzować menu, żeby nie wstawiać na każdej stronie i modyfikować go który link jest aktywny, a który nie, tylko raz stworzyć i za pomocą includa i zmiennych zaaplikować. Dlatego chciałem zrobić coś takiego co opiszę poniżej.
MENU: które miałem na każdej stronie z osobna - wymagało ukrywania nieaktywnych podlinków i zmiany co jest active co nie itd.
  1. <tr><td class="MenuItem1"><a href="?id=opcja1" >Nadrzędne</a></td></tr>
  2. <!--teraz podmenusy nadrzednej opcji1 ktore są ukryte dopóki ktoś nie kliknie w nadrzędne opcja1
  3. <tr><td class="MenuItem2"><a href="?id=opcja1podrz1" >podrzeędne1</a></td></tr>
  4. <tr><td class="MenuItem2"><a href="?id=opcja1podrz2" >podrzędne2</a></td></tr>-->
  5. //ponizej nadrzędne aktynwe, czyli podmenu widoczne, z aktywnym 3 linkiem podmenu
  6. <tr><td class="MenuHdr1"><a href="?id=opcja2" >Nadrzędne aktywne</a></td></tr>
  7. <tr><td class="MenuItem2"><a href="?id=opcja2podrz1" >podrzeędne1</a></td></tr>
  8. <tr><td class="MenuItem2"><a href="?id=opcja2podrz2" >podrzędne2</a></td></tr>
  9. <tr><td class="MenuItem2 currentItemHighlight2"><a href="?id=opcja2podrz3" >podrzędne3 aktywne</a></td></tr>
  10. <tr><td class="MenuItem1"><a href="?id=opcja3" >Nadrzędne</a></td></tr>

wygląda to tak:

i teraz zrobiłem sobie coś takiego do wyświetlania danych zaincludowanych z plików, a więc mogę mieć też i zaincludowane menu i w jednej wersji a nie 100 na 100 stronach.
  1. <?php
  2. $id=$_GET['id'];
  3. if(empty($id) or $id=="opcja1"){
  4. include("dane/plik1.php");
  5. }
  6. if($id=="opcja2"){ include("dane/plik2.php"); }
  7. if($id=="opcja2podrz1"){ include("dane/plik1.php"); }
  8. if($id=="opcja2podrz2"){ include("dane/plik2.php"); }
  9. if($id=="opcja2podrz3"){ include("dane/plik3.php"); }
  10. ?>


Czyli w zależności jaki link klikniesz ładuje Ci do diva odpowiedni plik. Z tym że chciał bym, aby po kliknięciu na jakieś nadrzędne zrobiło się class z MenuItem1 na MenuHdr1 i w MenuItem2 aktywnym dodawało currentItemHighlight2, czyli zapewne może działać jakiś if, jeśli kliknięte nadrzędne to wyświetlaj podrzędne? ale jak zrobić, że zmienia się z aktywnego na nieaktywny i vice versa? if kliknięte ?id=opcja1podrz2 to i poustawiać zmienne class=" '.$activ.' " i unactive ? Z tym, że będzie kłopot jak będzie kilka wpisów... dodam, że strona może śmiało się przeładowywać, nie musi być nic ajaxowatego, dajcie jakiś pomysł jak się za to wziąć bo ja nie potrafię tego ugryźć... a dręczy mnie 100-krotne przepisywanie menu i zmienianie go!
ersiu
porob sobie pliki ktore wczytujesz o takiej samej nazwie bedzie ci prosciej...
  1. <?php
  2. $main = "main"; // plik wyswietlajacy sie jako strona glowna
  3. $dir = "/dane/"; // katalog z danymi
  4. $extension = ".php"; // rozszerzenie plikow
  5. if(!empty($_GET['id']) && file_exists($dir.$_GET['id'].$extension)){
  6. include($dir.$_GET['id'].$extension);
  7. }else{
  8. include($dir.$main.$extension);
  9. }
  10. ?>

a co do menu, to ja polecałbym je zrobić tak, aby PHP je generowało z MySQL lub xml zamiast używać ifów...
adek-
generowało w sensie? Jeśli chodzi o xml, to z chęcią mogę sobie zrobić pliczek xml, z danymi jakie potrzebuje, ale jeśli byś rzucił troszkę więcej światła na to w jaki sposób by takowe menu miało dziąłac?
Bo jeśli wrzucę sobie wszystkie możliwe odnośniki menu do xmla to na chwilę obecną nie wyobrażam sobie jak mi to może pomóc w ustawianiu active, czy unactive itd. Jakieś tablice z wyciągiem danych z xml?
kudlatypawelek
Proponuję przygotować sobie oddzielną tabele w bazie [id, nazwa, parent_id] i dzięki takiej strukturze będziesz mógł w kolejnych wierszach zapisywać jakie elementy są kategorią nadrzędną, a co jest potomkiem danej kategorii. Potem po pobraniu danych z bazy trzeba rekurencyjnie przeglądać drzewo i porównywać z aktualnym id jakie przyszło np. z GET'a.
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.