Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z ładowaniem strony przy użyciu $_GET['id'];
ats2008
post 11.02.2010, 19:50:08
Post #1





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 11.06.2009
Skąd: Lublin

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


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.

Ten post edytował ats2008 11.02.2010, 19:55:03
Go to the top of the page
+Quote Post
tehaha
post 11.02.2010, 20:43:11
Post #2





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


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
Go to the top of the page
+Quote Post
ats2008
post 12.02.2010, 12:44:09
Post #3





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 11.06.2009
Skąd: Lublin

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


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ć...
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 Wersja Lo-Fi Aktualny czas: 27.06.2025 - 21:04