Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z ładowaniem strony przy użyciu $_GET['id'];
Forum PHP.pl > Forum > PHP
ats2008
Witajcie,

Z góry mówię, że to będzie długi post, więc proszę o cieprpliwość.

Mam stronę z ogromną liczbą grafiki, więc żeby zmniejszyć jej ciężar i zrobić ją bardziej przejrzystą w nawigacji, postanowiłem zbudować ją poprzez funkcję require (include też próbowałem) przy pomocy tablicy globalnej $_GET.

Założenie było takie jak na rysunku:

a mianowicie, żeby elementy BANER I STOPKA były stałe, a wczytywane były do diva BOX elementy strony.

I do tego momentu nie było problemów, to umiem zrobić i działa.

Strona nad która pracuję jest jednak rozbudowana, więc postanowiłem zrobić coś więcej, a mianowicie zagnieździć (szukam określenia) wczytanie metodą $_GET do wczytanego już tą samą metodą diva BOX jak na rysunku:
.
I tak dzięku podwójnemu includowaniu powinniśmy mieć całą stronę...

Wiem, że można użyć np. menu rozwijanego, żeby nie komplikować, ale zależy mi na tym rozwiązaniu, żeby strona była przejrzystsza w nawigacji. Każdy dział Home, Oferta i blablabla mają swoje własne podkategorie...

To niestety nie działa...

Zanim obejrzysz efektu tutaj: TUTAJ., zwróć uwagę, że w divie INFO jest tekst, a po naciśnięciu link home1 w menu, pojawia się napis: nie ma takiej strony...

Podam teraz kody stron z której zbudowana jest witryna testowa:

index.php:

  1. <?php
  2. // zmienna potrzebna do prawidlowego wczytania includowanych plikow
  3. $add_site = true;
  4. ?>
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  6. <html xmlns="http://www.w3.org/1999/xhtml">
  7. <head>
  8. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
  9. <title>Problem...</title>
  10. <link rel="stylesheet" type="text/css" href="index.css" />
  11. </head>
  12.  
  13. <body>
  14. <div id="body">
  15. <!--====================BANER =====================================-->
  16. <div id="baner">
  17. <?php require "strony/baner.php"; ?>
  18. </div>
  19. <!--==============================gohome====================-->
  20.  
  21. <div id="box">
  22. <?php
  23. $gohome = $_GET['gohome'];
  24.  
  25. // sprawdzamy czy zmienna $gohome nie jest pusta
  26. if(!empty($gohome)) {
  27. // sprawdzamy czy plik o danej nazwie istnieje
  28. if(is_file("strony/$gohome.php")) require "strony/$gohome.php";
  29. // jezeli plik nie istnieje wyswietla się komunikat
  30. else echo "<br />Nie ma takiej strony :-(";
  31. }
  32. // jezeli zmienna $gohome jest pusta wyswietla się strona glowna
  33. else require "strony/blabla.php";
  34.  
  35. ?>
  36. </div>
  37. <!--====================STOPKA============================-->
  38. <div id="stopka">
  39. <?php require "strony/stopka.php"; ?>
  40. </div>
  41.  
  42. </div>
  43. </body>
  44. </html>


baner.php i stopka.php (są identyczne) wczytują strony: home.php, oferta.php i blabla.php do div BOX:

  1. <?php
  2. // sprawdzenie czy zmienna $add_site istnieje
  3. if(!$add_site) exit;
  4. ?>
  5. <a href="index.php?gohome=home">HOME</a> | <a href="index.php?gohome=oferta">OFERTA</a> | <a href="index.php?gohome=blabla">blablabla</a>



Pliki home.php, oferta.php i blabla.php są praktycznie identyczne, różnią się tylko ścieżkami odniesienia do podkatalogów; home.php:

  1. <?php
  2. // sprawdzenie czy zmienna $add_site istnieje
  3. if(!$add_site) exit;
  4. ?>
  5. <div id="menu">
  6. <?php require "strony/home/menuhome.php"; ?>
  7. </div>
  8. <!--================================INFO======================-->
  9. <div id="info">
  10. <?php // sprawdzamy czy zmienna $gohome nie jest pusta
  11. if(!empty($gohome)) {
  12. // sprawdzamy czy plik o danej nazwie istnieje
  13. if(is_file("home/$gohome.php")) require "home/$gohome.php";
  14. // jezeli plik nie istnieje wyswietla się komunikat
  15. else echo "<br />Nie ma takiej strony :-(";
  16. }
  17. // jezeli zmienna $gohome jest pusta wyswietla się strona glowna
  18. else require "home/home1.php";
  19.  
  20. ?>
  21. </div>


home.php wczytuje przy użyciu require listę do div MENU oraz po najechaniu na linki w menu podstrony do div INFO za pomocą $_GET['gohome'];

Dla większej przejrzystości dodam jeszcze zrzuty z drzewa katalogów, żeby widać było, gdzie są umieszczone pliki:



Co ciekawe, bo div BOX wszystko wczytuje się elegancko, problem jest z zagnieżdżeniem, nie wczytuje plików do div INFO po naciśnięciu linku w div MENU, ale za to wczytuje ten sam plik, który jest zadeklarowany w:
  1. // jezeli zmienna $gohome jest pusta wyswietla się strona glowna
  2. else require "home/home1.php";
przy starcie index.php.

Z tego wniosek, że takie podwójne includowanie może działać, gdzieś jest jednak błąd.

Jest jeszcze jeden problem - z jakiegoś powodu po naciśnięciu linku home w banerzu lub stopce i potem którego linka w menu, efekt jest taki, że ucina cały div Box z napisem, nie ma takiej strony... Nie dzieje się tak w z oferta i blabla, mimo że mają identyczny kod, sprawdzałem kilkakrotnie (różnią się tylko ściężkami dostępu do własnych podkatalogów...).

Proszę Was o pomoc, gdzie tutaj jest błąd, coś powinienem dodać, usunąć? Siedzę już nad tym któryś dzień i nie widzę wyjścia z sytuacji... jeszcze smile.gif.

A może użyć jakiejś innej techniki, która tutaj by się sprawdziła?

Pozdrawiam wszystkich, którzy dotarli aż tutaj. Jesteście Wielcy!! smile.gif.
tehaha
jeżeli do BOX się wszystko ładuje a to info nie to

tutaj
  1. if(is_file("home/$gohome.php")) require "home/$gohome.php";


powinno być

  1. if(is_file("strony/home/$gohome.php")) require "strony/home/$gohome.php";


bo to że załadowałeś plik przy pomocy
  1. require()
to nie znaczy że wszedłeś do tego folderu
ats2008
Witaj,

Próbowałem tak wcześniej robić, ale to nie pomaga, problem jest gdzieś indziej...

Dodam jeszcze kod menuhome.php (menuoferta.php i menublabla.php są analogiczne):

  1. <?php
  2. // sprawdzenie czy zmienna $add_site istnieje
  3. if(!$add_site) exit;
  4. ?>
  5.  
  6. <li><a class="link" href="index.php?gohome=home1">home1</a></li>
  7.  
  8. <li><a class="link" href="index.php?gohome=home2">home2</a></li>
  9. <li><a class="link" href="index.php?gohome=home3">home3</a></li>


Próbowałem nawet w tym menu wpisywać:

  1. <li><a class="link" href="home.php?gohome=home1">home1</a></li>
, jako że to się wczytuje do home.php, ale efekt był taki, że ucinął cały css i pozostawiał tylko niesformatowany home.php...

Próbowałem też kombinować z 2 zmiennymi $_GET, tzn. osobno do wczytywania do BOX ($_GET['box']), a osobny do wczytywania do INFO ($_GET['gohome']).

Oto kody:

index2.php:
  1. <?php
  2. // zmienna potrzebna do prawidlowego wczytania includowanych plikow
  3. $add_site = true;
  4. $gohome = $_GET["gohome"];
  5. $box = $_GET["box"];
  6. ?>
  7. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  8. <html xmlns="http://www.w3.org/1999/xhtml">
  9. <head>
  10. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
  11. <title>www.atsdesign.pl - profesjonalne projektowanie stron WWW</title>
  12. <link rel="stylesheet" type="text/css" href="index.css" />
  13. </head>
  14.  
  15.  
  16. <body>
  17. <div id="body">
  18.  
  19. <!--======BANER======================================-->
  20. <div id="baner">
  21. <?php require "strony/baner.php"; ?>
  22. </div>
  23. <!--============gohome========================================-->
  24.  
  25. <div id="box">
  26. <?php // sprawdzamy czy zmienna $gohome nie jest pusta
  27. if(!empty($box)) {
  28. // sprawdzamy czy plik o danej nazwie istnieje
  29. if(is_file("strony/$box.php")) require "strony/$box.php";
  30. // jezeli plik nie istnieje wyswietla się komunikat
  31. else echo "<br />Nie ma takiej strony :-(";
  32. }
  33. // jezeli zmienna $go jest pusta wyswietla się strona glowna
  34. else require "strony/home.php";
  35.  
  36. ?>
  37. </div>
  38. <!--=========STOPKA=====================================-->
  39. <div id="stopka">
  40. <?php require "strony/stopka.php"; ?>
  41. </div>
  42. </div>
  43. </body>
  44. </html>


baner.php i stopka.php:

  1. <?php
  2. // sprawdzenie czy zmienna $add_site istnieje
  3. if(!$add_site) exit;
  4. ?>
  5. <a href="index.php?box=home">HOME</a> | <a href="index.php?box=oferta">OFERTA</a> | <a href="index.php?box=blabla">blablabla</a>


Reszta jest taka sama, tzn. jak wcześniej (tzn. ma zmienną $gohome).

Efekt jest bliższy rozwiązania, tzn. wczytuje już do INFO, ale TYLKO tą stronę, która jest zadeklarowana w index.php jako startowa. W przykładzie TUTAJ jest to home.php, jeśli zmienię na oferta.php, to wtedy będzie wczytywa do info z oferty.... w przypadku innych, będzie powracał do home...

Jeśli uda się rozwiązać to przechodzenie do zadeklarowanej strony startowej home.php, to problem będzie załatwiony smile.gif.

Na razie nie mam więcej pomysłów, co z tym zrobić...
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.