Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Podstrony w php, Jak dołaczac podstrony w php?
adi2005
post
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 17.07.2006
Skąd: Warszawa

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


Tworzę mała witrynę w php. Podstrony wczytuję za pomoca zmiennych np. "/index.php?zmienna=". Wszystko jest oki ale przecież cała witryna nie moze być zbudowana na jednym pliku index.php! Jak zrobić by naprzykład plik "podstrona.php" nie zawierał tego co "index.php" a witryna zawierała to?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
PS. Strona nie jest zbudowana na tabelach tylko na DIV'ach i CSSie!
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




W manualu są opisane takie funkcje jak
include() oraz require() - za ich pomoca zrobisz to, co chcesz zrobić.
Go to the top of the page
+Quote Post
nasty
post
Post #3





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

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


albo:
  1. <?php
  2. switch($_GET['zmenna']) {
  3. case 'a':
  4. break;
  5. [...]
  6. }
  7. ?>


ale sprecyzuj pytanie to ci powiem co i jak dokladniej

Ten post edytował nasty_psycho 17.07.2006, 12:21:49
Go to the top of the page
+Quote Post
adi2005
post
Post #4





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 17.07.2006
Skąd: Warszawa

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


np strona: "clubbing.pl": W lewym menu każdy link odnosi się do innego skryptu *.php. Klikasz w link a menu pozostaje i napewno nie zaiwerają go podstony. Jesli uzyję funkcji "include" wtedy powórnie mi sie wczyta menu obok i bede miał 2 menu....
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #5





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Wszystko zależy od tego jak zaprojektujesz stronę. Możesz stworzyć "ramówkę" do której będziesz wpychał kawałki stron.
np. Najprostszy przykład dla zobrazowani a sytuacji

index.php
  1. [php]include ('head.php');[/php]
  2. [php]include ('body.php');[/php]
  3. </html>


head.php
  1. <title>jakis tytul</title>


etc. Powyższy kod nie jest za bardzo przydatny, ale ilutsruje tylko same założenie, czyli wydzielanie teg, co na stronie jest zmienne.
Go to the top of the page
+Quote Post
nasty
post
Post #6





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

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


... albo jakies szablony (smarty)
... czy frameworki typu prado

jest kilka mozliwosci

Ten post edytował nasty_psycho 17.07.2006, 12:45:44
Go to the top of the page
+Quote Post
mateofi
post
Post #7





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 30.12.2004

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


  1. <?php
  2. $id=$_GET["id"];
  3.  if(!isset($id)) {
  4. include("$id/index.php");
  5.  }
  6.  else {
  7.  if(is_file("id/$id.php")) {
  8.  include("id/$id.php");
  9.  }
  10.  else
  11.  include("id/error.php");
  12.  }
  13. ?>


i podstrony

index.php?id=news
index.php?id=forum
Go to the top of the page
+Quote Post
LamaMASTER
post
Post #8





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

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


Jak widzę podstrony na switch i case to mi się śmiać chce (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Najlepiej kod jaki podał mateofi, ale lepiej zrobić go tak:
  1. <?
  2. $id = $_GET['id'];
  3. if (empty($id)) {
  4. include('glowna.php');
  5. }
  6. else {
  7. if (file_exists($id)) {
  8.  include('podstrony/'.$id.'.php');
  9. }
  10. else {
  11.  ?> Nie ma takiej podstrony <?
  12. }
  13. }
  14. ?>

I na przyszłość mateofi nie ucz początkujących wyświetlania wartości zmiennych tak: "$zmienna".
Go to the top of the page
+Quote Post
thornag
post
Post #9





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


LamaMaster -> Smiej sie smiej, ja i tak uwazam ze switchowy szybszy i bezpieczniejszy. Zamiast tony ifow dajesz default: include("404.pgp"); na przyklad, do tego nie ma zabardzo mozliwosci wstawienia jakiejkolwiek innej zmiennej bo switch poprostu pojdzie na default. A z tego co wiem przy takim includowaniu nawet z file_egzists miozna podstawic jakies ta ciekawe stringi do adresu. Ale kto wie moze sie myle.

Pozatym nie rozumiem skad taka zmiana na mentora php (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Niedawno byl problem z cookies i odejmowaniem dat ! Swoja droga zaintrygowales mnie, dlaczego chce Ci sie smiac z Switchow ?

A wracajac do tematu u mnie to zawsze wyglada tak...

  1. <?php
  2.  
  3. if(!isset($_GET['page'])) {
  4. include("podooch/home.php");
  5. }
  6. else {
  7. switch ($_GET['page']) {
  8. case "user_auth":
  9. include("lib/user_login.php");
  10. break;
  11. case "logout":
  12. include("lib/user_logout.php");
  13. break;
  14. // tutaj inne case'y //
  15. default:
  16. include("podooch/home.php");
  17. }
  18. }
  19. ?>


Ten post edytował thornag 18.07.2006, 10:00:09
Go to the top of the page
+Quote Post
revyag
post
Post #10





Grupa: Przyjaciele php.pl
Postów: 2 258
Pomógł: 16
Dołączył: 21.09.2004
Skąd: Kielce

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


Rozwiązanie ze switch może być dobre dla małej ilości podstron. A co kiedy mój serwis ma ich 100 ? Np. archiwum newsów, atrykułów itp. Zrobisz switcha ze 100 warunkami ?
file_exists sprawdzi czy plik istnieje na dysku, więc nie wiem co byś musiał podać w urlu, żeby zaincludować swój plik, chyba hokus pokus (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)
Można ewentulanie jeszcze zmienną z adresu objąć basename.
Go to the top of the page
+Quote Post
thornag
post
Post #11





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


No ja przyzwyczailem sie do innego typu. Switch mi odpowiada jak najbardziej (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Kiedy mam 10 glownych 'dzialow' a w kazdym z nich jest po 10 podstron, to u mnie jest 10 dodatkowych switchow, index.php5?section=dzial&dzial=podstrona, a casy dodaje w trakcie tworzenia.

Jakos bardziej to do mnie przemawia. Jesli jest znaczna roznica w predkosci wykonywania, czy tez przewaga ifow nad switchem to prosze o dobitne argumenty (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Calkiem mozliwe ze zdanie zmienie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Co do tego archowum np, to przeciez masz tylko strony z np lista i podgladem newsa. W tym skrypty pobierajace z bazy danych i wyswietlajace :0 Nie mam zamiaru robic switcha dla kazdego news_id :DDDD

Ten post edytował thornag 18.07.2006, 10:19:16
Go to the top of the page
+Quote Post
LamaMASTER
post
Post #12





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

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


Hehe z cookies to ja nigdy nie miałem problemu, tylko ostatnio mi wylogowywanie nie działało, bo IE nie usuwa tego cookies (a kod jest poprawny). Być może wina leży po innej stronie.
A dodawanie dat to taka prosta sprawa nie jest (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Tak czy siak nie jestem żadnym mistrzem php, ale ładowanie podstron to rzecz podstawowa.
Po pierwsze switch jest wolniejszy, a po drugie co jak ktoś będzie miał 120 podstron? Zrobisz 120 razy case?
Poza tym ja wskazałem ścieżkę:
'podstrony/'.$id.'.php', więc ona musi znajdować się na serwerze. Co innego jeżeli ścieżka to było same $id. Ktoś musiałby coś zuploadować do tamtego katalogu żeby odpalić. Dlatego skrypt jest jak najbardziej bezpieczny.

PS: dopiero teraz czytałem dalsze posty - widzisz tu też gadają o tylu casach (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Ify przeważają - są szybsze i można więcej rzeczy nimi zrobić, a dobry if nigdy nie jest niebezpieczny.
Co prawda różnicy w prędkości nigdy nie zauważysz (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

edit

a ja w moim rozwiązaniu znalazłem buga:
  1. <?php
  2. if (file_exists($id)) {
  3.  include('podstrony/'.$id.'.php');
  4. }
  5. ?>

Z rozpędu sprawdza samo $id (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Oczywiście ma być tak:
  1. <?php
  2. $id = 'podstrony/'.$id.'.php';
  3. if (file_exists($id)) {
  4.  include($id);
  5. }
  6. ?>


Ten post edytował LamaMASTER 18.07.2006, 10:31:02
Go to the top of the page
+Quote Post
revyag
post
Post #13





Grupa: Przyjaciele php.pl
Postów: 2 258
Pomógł: 16
Dołączył: 21.09.2004
Skąd: Kielce

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


Przykład za archiwum to tylko przykład. Nie mówiłem nic o bazie danych, chodziło mi o serwis z dużą ilością stron bez bazy.
  1. <?php
  2. $file = basename($_GET['page']);
  3. if(file_exists('katalog/'.$file.'.php') {
  4. require_once('katalog/'.$file.'.php');
  5. } else {
  6. require_once('katalog/default.php');
  7. }
  8. ?>

Prównaj to ze swoim kodem, nadal nie widzisz różnicy ?
Tak jak napisałem wcześniej, kiedy w serwisie masz masz niedużo podstron to rób switcha, ale jeśli jest ich więcej i będzie przybywać to takie rozwiązanie jest bez sensu, bo będziesz musiał ciągle dodawać dodatkowe warunki do switcha.
A kod który podałem napiszesz raz i tyle (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #14





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Cytat
Ify przeważają - są szybsze i można więcej rzeczy nimi zrobić, a dobry if nigdy nie jest niebezpieczny.


Możesz to rozwinąć? Osobiście jedyna różnica jaką widzę, to zastosowanie - gdzieś jest dobry if else, a gdzieś indziej switch

switch [ang], przełącz - mówi samo za siebie
Go to the top of the page
+Quote Post
LamaMASTER
post
Post #15





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

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


Ogólnie warunki wykonują się szybciej niż porównywanie do casów. Więcej rzeczy można nimi zrobić - no ify nie są tylko do ładowania podstron, a poza tym wyżej jest podany kod, który mówi sam za siebie co można za pomocą ifa zrobić (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
thornag
post
Post #16





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


Serwisy ktore dotychczas robilem raczej opieraja sie na niewielkiej ilosci plikow(szablonow) do ktorych jest ladowane wszystko z bazy. Takze dla mnei if przyjemniejszy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Cytat
Tak jak napisałem wcześniej, kiedy w serwisie masz masz niedużo podstron to rób switcha, ale jeśli jest ich więcej i będzie przybywać to takie rozwiązanie jest bez sensu, bo będziesz musiał ciągle dodawać dodatkowe warunki do switcha.


Takze zostaje caly czas przy swoim (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Poki robienie nie wiecej niz 10 casow dla switcha mi nie przeszkadza bede robil to dalej (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Co do ifow to rzeczywiscie przy wielu podstronach nie ma sensu przelaczac. Jednak zazwyczaj jak juz pisalem opieram strone na 10(przykladowo) glownych dzialac wiec mam 'glowna sterownie' zlozona z niezbyt duzego switcha.

No to doszlismy do jakis wnioskow (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #17





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




@lamaMASTER - Oprócz szybkości działania (potestowałem troszkę (IMG:http://forum.php.pl/style_emoticons/default/happy.gif) ), to nie widzę przewagi if else nad switchem. Za pomocą switch zrobisz to samo.
  1. <?php
  2. switch (file_exists($file)){
  3. case true: include($file);break;
  4. case false: die("Ooops!");break;
  5. }
  6. ?>


Już gdzieś pisałem, że jeśli trzeba reagować na więcej niż trzy wartosci, to switch jest lepszy, bo bardziej przejrzysty.
Go to the top of the page
+Quote Post
thornag
post
Post #18





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


Dodam jeszcze ze np

Czasem nie chce includowac pliku tylko przekierowac na niego (header(Location);

Eg : index.php5?page=home zostaje w tym samym oknie.(tzn includuje do srodka)
index.php5?page=faq przekierowuje na storne z innym layoutem.

Od razu dodam ze wiem ze moge poprostu linka wstawic zamiast index.php5 daj faq.php. Ale ja wole utrzymac wszystko w strukturze page= to dzial do wyswietlenia.

Wtedy switchem zrobie to bez problemu, uzywajac tylko IF statement musze dodac kolejny warunek sprawdzajacy czy zmienna eg page jest rowna faq jesli tak to zamiast include header.
Go to the top of the page
+Quote Post
LamaMASTER
post
Post #19





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

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


Co do przykładu ze switchem - mi się wydaje, że if jest jednak bardziej przejrzysty (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Tak samo można zrobić:
  1. <?php
  2. if (file_exists($file)) { include($file); }
  3. else { die('Ooops!'); }
  4. ?>

Na dodatek if nie potrzebuje break (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #20





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Cytat(Cysiaczek @ 18.07.2006, 11:02 ) *
Już gdzieś pisałem, że jeśli trzeba reagować na więcej niż trzy wartosci, to switch jest lepszy, bo bardziej przejrzysty.


Nie w tej sytuacji, tylko gdy masz więcej możliwych rezultatów. np od 1 do 50 . Będziesz robił 50 razy if elseif elseif ... else ? No chyba lepiej switch nieprawdaż? (IMG:http://forum.php.pl/style_emoticons/default/laugh.gif)
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.12.2025 - 03:51