Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z menu i zmienna
Forum PHP.pl > Forum > Przedszkole
adek-
Witam, bawię się stronami w HTML i CSS i zaczynam PHP gdzie mam taki problem/pytanie. Przy takim skrypcie i ułożeniu strony klikając na linki strona1 2 lub 3 prawidłowo includuje mi się strona z zewnątrz ale na stronie głównej w menu zawsze aktywne świeci mi się to co było w html (bo jest przypisane na stałe) a teraz chciał bym aby np po kliknięciu link 2 aktywne było link 2, a nie sztywne link 1 poprzez wstawienie jakiejś funkcji wyboru.

Link do przygotowanej strony z przykładem --Przykładowa strona--

W kodzie dla nie ściągających stronę mianowicie mam tak:
STR GŁÓWNA
  1. <menu główne>
  2. <body>
  3. <ul>
  4. <li id="current" class="active"><a href="index.php?id=srona1" target="_self"><span>strona 1</span></a></li>
  5. <li class="normal"><a href="index.php?id=strona2" target="_self"><span>strona 2</span></a></li>
  6. <li class="normal"><a href="index.php?id=strona3" target="_self"><span>strona 3</span></a></li>
  7. </ul>
  8. <część strony i miejsce na tekst gdzie będą inkludowane pliki z zewnątrz tutaj strona 1 2 i 3>
  9.  
  10. <?php
  11. $id=$_GET['id'];
  12. if(empty($id) or $id=="strona1"){
  13. include("strona1.php");
  14. }
  15. if($id=="strona2"){ include("strona2.php"); }
  16. if($id=="strona3"){ include("strona3.php"); }
  17. ?>
  18. <koniec includa>
  19. </body>
  20. <koniec strony>


.....
Jak tutaj ustalić aby zmienna w którą się kliknie wyświetlała aktywną część? Wstawić zmienną np $wybrana która będzie wklejać tekst "current" w sekcji id czyli nadawała odpowiedni kod CSS? tylko jak to zrobić aby po kliknięciu na link gdzie np "$id=="strona2" wskaże iż $wybrana była równa current przy danym wyborze?
<li id="$wybrana"><a href="index.php?id=srona1" target="_self"><span>strona 1</span></a></li>
<li id="$wybrana"><a href="index.php?id=strona2" target="_self"><span>strona 2</span></a></li>
<li id="$wybrana"><a href="index.php?id=strona3" target="_self"><span>strona 3</span></a></li>
Nie wiem czy jasno to wytłumaczyłem ale na przykładowej stronie widać że w menu się nie zmienia smile.gif)
markonix
Możesz po prostu pobierać aktywny adres i na jego podstawie określać co jest current.
Jest ładniejsze rozwiązanie za pomocą samego cssa i id body.


  1.  
  2. #home #menu li a.home,
  3. #oferta #menu li a.oferta,
  4. #o_nas #menu li a.o_nas,
  5. #kontakt #menu li a.kontakt {
  6. // tu skopiuj atrybuty current
  7. }
  8. <li id="switch1"><a class="home" href="http://xxx.pl/">START</a></li>
  9. <li id="switch2"><a class="oferta" href="http://xxx.pl/oferta/">OFERTA</a></li>
  10. <li id="switch3"><a class="o_nas" href="http://xxx.pl/o_nas/">O NAS</a></li>
  11. <li id="switch4"><a class="kontakt" href="http://xxx.pl/kontakt/">KONTAKT</a></li>


A body określasz odpowiednim id np

  1. <body id="o_nas">

rajtek
Ja bym to zrobił tak że
tam gdzie masz
  1. <ul>
  2. <li id="current" class="active"><a href="index.php?id=srona1" target="_self"><span>strona 1</span></a></li>
  3. <li class="normal"><a href="index.php?id=strona2" target="_self"><span>strona 2</span></a></li>
  4. <li class="normal"><a href="index.php?id=strona3" target="_self"><span>strona 3</span></a></li>
  5. </ul>


wstawił to w znacznikach php, sprawdzanie zmiennej (if) i jeżeli jest 1 to
  1. print('<li id="current" class="active"><a href="index.php?id=srona1" target="_self"><span>strona 1</span></a></li>');


a jeżeli nie jest jeden to

  1. print('<li class="normal"><a href="index.php?id=srona1" target="_self"><span>strona 1</span></a></li>');


i tak do każdego. Troche prymitywne, ale dopiero zaczynam w php smile.gif
CuteOne
Jak sam zauważysz po kliknięciu w link zmienia się zmienna "id" teraz wystarczy zmienić styl danego linku np.
  1.  
  2. switch($id) {
  3.  
  4. case 1:
  5. $css = 1;
  6. include 'strona1.php';
  7. break;
  8.  
  9. case 2:
  10. $css = 2;
  11. include 'strona2.php';
  12. break;
  13.  
  14. case 3:
  15. $css = 3;
  16. include 'strona3.php';
  17. break;
  18.  
  19. default:
  20. $css = 1;
  21. include 'strona1.php';
  22. break;
  23. }
  24.  
  25. echo '<ul>
  26. <li class="'.(($css == 1) ? "active" : "unactive").'"><a href="index.php?id=1" target="_self"><span>strona 1</span></a></li>
  27. <li class="'.(($css == 2) ? "active" : "unactive").'"><a href="index.php?id=2" target="_self"><span>strona 2</span></a></li>
  28. <li class="'.(($css == 3) ? "active" : "unactive").'"><a href="index.php?id=3" target="_self"><span>strona 3</span></a></li>
  29. </ul>';
  30. ?>
adek-
W zasadzie rajtek masz racje, nie wpadłem na to z printami, a mogło by to iść po najprostszej linii oporu. Nie mniej jednak chciałbym rozwinąć te 2 pozostałe wersję, bo wydają się dosyć optymalne do zmiany.

markonix jeśli chodzi o Twoją opcję, to na każdej stronię muszę dać opcję body id z różnymi nazwami jak: o_nas, startowa, kontakt i na każej z nich menu gdzie kod CSS wskazuje na każdej stronie aktywną inną opcję, bo nie bardzo potrafię sobie to wyobrazić?

A co do CuteOne, gdzie najładniej jest rozpisany kod. Zrobiłem mniej więcej tak tylko zamiast CLASS dałem ID bo o taki znacznik mi dokładnie chodzi który ma być current albo nie, ale... no właśnie ale musiałem też w sekcji body nie tylko Twój kod ale i kawałek mojego dać
  1. <?php
  2. $id=$_GET['id'];
  3. if(empty($id) or $id=="2")
  4. ?>
  5. <?php
  6. switch($id) {
  7.  
  8. case 1:
  9. $css = 1;
  10. include 'strona1.php';
  11. break;
  12.  
  13. case 2:
  14. $css = 2;
  15. include 'strona2.php';
  16. break;
  17.  
  18. case 3:
  19. $css = 3;
  20. include 'strona3.php';
  21. break;
  22.  
  23. default:
  24. $css = 1;
  25. include 'strona1.php';
  26. break;
  27. }
  28. ?>


a menu oczywiście przy sekcji head. Wtedy mi przełączało i includowało strony tak jak w tym moim skrypcie, ale przełącznik podświetlający wybranie menu nie działał. Tzn w tym wypadku gdzie wszystkie 3 są current pierwsze jest cały czas podświetlone, a pozostałe były by gdybym wstawił current zamiast unactive. Ale samo się niestety nie przełącza.
  1. echo '<ul>
  2. <li id="'.(($css == 1) ? "current" : "unactive").'"><a href="index.php?id=1" target="_self"><span>strona 1</span></a></li>
  3. <li id="'.(($css == 2) ? "current" : "unactive").'"><a href="index.php?id=2" target="_self"><span>strona 2</span></a></li>
  4. <li id="'.(($css == 3) ? "current" : "unactive").'"><a href="index.php?id=3" target="_self"><span>strona 3</span></a></li>
  5. </ul>';

CuteOne
ehem już widzę w czym problem.

  1. <?php $id=$_GET['id']; ?>
  2.  
  3. <menu główne>
  4. <body>
  5. <ul>
  6. <li id="<?php echo ($id == 1) ? "current" : "unactive";?>"><a href="index.php?id=srona1" target="_self"><span>strona 1</span></a></li>
  7. <li id="<?php echo ($id == 2) ? "current" : "unactive";?>"><a href="index.php?id=strona2" target="_self"><span>strona 2</span></a></li>
  8. <li id="<?php echo ($id == 3) ? "current" : "unactive";?>"><a href="index.php?id=strona3" target="_self"><span>strona 3</span></a></li>
  9. </ul>
  10. <część strony i miejsce na tekst gdzie będą inkludowane pliki z zewnątrz tutaj strona 1 2 i 3>
  11. <?php
  12.  
  13.  
  14. if(file_exists('strona'.$id.'.php'))
  15. include 'strona'.$id.'.php';
  16. else
  17. include 'strona1.php';
  18.  
  19. ?>
  20.  
  21. // dalsza część skryptu
  22.  


Jezeli nazwy plików będą inne możesz zastosować tablice do przechowywania nazwy wg. id

  1. $file = array(
  2. 'login' => 'include/login.inc.php',
  3. 'menu' => 'menu.php'
  4. );
  5.  
  6. include $file[$id];
markonix
Cytat(adek- @ 25.10.2010, 23:05:51 ) *
markonix jeśli chodzi o Twoją opcję, to na każdej stronię muszę dać opcję body id z różnymi nazwami jak: o_nas, startowa, kontakt i na każej z nich menu gdzie kod CSS wskazuje na każdej stronie aktywną inną opcję, bo nie bardzo potrafię sobie to wyobrazić?

Tak. Dokładnie.
U mnie na stronce możesz zobaczyć w praktyce.
Sposób ten ma kilka zalet:
- unikasz PHP, co zawsze jest jakimś odciążeniem
- ogólnie trendy jest używać CSS zamiast JS/PHP gdy tylko się da (patrz "pure css" coś tam ;) )
- ID przydaje się do innych funkcji (u mnie z tego id skorzystałem także w JS przy ustalaniu skąd ma startować animacja, zobacz menu z ze skryptami włączonymi i wyłączonymi )
CuteOne
markonix: unikanie PHP w tym skrypcie to raczej minus. Wyobraź sobie przepisywanie w kółko stałych fragmentów strony [head, menu, stopka itp]. A przy umiejętnym korzystaniu z dobrodziejstw PHP obciążenie jest równe ~0 smile.gif
markonix
Hm. Nic takiego się nie dzieje w moim przypadku:
Kod
<?php include('./header'); ?>
</head>
<body id="xyz">
Tutaj treść strony
<?php include('./footer.php');?>

- kolejny plus: nagłówek head nigdy nie jest zamknięty więc można dodawać do niego jakieś skrypty czy pliki css potrzebne wyłącznie NA TEJ stronie winksmiley.jpg
adek-
Tak na pewno będą wykorzystywane nazwy inne niż strona1, dlatego na pewno się przyda ta opcja winksmiley.jpg Z tym, że albo źle wykorzystuje ten kawałek kodu albo on dalej mi nie działa. Wkopiowałem i podmieniłem źródełka dla wglądu tutaj STRONA TESTOWA. A mogę źle to składać bo dopiero jestem na początku tutorialu php a na szybko mi ten skrypcik potrzebny.
CuteOne
Pisałem już o tym- cały problem leży w tym aby odczytać zmienną ID przekazywaną w URL np. http://maxbox.czest.pl/test/index.php?id=strona1

Dlatego jeżeli chcesz zmienić styl dla linku musisz wiedzieć jaka wartość odpowiada za daną stronę a prościej -

http://maxbox.czest.pl/test/index.php?id=strona1

zamiast
<li id="<?php echo ($id == 1) ? "current" : "unactive";?>"><a href="index.php?id=srona1" target="_self"><span>strona 1</span></a></li>
wstawiasz
<li id="<?php echo ($id == 'strona1') ? "current" : "unactive";?>"><a href="index.php?id=srona1" target="_self"><span>strona 1</span></a></li>
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.