Smarty: Generowanie statycznych stron HTML

Autor: Grzegorz Pacan, dodano: 10-07-2004
Kategoria: Programowanie i tworzenie

Niektórzy z początkujących programistów aplikacji WWW mają problem z generowaniem statycznych plików HTML. Postanowiłem umilić im życie i opisać sposób z którego osobiście korzystam.

W chwili obecnej mało co trzeba pisać od nowa Ogólnodostępne biblioteki, klasy... wszystkie na licencjach umożliwiających wykorzystywanie ich w komercyjnych pracach. Czemu więc i tym razem nie wykorzystać by kilku sprawdzonych linijek kodu różnych projektów połączonych w jednym, wielkim kombosie? No właśnie - zaczynajmy więc!

Co będzie potrzebne?

Myślę, iż najlepiej będzie wykorzystać w miarę popularne produkty. Jako system szablonów użyję Smarty 2.6.2 (http://smarty.php.net), do obsługi bazy danych posłuży nam Active Data Object DataBase (http://php.weblogs.com/adodb) w wersji 4.11, a jeśli chodzi o operacje wykonywane na plikach, wysłużymy się klasą File 1.0 (http://www.thewebmasters.net).

Założenia

Powiem wprost: serwer MySQL to "localhost", użytkownik "root", hasła brak, baza, z którą będziemy mieli przyjemność się połączyć nosi nazwę "test", tabela, która będzie nam potrzebna nosi nazwę "test_members". Plik z szablonem nazwiemy finezyjnie... może "test.tpl"? Myślę, że to niezły pomysł... Smarty i klasa File załadowane są do "korzenia" serwisu, biblioteka ADOdb siedzi sobie w folderze "ADOdb/". W katalogu ze stroną winno znajdować się jak najmniej plików (tj. powinniśmy ograniczyć się do minimum), a wszystkie biblioteki itp. należałoby umieścić gdzieś poza nim, ale... ale nie ma to być lekcja bezpieczeństwa, tylko generowanie statycznych plików HTML - pomijamy więc wyżej wymienioną kwestię i przechodzimy do konkretów.

Kodowanie

Pierwsze co musimy zrobić, to dołączyć do naszego skryptu odpowiednie pliki...

<?php if($_SERVER['DOCUMENT_ROOT'])
{
$_root .= $_SERVER['DOCUMENT_ROOT'] . str_replace(basename($_SERVER['PATH_INFO']), "",
$_SERVER['PATH_INFO']);
}

require_once($_root . "ADOdb/adodb.inc.php");
require_once($_root . "Smarty.class.php");
require_once($_root . "File.class.php");
?>


...następnie tworzymy połączenie z bazą danych...

<?php $db = NewADOConnection("mysql"); $db->Connect("localhost", "root", "", "test") ?>


...by po chwili wyssać z niej jakieś dane.

<?php $rs = $db->Execute("select * from test_members"); if($rs === false) die("Próba wykonania zapytania zakończone niepowodzeniem."); ?>


Teraz przydałoby się je w jakiś sposób "obrobić"...

<?php

if(empty($rs->fields))
{
echo "Brak członków w bazie.";
}
else
{
$test = new Smarty;
$test->assign("forname", $rs->fields['1']);
$test->assign("lastname", $rs->fields['2']);
$test->assign("nick", $rs->fields['2']);
$test->assign("mail", $rs->fields['3']);

$cache = new File();

if(file_exists($rs->fields['2'] . ".html"))
{
unlink($rs->fields['2'] . ".html");
}
$cache->write_file($rs->fields['2'] . ".html", $test->fetch("test.tpl"));
}

$db->Close();

?>



Co robi powyższy kod? Sprawdza czy zapytanie zwróciło jakieś dane. Jeśli nie, wyświetla stosowny komunikat. W innym razie przypisuje zmiennym szablonu wartości kolejnych pól wyciągniętych z bazy przez ADOdb. Następnie sprawdza czy plik o nazwie "$nick . 'members.html'" istnieje. Jeśli tak, usuwa go, jeśli nie, podstawia pod wskazany szablon zmienne i zapisuje wynikowe dane do pliku "$nick . 'members.html'" (trochę zamotałem, ale ogółem miałem na myśli to, że wszystko działa OK ;). Na koniec połączenie z bazą danych jest zamykane.

Plik z szablonem (tj. "test.tpl") mógł wyglądać np. tak:

<html>
<head>
<title>
{nick}
</title>
<meta http-equiv="content-type" charset="text/html; charset=iso-8859-2">
</head>
<body>
<p>
<a href="mailto:{mail}>
<b>
{$forname} {$lastname}
</b>
alias
<b>
{nick}
</b>
</a>
</p>
</body>
</html>


Naturalnie winien on znajdować się w katalogu "templates/".

Zakończenie

W razie, gdyby część kodu była niezrozumiała, odsyłam do dokumentacji Smarty 2.6.2, ADOdb 4.11 i File 1.0 lub na moją domową stronę. Odnośniki poniżej. Jeśli masz ochotę na pomoc interpersonalną, zachęcam do pisania na adres e-mail, chętnie pomogę.

Odnośniki

Smarty: http://smarty.php.net
ADOdb: http://php.weblogs.com/adodb
File: http://thewebmasters.net
Domowy serwis autora: http://pacan.info

Ocena 2.54/5 (50.78%) (243 głosów)

Komentarze:



    Dodaj komentarz:


    Temat:
    Twój nick:
    Komentarz:
     

    Prosimy o kulturę wypowiedzi. Komentarze zawierające niecenzuralne zwroty, bądź obrażające inne osoby będą usuwane. Kod HTML w wypowiedziach jest niedozwolony. Wydawca nie odpowiada za treść komentarzy.