Includowanie plików Drukuj
Ocena użytkowników: / 0
SłabyŚwietny 
Wpisany przez Patryk yarpo Jar   
sobota, 26 września 2009 12:31

Tworząc strony w statyczym HTMLu często ma się - słuszne - wrażenie déjà vu. Ciągle powtarza się ten sam kod. Góra i dół identyczne, zmienia się tylko zawartość jednego pojemnika... W razie zmiany owej "góry" lub "dołu" trzeba zmieniać n-plików, co jest nużące. Cnotą programisty jest lenistwo! Dlatego najpierw wymyślono ramki. Jednak ramki nie są dobrym rozwiązaniem [dlaczego nie, to jest temat na długi artykuł].

Zaproponuję więc coś innego - includowanie. Potrzebujesz serwera z obsługą PHP.
Załóżmy, że tak wygląda na sza strona główna:

<html>
<head>
  <meta http-equiv="Content-type" content="application/xhtml+xml; charset=utf-8" />
  <title>Includowanie jest fajne</title>
</head>
<body>
  <p>Tu jest góra strony (logo, menu itp.)</p>
  <p>Tu się wiecznie zmienia, każda strona ma inną treść</p>
  <p>Tu stała stopka</p>
</body>
</html>


Przy takim ułożeniu treści na stronie, aż prosi się, aby można było wczytywać “na stronę” `index.php' jedynie środkową część, a resztę pozostawiać bez zmian. W tym przypadku zastosuję PHP. Normalnie mielibyśmy menu wyglądające w taki sposób:

<ul>
  <li><a href="/index.php">home</a></li>
  <li><a href="/o_mnie.php">o mnie</a></li>
  <li><a href="/kontakt.php">konakt</a></li>
</ul>


I teraz moglibyśmy zrobić dwa pliki txt, 'gora.txt' oraz 'dol.txt' i wczytywać je w taki oto sposób na każdej ze stron [przykładowy kod strony 'o_mnie.php']:

<?PHP
  include('strony/gora.txt');
?>
<p>Tutaj jest dużo treści o tobie, grafiki, itp.</p>
<?PHP
  include('strony/dol.txt');
?>


Jak widać plik ten jest już dużo bardziej czytelny. Dzięki zastosowaniu takiej “sztuczki” będzie także dużo łatwiej edytować wygląd strony. Gdyż tu wyświetlamy jedynie gotowy tekst, grafiki, tabelki. Jednak ich wygląd opisujemy gdzie indziej [w pliku CSS – w kodzie strony nie powinno opisywać się formatu(wyglądu), a jedynie strukturę(rozmieszczenie)].

Niestety to nadal nie jest rozwiązanie optymalne... Czemu? Ano temu, że musisz mieć co najmniej n+3 plików [n – liczba stron + 3 pliki: 'index.php', 'gora.txt' i 'dol.txt'].

Postarajmy się więc to jakoś poprawić. Wykorzystamy możliwość przesyłania zmiennych GET. Tak będzie wyglądało przykładowe menu:

<ul>
  <li><a href="/component/content/?strona=home">home</a></li>
  <li><a href="/component/content/?strona=o_mnie">o mnie</a></li>
  <li><a href="/component/content/?strona=kontakt">konakt</a></li>
</ul>


Jak widzisz każdy link odwołuje się do tej samej strony. Jest nią 'index.php'. Jednak dodatkowo przesyłamy parametr [czyli to po '?']. Teraz należy zmodyfikować plik index.php:

<?PHP
  include('strony/gora.txt');
 
  @$strona=$_GET['strona'];                 // 1
  
  if (file_exists('strony/'.$strona.'.txt'))
    include('strony/'.$strona.'.txt');     // 2
  else  
    include('strony/home.txt');             // 3
 
  include('strony/dol.txt');
?>


Powyższy kod już w żaden sposób nie przypomina dobrze znanego i powszechnie rozumianego HTMLa :). Oczywiście w tym momencie includowanie 'gora/dol.txt' wydaje się niekonieczne. Można zawartość tych plików zwyczajne\ie wkleić tu, jako zwykły kod HTML. Jednak dzięki temu, że nie wklejałem tego tu, kod jest przejrzystszy. Dzięki takiemu czemuś uzyskujemy możliwość wczytywania nieskończenie wielu różnych stron, nadal posiadając tylko 1 plik *.php!

Opis:

  • Pobierz zmienną z adresu [parametr]
  • Jeśli istnieje w folderze 'strony' [przykładowy folder z plikami txt, w których przechowuje się zawartość stron] plik o nazwie podanej jako parametr, to wczytaj ten plik
  • W przeciwnym razie wczytaj plik strony pierwszej.


Powyżej podana metoda ma jeden plus (oczywiście jeśli zadbamy odpowiednio o bezpieczeństwo) – można załączać w ten sposób pliki PHP i w nich wykonywać skrypty. Po prostu zamiast:

include('strony/'.$strona.'.txt');


Wpisujemy:

include('strony/'.$strona.'.php');


Powtarzam jednak, że należy zwrócić uwagę na względy bezpieczeństwa, o których nie będę pisał w tej poradzie [i tak jest już długa :)]. O ile na stronie domowej nie trzeba się tym tak przejmować, to gdy robisz stronę komercyjnie poszukaj trochę informacji na ten temat.