2007.03_Eclipse Programowanie_[Eclipse].pdf

(1332 KB) Pobierz
440331312 UNPDF
Dla początkujących
Eclipse
Programowanie
Kto z nas nie rozpoczynał debugowania swojego kodu za pomocą funkcji
echo? Po zatwierdzeniu takiej funkcji, trzeba jeszcze spędzić trochę czasu
na usuwaniu odwoływań do funkcji, które stały się przestarzałe. Okazuje się
wtedy, że praktycznym wyjściem jest kodowanie i debugowanie w środowisku
programistycznym.
Co obiecujemy...
• W jaki sposób integrować, konfigurować i uży-
wać środowiska programistycznego Eclipse
w Windows, jego modułu PHPEclipse i stosu
XAMPP.
• W jaki sposób uzyskać aplikację wielojęzyczną
i wielo-aspektową.
Co należy wiedzieć...
• Powinieneś znać podstawy języka PHP i orien-
tować się ogólnie w temacie środowisk progra-
mistycznych.
ka platform jednocześnie na jednym kompute-
rze, co umożliwia na przykład deweloperowi ła-
twe przechodzenie z PHP4 na PHP5. XAMPP
integruje także bazy danych i aplikacje przykła-
dowe, umożliwiające początkującym zapoznanie
się z tym typem platformy. Wybrałem tę platfor-
mę WWW z jednej strony ze względu na jej prze-
nośność i łatwość stosowania, a z drugiej strony,
gdyż jest znana ze swojego modułu PHPEclipse,
umożliwiającego wspólne działanie XAMPP i Ec-
lipse. Proszę zwrócić uwagę na fakt, że w XAMPP,
większość ochron nie włącza się domyślnie, gdyż
ta platforma jest głównie przeznaczona dla po-
trzeb programowania, a nie produkcji (przynajm-
niej w swej wcześniejszej konfiguracji). Dowodem
na to jest fakt, że domyślnie konto root w MySQL
nie ma hasła!
Poziom trudności
dows lub wersji Beta systemu Solaris i MAC OS
X. Aby XAMPP działał, wystarczy skopiować da-
ne z pakietu. Nie ma plików do edytowania! Inną
zaletą jest jego przenośność. W Windows XAMPP
nie zapisuje klucza w bazie rejestrującej (nie doty-
czy to wersji z instalacją). Można więc go rozpako-
wać na jakimkolwiek dysku twardym lub pamię-
ci USB. Można też go łatwo przenieść przy mini-
malnej konfiguracji. Instalacja nie jest potrzebna,
więc większość narzędzi działa prawie tylko ze
ścieżkami względnymi. Można zainstalować kil-
U żywanie środowiska programistyczne-
go ma, poza debugowaniem, inne za-
lety, na przykład kolorowanie składni,
podpowiadanie kodu, itp. W tym artykule, pro-
ponuję Ci zrobić pierwsze kroki w Eclipse. Wraz
ze stosem XAMPP przygotujesz kompletny pa-
kiet składający się z serwera i środowiska progra-
mistycznego. Główną zaletą proponowanej plat-
formy jest jej koszt, gdyż większość narzędzi jest
bezpłatnych. Drugą ważną zaletą jest fakt, że ta
platforma nie wymaga instalacji, a jedynie skopio-
wania plików na twardy dysk. Można więc ją sko-
piować do pamięci USB, co umożliwia dewelope-
rowi dysponowanie środowiskiem przez cały czas.
Aby zilustrować ten temat, proponuje ci oprzeć
się na programie używającym bazy przykłado-
wych danych XAMPP jak również silnika szablo-
nów Smarty. Program ten będzie przedstawiony
szczegółowo w drugiej części tego artykułu.
Eclipse
Stworzony przez IBM w 2001r., który zaofero-
wał swój pierwszy kod, projekt Eclipse wciąż ro-
Stos XAMPP
XAMPP jest kompletną platformą WWW prze-
znaczoną całkowicie do programowania. Pakiet
ten zawiera między innymi: Apache, MySQL,
PHP 4.3.X i 5.0.X, Perl, PEAR itp. Jest dostępny
w wersji kompletnej i w mniejszej wersji bez nie-
których narzędzi. XAMPP jest dostępny dla róż-
nych systemów operacyjnych, np. Linux, Win-
Rysunek 1. Włączenie DLL debugowania w PHP
14
3/2007
440331312.018.png
 
440331312.019.png 440331312.020.png 440331312.001.png 440331312.002.png 440331312.003.png 440331312.004.png 440331312.005.png 440331312.006.png 440331312.007.png
Eclipse
śnie dzięki partnerstwu i modularności. Napisany
w Javie za pomocą graficznej biblioteki SWT fir-
my IBM, Eclipse stał się projektem open-source . Ce-
lem Eclipse było na samym początku dostarczenie
podstawy napisanej w Javie, umożliwiającej stwo-
rzenie środowisk programistycznych wokół tej
podstawy. Jego główna zaletą jest jego rozszerzal-
ność, czyli możliwość dorzucenia do tej podsta-
wy pewnej ilości modułów (napisanych w więk-
szości również w Javie), umożliwiających wyjście
naprzeciw potrzeb użytkowników. Można w ten
sposób programować prawie w jakimkolwiek ję-
zyku. Jest wszechstronny i wychodzi naprzeciw
różnorodnym potrzebom w różnych domenach.
Znajdziesz tu na przykład moduły przeznaczo-
ne dla deweloperów (C, C++, PHP etc.), moduły
do modelowania (UML itp.), biblioteki graficzne
itp. Eclipse był zaakceptowany przez większość
deweloperów i firm, które programowały rów-
nież moduły i uczestniczą, zwłaszcza finansowo,
w rozwoju Eclipse. Wymieńmy jeszcze kilku stra-
tegicznych deweloperów Eclipse jak Sybase, Com-
puter Associates, Borland, Scapa i Zend, który pi-
lotuje projekt modułu PHP i, który zamierza na-
wet przenieść swoje środowisko programistyczne
Zend Studio na Eclipse. Istnieją różne typy aplika-
cji, komercyjnych i nie, w Eclipse. Znajdziesz apli-
kacje WWW geograficzne, ochrony, kontroli, apli-
kacje w dziedzinie chemii, medycyny, energii nu-
klearnej czy też aeronautyki.
• DLL debugowania DBG dla Twojej wersji
PHP (wersja XAMPP) dla wersji v5.1.2.
Path , która jest następująca c:/xampp/apache/
bin/php.ini ,
• ścieżkę katalogu rozszerzeń PHP odpowia-
dającego zmiennej extension _ dir , która
jest następująca c:/xampp/php/ext/ .
Wybór wersji
Niektórzy z was zadają sobie pewnie to pyta-
nie: dlaczego platforma nie opiera się na ostat-
nich wersjach PHP, Eclipse, itp. Jest to rozmyśl-
ny wybór z mojej strony dla następujących po-
wodów: jeśli chodzi o wersję PHP, DLL debugo-
wania są bezpłatne tylko do wersji v5.1.2 PHP,
wybrałem więc wersję XAMPP zawierającą
PHP v5.1.2 i XAMPP Lite v1.5.2. Jeśli chodzi o
Eclipse, aktualna wersja SDK to v3.2.1, ale moduł
PHPEclipse w swojej wersji v1.1.8 nie jest dobrze
odbierany przez tę wersję Eclipse (wersja v1.1.9
de PHPEclipse jest właśnie rozwijana). Wybrałem
więc wersję Eclipse kompatybilną z ostatnią stabil-
ną wersją modułu PHPEclipse.
Rozpakuj pakiet DLL DBG . Każda nazwa pliku
DLL zawiera wersję PHP, która odpowiada DLL .
W naszym przypadku chodzi więc o DLL z na-
zwą php_dbg.dll-5.1.2 . Zmień nazwę php_dbg.dll
i umieść w katalogu rozszerzeń PHP c:/xampp/
php/ext/ . Edytuj teraz plik c:/xampp/apache/bin/
php.ini , w którym zaznaczysz na końcu pliku
opcje konfiguracyjne DLL debugowania:
extension=php_dbg.dll
[debugger]
debugger.enabled = true
debugger.proiler_enabled = true
debugger.JIT_host = clienthost
debugger.JIT_port = 7869
Instalacja i konfiguracja
W tym rozdziale zobaczysz, jak instalować i
konfigurować zaproponowaną platformę pro-
gramistyczną. Najpierw zobaczysz, jak zainsta-
lować stos XAMPP, a następnie platformę Ec-
lipse z modułem PHPEclipse. Po zakończeniu
tych instalacji przejdziemy do używania plat-
formy z programem demo znajdującym się na
płycie CD załączonej do tego numeru.
Zmień również następujące opcje:
implicit_lush = On
Zmienna implicit _ lush musi obowiązkowo
przejść do Of , gdyż inaczej wydajność syste-
mu znacznie się zmniejszy. Wyłącz moduł Eac-
celerator jeśli jest zainstalowany i włączony:
XAMPP
Po ściągnięciu XAMPP, odpakuj pakiet w c:
/xampp . Uruchom plik setup_xampp.bat , któ-
ry skonfiguruje różne wewnętrzne ścieżki do
XAMPP dla twojego katalogu instalacyjnego. Uru-
chom teraz xampp-control.exe oraz serwery Apache
i MySQL. Uwaga: zapora sieciowa Windows XP
może blokować domyślnie serwer Apache dla ce-
lów bezpieczeństwa! Przez przeglądarkę Interne-
tową idź więc na stronę http://localhost lub http:
//127.0.0.1 . Po wybraniu języka, wybierz wyświe-
tlenie informacji związanych z platformą WWW:
w tym celu wybierz phpinfo() i zapisz następu-
jące ścieżki:
Wymagania programowe
Oto lista potrzebnych narzędzi, aby przygoto-
wać zaproponowaną platformę:
eaccelerator.enable="0"
Zmień moduł Zend Extension Manager je-
śli jest zainstalowany i włączony za pomocą
zmiennej zend _ extension _ ts , która będzie
wskazywać na bezwzględna ścieżkę DLL:
• XAMPP Lite wersja v1.5.2, która będzie
twoją lokalną platformą WWW,
• Eclipse SDK wersja v3.1.2, która będzie
twoim osadzonym środowiskiem progra-
mistycznym,
• Eclipse wymaga środowiska wykonawcze-
go Java, będziesz więc potrzebować Java
Runtime Environment,
• moduł PHPEclipse wersja v1.1.8, która
umożliwia używanie Eclipse, jako środo-
wiska programistycznego PHP,
zend_extension_ts =
"c:/xampp/php/ext/php_dbg.dll"
Po wykonaniu tych zmian, zresetuj serwer
Apache za pomocą xampp-control.exe . Jeśli od-
mówi zresetowania, oznacza to, że poprzed-
nie wskazówki były źle przestrzegane. Po-
twierdź dodanie modułu debugowania do
• ścieżkę pliku inicjalizującego PHP odpowia-
dającego Coniguration File (php.ini)
Tabela 1. Ścieżki, które warto poznać w XAMPP
Ścieżki
Zawartość
./xampp/apache/bin/
Zawiera pliki wykonawcze związane z Apache i w naszym przypadku, plik php.ini.
./xampp/apache/conf/
Zawiera plik konfiguracyjny Apache httpd.conf jak również inne przykłady konfiguracji w podkatalogu extra.
./xampp/htdocs/
Jest to korzeń serwera WWW (Document Root). W tym katalogu należy umieścić aplikacje chyba, że są one obiek-
tem alias w Apache w ten sam sposób jak przestrzeń pracy w Eclipse.
./xampp/htdocs/xampp/
Zawiera kody aplikacji przykładowych dostarczonych z pakietem.
./xampp/mysql/bin/
Zawiera pliki wykonawcze związane z MySQL w tym program użytkowy kopii bezpieczeństwa mysqldump.
./xampp/mysql/data/
Zawiera pliki bazy danych MySQL.
./xampp/php/
Zawiera pliki wykonawcze związane z PHP.
./xampp/php/ext/
Zawiera rozszerzenia związane z PHP. Ten katalog będzie użyty dla DLL debugowania.
./xampp/phpmyadmin/
Aplikacja WWW administracyjna MySQL.
./xampp/tmp/
Katalog przechowywania danych sesji kiedy są używane.
www.phpsolmag.org
15
 
440331312.008.png 440331312.009.png 440331312.010.png 440331312.011.png 440331312.012.png 440331312.013.png
Dla początkujących
PHP. W tym celu wybierz ponownie funkcję
phpinfo() w XAMPP. Moduł debugowania
powinien się wtedy wyświetlić, jak to przed-
stawia Rysunek 1 (część DBG ).
Konfiguracja XAMPP jest więc zakończo-
na. Zachęcam was do przyjrzenia się później
szczegółowo stosowi Apache-PHP-MySQL-Pear
(AMPP). Tabela 1 przedstawia ścieżki, które
warto poznać w XAMPP.
Eclipse
Zanim przejdziemy do konfiguracji Eclipse, nale-
ży zainstalować Java Runtime Environment . Po wy-
konaniu tej instalacji, rozpakuj archiwa Eclipse do
katalogu c:/xampp/eclipse . Rozpakuj również za-
wartość modułu PHPEclipse. Znajdziesz tam dwa
foldery features i plugins , które umieść w katalogu
Eclipse, to znaczy c:/xampp/eclipse . Uruchom eclip-
se.exe z tego katalogu. Eclipse prosi o zdefiniowa-
nie katalogu roboczego. Wpisz ścieżkę względną
./workspace . Twoim katalogiem roboczym jest od
tej pory c:/xampp/eclipse/workspace . W tym katalo-
gu będziesz umieszczać swoje projekty. Przy uru-
chomieniu Eclipse można nie wyświetlać okienka
dialogowego umożliwiającego wybór przestrzeni
pracy zaznaczając Use this as the default and do not
ask again . Aby ponownie włączyć okienko dialo-
gowe, należy przejść do Window >Preferences > Ge-
neral >Startup and Shutdown i zaznaczyć Prompt
for workspace on startup .
Teraz stworzymy alias w Apache do kata-
logu roboczego Eclipse. Edytuj plik c:/xampp/
apache/conf/httpd.conf . Na końcu pliku wpisz
kod przedstawiony na Listingu 1.
Po wykonaniu tego etapu zresetuj ponownie
serwer Apache, aby uwzględnić alias. W Eclipse
wykonaj Window > Preferences > PHPEclipse Web
Development > Project Defaults aby zapisać infor-
macje o aliasie. Wpisz Localhost : http://localhost/
eclipse . Dział Document Root odpowiada działo-
wi twojego katalogowi pracy. Parametr ten bę-
dzie stosowany do wszystkich projektów. Aby
zastosować inną konfigurację w projekcie, nale-
ży zmienić własności odpowiedniego projektu.
Niektórzy deweloperzy używają innego katalo-
gu niż zaproponowany, aby przechowywać swo-
je pliki i aplikacje. Na przykład, deweloper, któ-
ry używa XAMPP od dłuższego czasu. Jest moż-
liwe, że jego Document Root to c:/xampp/htdocs/ i że
chciałby on zachować ten katalog. Wystarczy w ta-
kim przypadku dostosować poprzednią opcję Do-
cument Root w Eclipse i stworzyć ewentualnie od-
powiedni alias. Można także stworzyć kilka prze-
strzeni pracy (przyporządkowane do kilku alias) i
można w każdej chwili wybrać jedną z nich za po-
mocą File > Switch Workspace ... Można wtedy wy-
brać istniejącą przestrzeń pracy lub stworzyć no-
wą. Sprawdź teraz czy moduł PHPEclipse został
właściwie zainstalowany w Eclipse za pomocą
Help > Software Updates > Manage configuration .
Przeglądając strukturę drzewiastą, powinieneś zo-
baczyć Disable dla modułu PHPEclipse, co ozna-
cza, że Eclipse uwzględnił go i, że jest włączony.
Jak już to wyjaśniliśmy wcześniej, Eclipse
może współpracować z XAMPP. Będziesz miał
możliwość sprawdzenia tego już teraz. Wyko-
naj w Eclipse Window > Preferences > PHPEc-
lipse Web Development > PHP External Tools >
XAMPP . Znajdziesz ścieżki domyślne modułu
PHPEclipse do XAMPP. Ścieżki te odpowiada-
ją twojej instalacji.
Listing 1. Dodanie aliasu w Apache do przestrzeni pracy Eclipse
Alias /eclipse "C:/xampp/eclipse/workspace"
< Directory "C:/xampp/eclipse/workspace" >
DirectoryIndex index.php
AllowOverride All
Order allow,deny
Allow from all
< /Directory >
Listing 2. Plik config.inc.php
### ZMIENNE UZYTKOWNIKA ###
# Domyślny szablon
$defaultTemplate = "template1" ;
# Domyślny język
$defaultLanguage = "fr" ;
# Połączenie z bazą danych
# Zmienne nie znajdujące się w sesji dla bezpieczeństwa
$dbServer = "localhost" ;
$dbUsername = "root" ;
$dbPassword = "" ;
$db = "cdcol" ;
### KONIEC ZMIENNYCH UZYTKOWNIKA ###
# Korzeń aplikacji
deine ( 'APP_ROOT_PATH' , "./" ) ;
# Deinicja ścieżek szukania plików
$paths = array ( INI_PATH = > get_include_path () ,
LANGUAGE = > APP_ROOT_PATH . "translations/" ,
SMARTY = > APP_ROOT_PATH . "smarty/" ,
TEMPLATES = > APP_ROOT_PATH . "templates/" ,
TEMPLATES_C = > APP_ROOT_PATH . "smarty/templates_c/"
) ;
set_include_path ( implode ( PATH_SEPARATOR , $paths )) ;
# Uwzględnienie zmiennych użytkownika w sesji
$_SESSION [ 'defaultLanguage' ] = $defaultLanguage ;
$_SESSION [ 'defaultTemplate' ] = $defaultTemplate ;
$_SESSION [ 'paths' ] = $paths ;
# dodatki
require_once ( 'Smarty.class.php' ) ;
require_once ( 'functions.php' ) ;
require_once ( 'db.class.php' ) ;
Listing 3. Plik pl.lang.php
# Zmienne tłumaczenia na polski
$language [ 'encoding' ] = "ISO-8859-15" ;
$language [ 'pageTitle' ] = "Lista płyt CD" ;
$language [ 'id' ] = "Identyikator" ;
$language [ 'year' ] = "Rok" ;
$language [ 'interpret' ] = "Artysta" ;
$language [ 'title' ] = "Tytuł" ;
$language [ 'templateLabel' ] = "Aspekt" ;
$language [ 'languageLabel' ] = "Język" ;
$language [ 'noResults' ] = "Nie ma rezultatów" ;
Trochę praktyki!
Przedstawmy teraz program, który zanalizuje-
my aby obserwować użycie Eclipse i jego debu-
gera. Celem naszego programu jest wyświetlenie
zawartości tablicy bazy danych za pomocą sil-
nika szablonów Smarty . Użyta baza danych jest
jedną z przykładowych baz z XAMPP i zawiera
charakterystyczne zapisy płyt CD, tzn. identy-
fikator,imię artysty, nazwa albumu i rok. Użyt-
kownik będzie również mógł wybrać język tłu-
maczenia (polski lub angielski), aby zilustrować
16
3/2007
440331312.014.png
Dla początkujących
sposób uzyskania aplikacji wielojęzykowej. Użyt-
kownik będzie również mógł wybrać dwa aspek-
ty graficzne, aby zilustrować sposób ustawiania
różnych tematów graficznych w jednej aplikacji.
Całość opiera się na używaniu sesji w PHP. Płyta
CD dołączona do numery zawiera ten program.
Hierarchia projektu jest następująca:
• folder templates zawiera różne szablony
w formacie HTML/Smarty, jak również
przyporządkowane arkusze stylów CSS,
• oraz, w korzeniu foldera aplikacja , znajdu-
je się plik konfiguracyjny config.inc.php , plik
db.class.php , który jest bardzo prosta klasą
umożliwiającą przedstawienie uwzględnie-
nia klas w Eclipse, plik functions.php , który
jest biblioteką funkcji użytecznych w apli-
kacji i plik index.php, który jest punktem
wejściowym aplikacji.
połączenia z bazą danych. Tabela $paths umoż-
liwia odzyskanie domyślnych ścieżek poszukiwa-
nia PHP i dodanie tam ścieżek do różnych kata-
logów aplikacji. Taka czynność umożliwia, przy
wywołaniu funkcji require_once() , nieprecy-
zowanie ścieżek katalogów z plikami mającymi
być dołączone. Duża część zmiennych znajdu-
je się w sesji poza parametrami połączenia do ba-
zy danych z powodów związanych z bezpieczeń-
stwem. Różne dodatki niezbędne dla uruchomie-
nia programy są następnie wykonane, Umożli-
wia to zmniejszyć kod, gdyż wystarczy później
dodać do stron plik konfiguracyjny, aby dyspono-
wać wszystkimi plikami, które należy dodać i bez
precyzowania ścieżki poszukiwania. Zanalizujmy
teraz dwa pliki tłumaczenia, których zawartość
znajduje się na Listingach 3. i 4. Przypomnijmy,
że ta aplikacja jest dwujęzyczna dla polskiego i an-
gielskiego. Jasne jest, że jak tylko zmienna znajdzie
się w pliku tłumaczenia, musi być ona przetłuma-
czona na wszystkich plikach językowych aplika-
cji. Każdy plik tłumaczenia kieruje tabelą nazwa-
$language . Za każdym razem jak strona apli-
kacji jest ładowana, tabela $language przyporząd-
kowana do wybranego języka jest ładowana w se-
sji. Używanie zmiennych sesji do kierowania ję-
zykami nie jest potrzebne w tej aplikacji. W więk-
szej aplikacji może to być interesującą zaletą, jeśli
chodzi o skuteczność! Wyobraź sobie, że przy każ-
dym ładowaniu strony, masz w pamięci (więc w
sesji) język użyty poprzednio. Jeśli przy zmianie
strony język nie został zmieniony, nie ma potrze-
by ładowania wszystkich etykiet. Uwaga: jeśli ist-
nieje tysiące etykiet do ładowania dla jednej apli-
kacji, użycie sesji nie będzie wtedy być może zale-
cane, jeśli fizyczny serwer nie ma dobrej wydajno-
ści. Aby dorzucić nowy wiersz do aplikacji, wystar-
czy dorzucić obraz flagi w katalogu ./translations/
flags i nazwać plik językowy w ten sam sposób
jak plik obrazkowy w katalogu ./translations . Wy-
obraź sobie, że chcesz dorzucić francuskie tłu-
maczenie do tej aplikacji. Będziesz miał z jed-
nej obrazek flagi francuskiej fr.png w katalogu ./
translations/flags, a z drugiej strony plik tłumacze-
nia fr.lang.php w folderze ./translations . Funkcja
DisplayLanguagesList() biblioteki przeszuka
katalog ./translations/flags i sprawdzi czy dla każ-
dego pliku obrazka znalezionego istnieje plik języ-
kowy w katalogu ./translations . Dla plików istnieją-
cych, funkcja ta generuje ciąg HTML wyświetlają-
cy flagę każdego języka. Każda flaga jest hipertek-
stem do strony PHP, która właśnie się uruchamia
( $_SERVER['PHP_SELF'] ) wzbogacona zmienną
odpowiadającą językowi, który użytkownik chce
przetłumaczyć. Daje to na przykład taki wynik:
http://localhost/myApp/page_xx.php?language=pl .
Zanalizujmy teraz plik db.class.php , którego kod
jest przedstawiony na Listingu 5.
Plik ten przedstawiony jest w formie bardzo
prostej klasy, umożliwiającej połączenie i zada-
nie pytania bazie danych. Zwróćcie uwagę, że w
naszej aplikacji taka klasa nie jest zbytnio ciekawa.
W większej aplikacji można by było stworzyć kla-
sę abstrakcyjną niezależną od SGBD, która by by-
• folder Smarty (wersja v2.6.14) zawiera
wszystkie klasy silnika szablonów jak rów-
nież folder templates_c, który będzie za-
wierał pliki skompilowane przez Smarty,
• folder translations zawiera pliki tłumaczeń
w formacie xx.lang.php gdzie xx jest skró-
tem języka kraju,
• podfolder flags zawiera piktogramy flag
krajów,
Na początek zanalizujemy plik config.inc.php , któ-
rego zawartość znajduje się na Listingu 2. W tym
pliku są najpierw zdefiniowane zmienne, umoż-
liwiające zindywidualizowanie aplikacji domyśl-
nie z różnymi wartościami jak te z parametrami
Listing 4. Plik uk.lang.php
# Zmienne tłumaczenia na angielski
$language [ 'encoding' ] = "CP1252" ;
$language [ 'pageTitle' ] = "Compact Discs List" ;
$language [ 'id' ] = "Identiiant" ;
$language [ 'year' ] = "Year" ;
$language [ 'interpret' ] = "Interpret" ;
$language [ 'title' ] = "Title" ;
$language [ 'templateLabel' ] = "Template" ;
$language [ 'languageLabel' ] = "Language" ;
$language [ 'noResults' ] = "No results" ;
Listing 5. Plik db.class.php
class db {
private $dbId = null;
public function cd () {}
public function dbConnection ( $dbServer , $dbUsername , $dbPassword , $db ) {
if ( ! $this - > dbId = @mysql_connect ( $dbServer , $dbUsername , $dbPassword ))
return false;
else {
if ( ! @mysql_select_db ( $db , $this - > dbId )) return false;
else return true;
}
}
public function query ( $request ) {
$results = array () ;
if (( $request != "" ) && ( $queryResult = @mysql_query ( $request , $this - > dbId ))) {
while ( $myRow = @mysql_fetch_array ( $queryResult )) $results =
array_merge ( $results , $myRow ) ;
return $results ;
}
else return false;
}
}
Listing 6. Funkcja ConfigureTemplate() pliku functions.php
function ConigureTemplate ( $o ) {
$o - > debugging = FALSE;
$o - > security = TRUE;
# Umożliwia szybką zmianę szablonu
$o - > compile_check = FALSE;
$o - > force_compile = TRUE;
return $o ;
}
18
3/2007
440331312.015.png 440331312.016.png
Dla początkujących
ła używana przez klasy pochodne uwzględniające
SGBD. Klasa taka zawierałaby oczywiście więcej
metod niż te, które przedstawiamy. Klasa db (któ-
ra może się połączyć jedynie z bazą danych My-
SQL) jest mimo tego użyteczna, gdyż umożli-
wia, jak już to wyjaśniłem wcześniej, przedstawie-
nie uwzględnienia klas przez Eclipse. Klasa db za-
wiera dwie metody. Pierwsza umożliwia połącze-
nie z bazą danych MySQL. Po połączeniu, iden-
tyfikator połączenia jest zapisywany w prywatnej
zmiennej klasy dbId . Zmienna ta używana jest
w funkcji query odpowiedzialnej za zapytania.
Wyniki są łączone i zapisane w tablicy za pomocą
funkcji array_merge , a następnie odesłane. Wy-
bór łączenia danych jednych po drugich w tabeli
nie jest bez znaczenia. Umożliwia on użycie funk-
cji charakterystycznej dla silnika szablonów Smar-
ty, który przyjmuje w argumencie tabele danych i
generuje odpowiedni kod HTML. Tabela jest wte-
dy przekształcona w arkusz stylów CSS.
Zanalizujemy teraz każdą
funkcję pliku functions.php.
Funkcja ConfigureTemplate(), której zawartość
przedstawiona jest na Listingu 6., umożliwia, jak
sama jej nazwa mówi, konfigurację obiektu sza-
blonu Smarty. Kod ten jest zawarty w funkcji,
gdyż musi być uruchomiony przy każdej konfigu-
racji obiektu szablonu. Metoda force_compile()
umożliwia ponowną kompilację przy każdym
uruchomieniu szablonu (zajmując miejsce funk-
cji compile_check() , którą pozostawiam w ko-
dzie specjalnie, aby pokazać jej istnienie). Nie jest
ona zalecana w produkcji z powodu wydajności
(jeśli szablony są znaczne) i czasu ponownej kom-
pilacji, ale umożliwia ona natychmiastową zmianę
szablonu i języka aplikacji.
Wspominaliśmy już wcześniej o funkcji
DisplayLanguagesList() . Umożliwia ona wy-
świetlenie listy dostępnych języków sprawdza-
jąc obecność pliku tłumaczenia dla każdej flagi
kraju. Jej kod zawarty jest na Listingu 7. Funk-
cja ManageTemplateVariables() , której kod
przedstawia Listing 8., umożliwia przyporząd-
kowanie większości zmiennych szablonu.
Funkcja ManageTemplate() z Listingu 9.
umożliwia, podczas ładowania strony, określe-
nie języka i szablonu, który należy użyć w zależ-
ności od zmiennych zawartych ewentualnie w
parametrach. Funkcja wybiera żądany język i
szablon jedynie wtedy, gdy są one dostępne, a je-
śli nie są, wtedy będą użyte domyślne wartości.
Zauważcie, że w kodzie tej funkcji nie spraw-
dziłem celowo zawartości danych, aby zmniej-
szyć przedstawiony kod w tym artykule. Trze-
ba jednak to wykonać, jeśli chcesz skorzystać z
przedstawionych przykładów. Jeśli opcja magic_
quote_gpc twojego serwera jest włączona, nie ma
potrzeby uwalniania danych, ale jest to dosyć zła
zasada programowania, gdyż należy próbować
pozostać jak najbardziej niezależnym od platfor-
my programowej. W dniu kiedy aplikacja zosta-
nie przeniesiona z jednego serwera na inny, opcja
ta może być wyłączona. Jeśli kod nie jest wtedy
uwolniony, może to mieć konsekwencje zwią-
zane z bezpieczeństwem aplikacji. Należy więc
przetestować i uwolnić w razie potrzeby dane
za pomocą funkcji get_magic_quotes_gpc() .
Dzięki niej, można dowiedzieć się, czy opcja jest
włączona, czy też nie na serwerze. Poza tym, PHP
6 może usunąć po prostu opcję magic quote .
Tak samo jak w pliku tłumaczenia, funkcja
TemplatesList() umożliwia wyświetlenie li-
sty różnych szablonów dostępnych w folderze ./
templates/ . JFunkcja nie sprawdza, czy pliki skła-
dające się na szablony są obecne. W tym przy-
padku należałoby także zabezpieczyć tę funk-
cję, której kod jest widoczny na Listingu 10.
Funkcja TemplatesURL() przypomina bar-
dzo poprzednią funkcję. Jej celem jest umożli-
wienie użytkownikowi wybranie szablonu w li-
ście rozwijalnej do ponownego automatycznego
załadowania strony za pomocą kodu Javascript
z wybranym szablonem jako aspektem graficz-
nym. Istnieje możliwość klikania na obrazki
Listing 7. Funkcja DisplayLanguagesList() pliku functions.php
function DisplayLanguagesList () {
$path = $_SESSION [ 'paths' ][ 'LANGUAGE' ] . "lags" ;
$lags = NULL;
if ( $folderId = opendir ( $path )) {
while (( $f = readdir ( $folderId )) != FALSE ) {
$tab = split ( '[.]' , $f ) ;
if (( $f != "." ) && ( $f != ".." ) && ( is_ile ( $_SESSION [ 'paths' ][ 'LANGUAGE' ] .
$tab [ 0 ] . '.lang.php' ))) {
$lags .= ' < a href = "' . $_SERVER [ 'PHP_SELF' ] ;
$lags .= ' ?language = ' . $tab [ 0 ] . '" > ' ;
$lags .= ' < img src = "' . $path . "/" . $f . '" / > ' ;
$lags .= ' < / a > &nbsp ; ' ;
}
}
}
return $lags ;
}
Listing 8. Funkcja ManageTemplateVariables() pliku functions.php
function ManageTemplateVariables( $o , $templatePath ) {
$arrayTemplatesURL = TemplatesURL () ;
$o - > assign ( "path" , $templatePath ) ;
$o - > assign ( "encoding" , $_SESSION [ 'language' ][ 'encoding' ]) ;
$o - > assign ( "language" , $_SESSION [ 'activeLanguage' ]) ;
$o - > assign ( "lags" , DisplayLanguagesList ()) ;
$o - > assign ( "templateOutput" , TemplatesList ()) ;
$o - > assign ( "templateValues" , $arrayTemplatesURL ) ;
$o - > assign ( "templateSelected" , $arrayTemplatesURL [ $_SESSION [ 'activeTemplate' ]]) ;
$o - > assign ( "pageTitle" , $_SESSION [ 'language' ][ 'pageTitle' ]) ;
$o - > assign ( "languageLabel" , $_SESSION [ 'language' ][ 'languageLabel' ]) ;
$o - > assign ( "templateLabel" , $_SESSION [ 'language' ][ 'templateLabel' ]) ;
return $o ;
}
Listing 9. Funkcja ManageTemplate() pliku functions.php
function ManageTemplate( ) {
# Zarządzanie językiem
if ( isset ( $_GET [ 'language' ])) $_SESSION [ 'activeLanguage' ] = $_GET [ 'language' ] ;
if ( ! is_ile ( $_SESSION [ 'paths' ][ 'LANGUAGE' ] . $_SESSION [ 'activeLanguage' ] .
'.lang.php' )) require ( $_SESSION [ 'defaultLanguage' ] . '.lang.php' ) ;
else require ( $_SESSION [ 'activeLanguage' ] . '.lang.php' ) ;
# Aktualizacja zmiennych sesji ze zmiennymi pliku językowego
$_SESSION [ 'language' ] = $language ;
# Zarządzanie szablonem
if ( isset ( $_GET [ 'template' ])) {
if ( is_dir ( $_SESSION [ 'paths' ][ 'TEMPLATES' ] . $_GET [ 'template' ] . " / " ))
$_SESSION [ 'activeTemplate' ] = $_GET [ 'template' ] ;
else $_SESSION [ 'activeTemplate' ] = $_SESSION [ 'defaultTemplate' ] ;
}
}
20
3/2007
440331312.017.png
Zgłoś jeśli naruszono regulamin