Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] a'la iframe w PHP problem z ładowaniem
adek-
post
Post #1





Grupa: Zarejestrowani
Postów: 124
Pomógł: 2
Dołączył: 19.04.2007
Skąd: Częstochowa

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


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>

Ten post edytował adek- 10.02.2012, 15:22:05
Go to the top of the page
+Quote Post
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


"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.
Go to the top of the page
+Quote Post
adek-
post
Post #3





Grupa: Zarejestrowani
Postów: 124
Pomógł: 2
Dołączył: 19.04.2007
Skąd: Częstochowa

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


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 :_
Go to the top of the page
+Quote Post
CuteOne
post
Post #4





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


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>


Ten post edytował CuteOne 10.02.2012, 18:54:03
Go to the top of the page
+Quote Post
adek-
post
Post #5





Grupa: Zarejestrowani
Postów: 124
Pomógł: 2
Dołączył: 19.04.2007
Skąd: Częstochowa

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


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ą?

Ten post edytował adek- 13.02.2012, 13:16:35
Go to the top of the page
+Quote Post
mortus
post
Post #6





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


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.
Go to the top of the page
+Quote Post
adek-
post
Post #7





Grupa: Zarejestrowani
Postów: 124
Pomógł: 2
Dołączył: 19.04.2007
Skąd: Częstochowa

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


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.
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 Aktualny czas: 21.08.2025 - 12:09