Tworzenie szablonu www opartego na PHP
W artykule tym przedstawie sposób, jak za pomocą jedneko pliku .php oraz paru plików .inc zbudować szablon strony. Nie chodzi tutaj o wygląd, tylko o zasadę działania strony.
Napisałem ten artykuł, ponieważ gdy uczyłem się jeszcze php (uczę się go cały czas lecz już nie tak intensywnie) bardzo chciałem się dowiedzieć jak się takie strony robi, a nie mogłem tego nigdzie znaleźć. Mam nadzieję, że mój tekst oszczędzi Ci wielu godzin żmudnego szukania.
Zalety:
Ważną, jeżeli nie najważniejszą zaletą takiego szablonu jest to, że jeśli twoja strona miałaby 20 podstron i chciałbyś dodać do niej jeszcze jedną, musiałbyś na każdej stronie do menu dodawać link. W przypadku 20, czy nawet więcej stron taka praca zajęłaby dużo czasu. W przypadku strony zrobionej z użyciem tego szablonu php zmieniać musisz tylko jeden plik i dodać link. Chyba już zorientowałeś się, jaka to oszczędność czasu.
Szablon:
Na potrzeby tego artykułu zakładam, że znasz chociaż podstawy html, bo bez tego byłoby trudno. Załóżmy, że mamy szablon zrobiony w html-u oparty o tabele i wygląda on tak:
<HTML>
<HEAD>
<TITLE>Compzone jest git :)</Title>
</head>
<body>
<table cellpadding="0" cellspacing="0" width="100%" border="1">
<tr><td colspan="3">miejsce na logo</td></tr>
<tr>
<td>lewe menu</td>
<td>tresc wlasciwa strony</td>
<td>prawe menu</td>
</tr>
<tr><td colspan="3">Podpis pod stroną</td></tr>
</body>
</html>
Szablon w php jest dla kogoś, kto miał już chociaż małe doświadczenie z php jest bardzo łatwy do wykonania. Wykorzystuje on funkcję include oraz instrukcję warunkową if...else. Zaczniemy od zmienienia menu tak, aby było ono wczytywane z pliku z rozszerzeniem .inc:
<HTML>
<HEAD>
<TITLE>Compzone jest git :)</Title>
</head>
<body>
<table cellpadding="0" cellspacing="0" width="100%" border="1">
<tr><td colspan="3">miejsce na logo</td></tr>
<tr>
<td> include"lewe.inc"; </td>
<td>tresc wlasciwa strony</td>
<td> include"prawe.inc"; </td>
</tr>
<tr><td colspan="3">Podpis pod stroną</td></tr>
</body>
</html>
Oczywiście, aby w kodzie nie wyświetlały się błędy, muszą istnieć pliki lewe.inc i prawe.inc. W plikach tych, jak łatwo się domyślić, musi być menu. Teraz, gdy menu jest wczytywane z pliku, możemy zrobić tak, aby właściwy tekst strony również był wczytywany z pliku. Do osiągnięcia tego celu wykorzystamy instrukcję warunkową if...else. Tutaj bedzie odpowiedź na pytanie, jak zrobić, aby link miał postać index.php?show=1. Kod będzie wyglądał tak:
<HTML>
<HEAD>
<TITLE>Compzone jest git :)</Title>
</head>
<body>
<table cellpadding="0" cellspacing="0" width="100%" border="1">
<tr><td colspan="3">miejsce na logo</td></tr>
<tr>
<td> include"lewe.inc"; </td>
<td>
if(!isset($show)) {
include"newsy.inc"; }
else if ($show=='1') {
include"texty.inc"; }
else if($show=='2') {
include"php.inc"; }
else {
echo("Nie ma takiej strony"); }
</td>
<td> include"prawe.inc"; </td>
</tr>
<tr><td colspan="3">Podpis pod stroną</td></tr>
</body>
</html>
Linki, które prowadzą do tej strony powinny wyglądać tak:
<a href="index.php?show=1">Texty</a>
<a href="index.php?show=2">PHP</a>
Omówię teraz w skrócie instrukcję warunkową. Chodzi w niej o to, że jeżeli zmienna $show nie jest ustawiona, strona wczytuje kod z pliku newsy.inc. Jeżeli zmienna jest ustawiona i wynosi 1, strona wczytuje kod z pliku texty.inc. Takich możliwości można dodawać w nieskończoność. Należy tylko pamiętać o tym, iż zmienne te definiuje się w linku po pytajniku, jak widać to w przykładzie linku.
Mam nadzieję, że rozjaśniłem ci trochę budowanie stron w oparciu o php. Może i na początku kod wydaje się trudny, a strona bardziej rozbudowana, ale na dłuższą metę, szczególnie w dużych stronach, opłaca się taki szablon.
################ ## Version by jedrex ## ################
Imho moim zdanie wykorzystanie instrukji if jest nieodpowiednie, napewno lepszym rozwiązaniem będzie instrukcja switch.
Po zmianie powyższy kod powinien wyglądać tak:
<HTML>
<HEAD>
<TITLE>Compzone jest git :)</Title>
</head>
<body>
<table cellpadding="0" cellspacing="0" width="100%" border="1">
<tr><td colspan="3">miejsce na logo</td></tr>
<tr>
<td> include 'lewe.inc'; </td>
<td>
![]()
![]()
switch($show){
![]()
case 1:
include 'newsy.inc';
break;
![]()
case 2:
include 'texty.inc';
break;
![]()
case 3:
include 'php.inc';
break;
![]()
default:
echo 'Nie ma takiej strony';
break;
![]()
}
![]()
![]()
</td>
<td> include 'prawe.inc'; </td>
</tr>
<tr><td colspan="3">Podpis pod stroną</td></tr>
</body>
</html>
Instrukcja switch jest bardzo podobna do if lecz warunek ten może mieć więcej niż dwie wartości. Wartości w instrukcji switch muszą należeć do jednego z typów prostych (integer, string, double). Należy wprowadzić instrukcje case dla każdej wartości oraz opcjonalnie wartość domyślną default, dla której nie treba tworzyć instrukcji case.
#1
Nie wiem czemu, ale ja pobieram dane nie bezpośrednio przez zmienna np. $show tylko tak $_GET['show'] bo inaczej mi nie działa ;]
#2
Ponieważ masz wyłączoną opcje Register_Globals :) dlatego nie możesz sie odwołać bezpośrednio do $show :)
#3
Aby to działało bez włączania Register_Globals należy dodać do kodu między znaczkiem "<?" a "switch($show){" przypisanie: "$show = $_GET['show'];". Pozdro dla ekipy compzone.org... <<>> e L i k e . p l <<>>










