Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] a'la iframe w PHP problem z ładowaniem
Forum PHP.pl > Forum > Przedszkole
adek-
Witam, kombinuję w php aby mi strona index.php wyświetlała różne zawartości html/php w głównej jej części, w zależności od linka jaki kliknę i zrobiłem sobie coś takiego:
w index.php na środku czyli tam gdzie treść będzie zmienna
  1. header
  2. <?php
  3. pokaz($show,$id);
  4. ?>
  5. footer

no i porobiłem sobie plik funkcje który zaincludowałem do index.php
  1. function pokaz($mod,$id)
  2. {
  3. switch($mod)
  4. {
  5. case 'strona1': { strona1(); break; }
  6. case 'strona2': { strona2(); break; }
  7. default: { main(); break; }
  8. }
  9. }
  10. // funkcje zawartości stron
  11. function main()
  12. {
  13. echo 'Cała zawartość stony głównej';
  14. }
  15. function strona1()
  16. {
  17. echo 'Cała zawartość stony1';
  18. }
  19. // ...itd... i wywoływałem linkiem
  20. <a href="?show=strona1">Strona1</a>

Ale wymaga to register globals on! Jest jakieś obejście tego bez włączania registerek? Chyba, że ktoś zna bardzo podobną opcję funkcjonowania takich rzeczy ;/

=================
Wcześniej robiłem coś na zasadzie includowania plików, co już mi się znudziło i chciałem przejść na funkcje i case, odchodząc od ciągłych include...
  1. $id=$_GET['id'];
  2. if(empty($id) or $id=="main"){
  3. include("dane/main.php"); }
  4. if($id=="strona1"){ include("dane/strona1.php"); }
  5. if($id=="strona2"){ include("dane/strona2.php"); }

// i wywoływałem linkiem
<a href="index.php?id=strona1">Strona1</a>
mortus
"To" nie wymaga włączenia opcji register_globals. Trzeba tylko wiedzieć, jak odbierać zmienne przesyłane w adresie URL. Swoją drogą to właśnie robiłeś, jak to nazwałeś, wcześniej i ten wcześniejszy sposób był dużo lepszy, choć najlepszym rozwiązaniem byłoby połączenie obudwu metod.

Czytając Twój temat można zgadnąć, że nie masz bladego pojęcia o podstawach programowania w PHP. W związku z tym odsyłam do pierwszego lepszego kursu.
adek-
Dzięki mortus, niezbyt pomogłeś i jak sam zauważyłeś piszę w przedszkolu jako początkujący... a tamtej metody nie chcę już używać, bo na case'ach będzie mi wygodniej tworząc bezlik funkcji łatwiejszych do edycji niż wcześniej grzebanie w kodzie w mnogich includach.
Niestety nieumiejętność niektórych rzeczy podczas obraniania takich jak ta podstaw przysparza mnie jak widać o pewne kłopoty, nawet jeśli inne kwestie robie "nieco" bardziej rozbudowane... dlatego pytam i proszę o pomoc smile.gif)
oczywiście bierny nie jestem i próbuję również kombinować na własną rękę, ale zająłem się bardziej zagmatwanymi rzeczami narazie :_
CuteOne
1. Mortus ma racje.. we wszystkim co napisał
2. Co ma "bezlik funkcji" do sposobu ich ładowania - include/funckje?
3.

  1. $id = $_GET['id']
  2. //tutaj jakaś funkcja sprawdza czy plik cache jest w miarę świeży i go załącza - zwracając ścieżkę
  3. $view = 'cache/'.$id.'.php';
  4. else
  5. //cache nie świeży include "zwykłego" pliku
  6. $view = 'include/'$id.'.php';


layout.php
  1. <head></head>
  2. <body>
  3. <?php include $view; ?>
  4. </body>
adek-
Ad1. CuteOne, a ja wcale się nie wypierałem... próbowałem raczej się wytłumaczyć, że jednak jestem początkującym, a dopiero wieloletnie, bądź jakiekolwiek doświadczenie weryfikuje takie właśnie błędy.
Ad2. bezlik funkcji mam na myśli jeden plik, gdzie mam umieszczone wszystkie case'y na podstrony, a każda podstrona posiada swoje funkcje, gdzie zawarte jest wszystko dotyczące danej sekcji strony... dodawanie/usuwanie tabel i danych, jak i wyświetlanie tych danych potrzebnych w danej sekcji strony, funkcje odpowienich kalkulatorów, czy masy innych zmiennych, przez co ograniczam liczbę plików do jednego includa "funkcje.php".

Nie mówię, że jest to dobre rozwiązanie, po prostu dla mnie jak narazie najbardziej wygodne na stan mojej wiedzy dt. PHP/MySQL wink.gif

Moją bolączke rozwiązała sprawa:
  1. if(isset($_GET['show'])) $show=$_GET['show']; else $show='main()';
  2. pokaz($show);
  3. //a jeszcze lepszym, bo zarazem krótszym rozwiązaniem było:
  4. $show = $_REQUEST['show'];


Nie mniej jednak CuteOne jestem ciekaw Twojego rozwiązania, bo być może jest 100 razy lepsze jako bardziej doświadczonego. Nie bardzo tylko wiem o co chodzi z funkcją która sprawdza plik cache i jego świeżość. Chodzi o coś co będzie sprawdzało datę utworzenia, bądź edycji danego pliku który ma zostać zaincludowany? Tzn w folderze /cache/ są inne pliki niż /inlcude/ różniące się aktualną zawartością?
mortus
Cytat(adek- @ 13.02.2012, 13:13:24 ) *
  1. //a jeszcze lepszym, bo zarazem krótszym rozwiązaniem było:
  2. $show = $_REQUEST['show'];

Przecież to to samo (tablica superglobalna $_REQUEST "zawiera" w sobie inne teblice superglobalne, m.in. $_GET, $_POST) i jeśli w adresie URL nie będzie zmiennej show, to również zostanie wyświetlony błąd-uwaga. Temat include-owania jednego pliku zamiast kilku mniejszych był ostatnio na forum poruszany, przeszukaj tematy wstecz, a dowiesz się co będzie lepszym rozwiązaniem.
Pisząc aplikacje strukturalnie również warto zadbać o jak najlepsze odseparowanie warstwy logicznej od warstwy prezentacji i starać się programować zgodnie z regułami DRY i KISS. Najprostszym przykładem jest w Twoim przypadku zbędna instrukcja switch, bo skoro nazwa funkcji przekazywana jest w adresie URL, to wystarczy:
  1. $akcja = isset($_GET['show']) && $_GET['show'] != '' ? $_GET['show'] : 'main';
  2. if(function_exists($akcja)) $akcja();


Renderowanie widoków, to nic innego, jak wstawianie plików za pomocą include i wykorzystuje się to praktycznie wszędzie.
adek-
mortus faktycznie, podałeś kapitalny i działający przykład. Dziękuję również za dobre tłumaczenie, łatwiej przyswoić sposób myślenia ku dobrym nawykom programowania. Jeszcze długo nie będę mógł sie nazywac programistom, ale taka pomoc która wskazuje na kierunek i pare definicji związanych z dorbrym programowaniem po obczytaniu się rozjaśnia trochę spraw. Człowiek w głowie robi sobie taki framework sposobu pisania. Przerabianie książek też pozwala pojąć ogrom sposobów podejścia. Dzięki jeszcze raz!

A na marginesie zastanawiam się, czy za pomocą jednej zmiennej get np również GET['show'] da się wrzucić dwie różne funkcje w różne miejsca z różnymi danymi. Mianowicie GET['cars'] i w częśc główną strony ładują sie rzeczy o samochodach, a w menu boczne menu z opcjami dla samochodów, GET['motors'] w menu główne ładuje się funkcja z informacjami o motorach, a w menu boczne funkcja z menu do motorów? Programuję jeszcze strukturalnie, bo nie wiem czy jest sens juz zaczynać uczyć się obiektówki zanim nie opanuję w miarę myslenia i działania z php.
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.