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 (), do obsługi bazy danych posłuży nam Active Data Object DataBase () w wersji 4.11, a jeśli chodzi o operacje wykonywane na plikach, wysłużymy się klasą File 1.0 ().
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”); |
…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)) $cache = new File(); if(file_exists($rs->fields[’2′] . „.html”)) $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 , chętnie pomogę.
Odnośniki
Smarty:
ADOdb:
File:
Domowy serwis autora:
