Księga gości w technologii Ajax
W tym artykule pokażemy, jak utworzyć księgę gości, w której będzie można dodać swój wpis i przeglądać inne bez uciążliwego przeładowywania strony. Wykorzystamy w tym celu zdobywającą coraz większą popularność technologię Ajax.
Niemal każdy słyszał o Ajaksie. Wykorzystywany jest on obecnie w bardzo wielu witrynach, niemniej bardzo rzadko jego zastosowanie wychodzi poza podstawowe aplikacje. Istnieje jeszcze niewiele stron, które dzięki wyeliminowaniu ciągłego przeładowywania strony zaczynają upodabniać się do aplikacji desktopowych. Pomyślmy, o ile mniej wygodne są interfejsy poczty na niektórych dużych polskich portalach niż ten, który znamy z Gmaila, gdzie wszystkie wiadomości ładują się bardzo szybko i bez ciągłego odświeżania strony.
Podobnie będzie działała nasza księga gości, w której dodawanie nowych wpisów, a także przewijanie stron z tymi już istniejącymi będzie odbywało się dzięki:
- wysłaniu ajaksowego zapytania,
- generowaniu kodu XML przez skrypt PHP,
- parsowaniu tego kodu za pomocą JavaScriptu.
Na razie brzmi to być może nieco zawile, ale nie jest zbyt trudne w realizacji, o czym będzie się można przekonać, czytając dalej nasz artykuł.
Zanim zaczniemy
Musimy pobrać kilka zewnętrznych bibliotek. O ile w prostych zastosowaniach zdecydowanie wystarczy standardowy (rozpowszechniany we wszystkich kursach) kod zaczynający się od var xmlHttp, my zastosujemy gotową bibliotekę jkl-parsexml (do pobrania stąd: http://www.kawa.net/works/js/jkl/parsexml-e.html). Dzięki niej przesłanie zapytania, a następnie analizę wynikowego kodu XML upchniemy do dosłownie kilku linijek kodu.
Zastosujemy także dzieło polskich programistów – bibliotekę Alladyn (http://alladyn.art.pl/pol/Alladyn.zip). Jest ona darmowa do zastosowań niekomercyjnych i pozwala na łatwą realizację obsługi warstw – bez martwienia się o to, jaką przeglądarkę ma użytkownik. Na koniec pobierzmy (lub też poprośmy o to naszego administratora) bardzo przydatną bibliotekę PEAR – XML_Query2XML, która posłuży do przekształcania wyników zapytań do baz danych bezpośrednio w pliki XML. Będziemy potrzebowali także bibliotek MDB2 oraz MDB2_driver_mysqli. Warto wspomnieć o tym, że skrypt będzie działał tylko pod PHP w wersji 5 lub wyższej. Jeśli na Twoim serwerze nadal pracuje starsza wersja PHP, namów administratora do upgrade'u – rozwój popularnej „czwórki” już się bowiem zakończył.
Baza danych
Przed rozpoczęciem kodowania utworzymy prostą tabelę w bazie danych MySQL. Uruchamiamy program phpMyAdmin i przechodzimy do przydzielonej bazy danych, a następnie wydajemy polecenie utworzenia nowej tabeli o nazwie kgosci z pięcioma polami, które tworzymy według poniższej tabeli oraz załączonego zrzutu ekranu.
|
Nazwa pola |
Typ |
Atrybuty |
Typ klucza |
|
Id |
smallint |
„unsigned” „auto_increment” |
podstawowy |
|
Autor |
Varchar(150) |
|
|
|
Tresc |
Mediumtext |
|
|
|
Czas |
Int |
|
|
|
|
Varchar (150) |
|
|
Tabela: Schemat tworzenia nowej tabeli w MySQL-u.
Rysunek 1: Schemat tworzenia nowej tabeli w MySQL-u.
Po dodaniu bazy danych możemy, korzystając z przycisku Dodaj, umieścić w tabeli kilka przykładowych wpisów do księgi. Warto to zrobić, gdyż zdecydowania ułatwi to później pisanie kodu i sprawdzanie jego poprawności.
Pobieranie wpisów
Zaczniemy od pliku getxml.php, który będzie pobierał odpowiednie 10 wpisów do księgi gości z bazy danych. Po pobraniu zostaną one zwrócone w postaci pliku XML.
| <?php require_once 'XML/Query2XML.php'; require_once 'XML/Query2XML/Callback.php'; require_once 'MDB2.php'; $mdb2 = MDB2::factory('mysqli://<uzytkownik>:<haslo>@<serwer>/<baza danych>'); //przykładowo: $mdb2 = MDB2::factory('mysqli://ala:kot@localhost/baza_ali'); if (PEAR::isError($mdb2)) { die($mdb2->getMessage()); } $mdb2->query("SET NAMES 'utf8'"); $res = $mdb2->query("SELECT id FROM kgosci"); $wpisow = $res->numRows(); $res->free(); if (!isset($_POST['od'])) $od = 0; else if (($wpisow-(intval($_POST['od'])))< 1 ) $od = ($wpisow-10); else $od = intval($_POST['od']); |
Listing 1. Plik getxml.php, część pierwsza.
Na początku dołączone zostają odpowiednie biblioteki ze zbioru PEAR i wykonywane jest połączenie z bazą danych – należy pamiętać o wpisaniu w odpowiednie miejsca właściwych danych użytkownika. Następnie ustawiane jest właściwe kodowanie danych przesyłanych przez MySQL, a do zmiennej $wpisow pobierana jest liczba wszystkich wpisów w tabeli – przyda się nam to do ustalenia, od jakiego identyfikatora (id) pobrane zostaną wpisy, a także do wygenerowania odpowiednich linków, za pomocą których użytkownik będzie mógł przeglądać starsze wpisy.
Kolejny blok kodu (duża instrukcja warunkowa) określa, które dziesięć wpisów zostanie pobrane. Jest to uzależnione od parametru od – w wypadku jego braku wyświetlane jest dziesięć pierwszych. Gdyby jego wartość była natomiast taka, że nie zostałby wyświetlony żaden wpis, zmienna $od zostanie tak skorygowana, aby wyświetlić dziesięć ostatnich. W przeciwnym razie (czyli gdy wszystko jest w porządku) wyświetlone zostają dokładnie te wpisy, które zostały wskazane przez parametr od.
Druga część kodu odpowiedzialna jest za pobranie z bazy odpowiednich wpisów i wygenerowanie zbioru XML.
| function konwertuj ($rekord) { return date("d.m.y @ G:H",$rekord[czas]); } $query2xml = XML_Query2XML::factory($mdb2); $dom = $query2xml->getXML( false, array( 'encoder' => false, 'rootTag' => 'ksiega_gosci', 'idColumn' => false, 'rowTag' => 'dane', 'elements' => array( 'ilosc_wpisow'=>':'.$wpisow, 'wpisy'=>array( 'sql' => "SELECT * FROM kgosci ORDER BY id DESC LIMIT ".$od." , 10", 'rootTag' => 'wpisy', 'rowTag' => 'wpis', 'idColumn' => 'id', 'elements' => array( 'id', 'autor', 'tresc', 'czas' => "#konwertuj()", 'email' ) ), ) ) ); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Cache-Control: no-cache"); header("Pragma: no-cache"); header('Content-Type: application/xml'); $dom->formatOutput = true; echo $dom->saveXML(); $mdb2->disconnect(); ?> |
Listing 2. Plik getxml.php, część druga.
Na początku deklarujemy krótką funkcję konwertuj(), która zamieni pobrany z bazy danych czas w formacie timestamp na format przyjazny i czytelny dla człowieka. W następnej kolejności zostaje utworzony obiekt klasy Query2XML, któremu jako argument podajemy ogromną tabelę, określającą to, jak ma wyglądać wynikowy plik XML. O wszystkich możliwościach tej tabeli można by napisać całkiem duży artykuł, dlatego też teraz wytłumaczę tylko kilka absolutnych podstaw.
Komenda rootTag to klucz główny, obejmujący wszystkie dane – u nas nazywa się on ksiega_gosci. Zawiera dwa elementy (tablica elements): liczbę wszystkich wpisów w księdze wyrażoną jako dane statyczne (niepochodzące z bazy danych i oznaczane dwukropkiem) oraz kolejny rootTag, zawierający wiersze (rowTagi) z wpisami do księgi. Wierszy będzie tyle, ile zostanie zwróconych rekordów po wykonaniu zapytania SQL. Każdy wiersz (rowTag) będzie natomiast zawierał takie elementy, jak m.in. id czy autor. Pole czas, przed przekazaniem do wynikowego zbioru XML, zostanie przesłane do funkcji konwertuj (oznacza się to znakiem #).
Uważnego Czytelnika zdziwi zapewne to, że funkcję konwertuj deklarowaliśmy za pomocą parametru, wywołujemy ją natomiast bez niego. Otóż wywołując dowolną funkcję z poziomu listy elementów (jak w wierszu: 'czas' => "#konwertuj()"), jako pierwszy parametr przekazywany jest automatycznie cały węzeł XML (u nas: jeden wpis do księgi) w postaci tablicy asocjacyjnej.
Pozostaje już tylko ustawienie odpowiednich nagłówków, które zapobiegną cache'owaniu pliku XML przez przeglądarki, oraz ustalenie parametru Content-Type. Włączamy formatowanie i wyświetlamy wynikowy XML. Efekt działania jest następujący:

Rysunek 2: Schemat Wygenerowany plik XML.
«poprzednia 1 2 3 następna »
Polecamy
Reklama
Komentarze
Aby dodać komentarz, musisz podać swój nick, treść komentarza oraz poprawnie przepisać oba słowa z obrazka
(słowa muszą być rozdzielone spacją).
W treści komentarza można używać języka formatowania BBcode.
Popularne
Firefox 10 już jest. Wiele atrakcji dla programistów, użytkownicy raczej nic nie zauważą
9
Źle się dzieje z Chrome, ze stabilnością coraz gorzej. Gdzie się podziała słynna izolacja procesów?
26
MSWiA zamówiło narzędzia do „złamania” Tora i podsłuchiwania internautów. Czy złamało przy tym prawo?
89
Pobieraczek.pl pozwie internautów, którzy nie chcą płacić abonamentu
1455
Debata w sprawie ACTA: internauci spodziewali się chyba czegoś innego
13
Nowa polityka prywatności Google'a już za miesiąc wejdzie w życie. Mamy się czego bać?
16
PHP 5.3.9 nie pozwoli hakerom zawiesić serwera. Pozwoli za to przejąć nad nim kontrolę
28
MSWiA zamówiło narzędzia do „złamania” Tora i podsłuchiwania internautów. Czy złamało przy tym prawo?
89
[Aktualizacja] Facebook zablokował Demotywatory.pl. W czym zawiniły?
36
FBI zamknęło Megaupload. Anonimowi dali się sprowokować. Teraz ich akcja uzasadni potrzebę SOPA?
17
Pobieraczek.pl pozwie internautów, którzy nie chcą płacić abonamentu
1455
Programowanie w środowisku Android – wprowadzenie do projektowania aplikacji dla urządzeń mobilnych
15
Rząd Tuska zablokował dostęp do tańszych leków z internetowych aptek
61
„Donald matole, twój rząd dopadną kibole” – hakerska elita przyłącza się do walki z ACTA
23
Społeczność
WebDev Z tego wynika, że zmienią się tylko serwery z którymi przeglądarka łączy...
agilob Ale folder bez nazwy się da założyć :P
zetesha Apple nie zrezygnował z PPC całkiem ponieważ posiada P.A. Semi, która to...
pablo1919191 Thunderbolt to jest technolgia intela wiec skora appel wpakowal jako...
BartekBb Już wiem skąd kopiujecie artykuły, bo zrobiliście ten sam błąd co na...
Marr moglibyście się zdecydować. W newsach podajecie, że systemy wymiany (czyli...
setXYZ I jeszcze warto poczytać co o tym myśli sam MS http://webhosting.pl/Koniec...
- gardius: Dobra hurtownia sportowa (1)
- gardius: Tanie książki gdzie warto kupować? (1)
- Najdmen.pl: PROMOCJA, 500 DOMEN .EU ZA 1 PLN NETTO ! (1)
- VMLine: [Oferta] Serwery VPS Xen-HVM/OpenVZ z darmową administracją (2)
- Marek: Generowanie PDFa (2)
- Marek: problem z menu (2)
- Marek: Własne checkboxy w HTML,CSS (1)
Polecane książki
Praca
Czytaj Webhosting
Chcesz być na bieżąco z naszymi informacjami? Zapisz się na Newsletter.
Zarejestruj domenę
Sprawdź dostępność swojej domeny:
| .pl: | 0 zł | .com: | 19.90 zł | |
|---|---|---|---|---|
| .com.pl: | 0 zł | .eu: | 19.90 zł |









#1 ziemowit 2008-09-17 21:16:56 0
None
#2 Deancraft 2008-09-18 08:36:11 0
None
#3 dAREuS® 2008-09-18 09:27:25 0
None
#4 ziemowit 2008-09-18 15:34:50 0
None
#5 starr 2008-09-18 22:39:46 0
None
#6 Kartofelek 2008-10-31 08:02:20 0
None
#7 tworzenie stron www Piła 2011-03-07 10:57:59 0
IP: 62.21.51.[...] Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15