Professional Documents
Culture Documents
Webprogramozás PDF
Webprogramozás PDF
Egyszeren Web
Ksztette: Konzulens:
Kromesch Sndor (polgri szolglatos) Dr. Charaf Hassan
2003.
HTML (Hyper Text Markup Language) ........................................................................................................................ 7
A HTML dokumentumokrl ...................................................................................................................................... 7
Nhny szban a HTML alapvet szablyairl ......................................................................................................... 7
A HTML dokumentum elvi felptse ....................................................................................................................... 8
A HTML dokumentum fejlce................................................................................................................................... 8
A HTML dokumentum szvegtestnek felptse ..................................................................................................... 9
A HTML dokumentum cmszintjeinek felptse .................................................................................................... 10
Bekezdsek a HTML dokumentumban.................................................................................................................... 10
Kereszthivatkozsok HTML dokumentumok kztt ............................................................................................... 11
Karakterformtumok a HTML dokumentumban ..................................................................................................... 12
Kpek elhelyezse a HTML dokumentumban ......................................................................................................... 13
Klnbz listafomtumok a HTML dokumentumban ........................................................................................... 15
A HTML formtum tblzatai ................................................................................................................................. 17
A HTML dokumentumablak felosztsa ................................................................................................................... 20
Krdvek a HTML dokumentumban ...................................................................................................................... 21
A HTML dokumentum egyb elemei ...................................................................................................................... 23
A JavaScript hasznlata a HTML dokumentumban................................................................................................. 23
A HTML specilis karakterei................................................................................................................................... 24
Karaktertblk.......................................................................................................................................................... 27
Cascading Style Sheets (CSS)...................................................................................................................................... 27
Bevezets ................................................................................................................................................................. 27
A stluslap csatolsa ............................................................................................................................................. 28
Csportosts.......................................................................................................................................................... 28
rklds ............................................................................................................................................................. 29
A class szelektor................................................................................................................................................... 29
Megjegyzend, hogy szelektoronknt (HTML elemenknt) csak egy osztly definilhat! ............................... 30
Az ID szelektor .................................................................................................................................................... 30
sszekapcsolt szelektorok ................................................................................................................................... 30
Megjegyzsek....................................................................................................................................................... 30
Ltszlagos osztlyok s elemek.............................................................................................................................. 30
Ltszlagos osztlyok az lkapcsokban ............................................................................................................. 31
Tipografikai ltszlagos elemek........................................................................................................................... 31
A 'first-line' ltszlagos elem ............................................................................................................................... 32
A 'first-letter' ltszlagos elem ............................................................................................................................. 32
Ltszlagos elemek a szelektorokban .................................................................................................................. 33
Ltszlagos elemek tbbszrzse....................................................................................................................... 33
Rangsor .................................................................................................................................................................... 33
'important'............................................................................................................................................................. 34
A rangsor fellltsa ............................................................................................................................................. 34
Formzsmodell ....................................................................................................................................................... 35
Blokkszint elemek.............................................................................................................................................. 36
Fggleges formzs............................................................................................................................................ 38
Vzszintes formzs ............................................................................................................................................. 39
Listaelemek .......................................................................................................................................................... 39
Lebeg elemek ..................................................................................................................................................... 40
Soron belli elemek.............................................................................................................................................. 41
Helyettestett elemek............................................................................................................................................ 41
Sorok magassga.................................................................................................................................................. 42
A Vszon.............................................................................................................................................................. 42
CSS tulajdonsgok ................................................................................................................................................... 43
A tulajdonsg-rtk prok jellsi rendszere ....................................................................................................... 43
Font tulajdonsgok ............................................................................................................................................... 43
Szn- s httrtulajdonsgok ................................................................................................................................ 48
Szveg tulajdonsgok........................................................................................................................................... 51
Doboz-tulajdonsgok ........................................................................................................................................... 54
Osztlyoz tulajdonsgok .................................................................................................................................... 61
Egysgek .................................................................................................................................................................. 64
Hosszsg egysgek............................................................................................................................................. 64
Szzalkos egysgek ............................................................................................................................................ 65
Sznjellsek ........................................................................................................................................................ 65
URL...................................................................................................................................................................... 66
sszhang .................................................................................................................................................................. 66
Elre-kompatbilis elemzs ................................................................................................................................... 66
JavaScript..................................................................................................................................................................... 69
Mi is az a JavaScript?............................................................................................................................................... 69
JavaScript s a bngszk........................................................................................................................................ 69
JavaScript begyazsa a HTML dokumentumba ..................................................................................................... 70
Legfontosabb esemnyek ......................................................................................................................................... 71
Hasznljuk amit tudunk, 2. plda ............................................................................................................................. 71
Link a Script-re ........................................................................................................................................................ 71
Csoportostsunk, avagy a fggvnyek...................................................................................................................... 72
Objektumok, dokumentumok................................................................................................................................... 73
Ha hibztunk ............................................................................................................................................................ 74
Esemnyek ............................................................................................................................................................... 74
Vltoz kpek .......................................................................................................................................................... 75
Eltlttt kpek ........................................................................................................................................................ 76
Idztsek ................................................................................................................................................................. 76
Status sor.................................................................................................................................................................. 77
SWITCH hasznlat .................................................................................................................................................. 78
Ellenrzsek............................................................................................................................................................. 80
"res szveg"........................................................................................................................................................... 81
Az XML ....................................................................................................................................................................... 82
Bevezets ................................................................................................................................................................. 82
Az els XML dokumentumunk ltrehozsa............................................................................................................. 83
XML alkalmazsok .................................................................................................................................................. 84
Az XML adatfolyam felptse (XML fjl-ok)........................................................................................................ 86
Elemek (Elements) ............................................................................................................................................... 86
Megjegyzs .......................................................................................................................................................... 86
Tulajdonsgok (attributes) ................................................................................................................................... 86
Egyed hivatkozsok (entity references) ............................................................................................................... 87
Feldolgozsi utastsok (processing intructions).................................................................................................. 87
A CDATA szakaszok........................................................................................................................................... 87
Nvterek............................................................................................................................................................... 87
Az XML adatfolyam rvnyessgnek ellenrzse ................................................................................................. 89
Elem tpus deklarci (Element Type Declaration) ............................................................................................. 90
A tulajdonsglista (attributum lista) deklarcija................................................................................................. 90
Egyed deklarci (Entity declaration).................................................................................................................. 91
A VKONYV XML adatfolyam nyelvtani szablyai ............................................................................................ 92
Az XML adatfolyam megjelentse ......................................................................................................................... 92
A CSS................................................................................................................................................................... 93
Az XSL ................................................................................................................................................................ 93
Egy XML adatfolyam elemzse (Parse)................................................................................................................... 94
Egy DOM elemz mkdse ............................................................................................................................... 95
Egy SAX elemz mkdse................................................................................................................................. 96
ASP (Active Server Pages). ...................................................................................................................................... 97
Egy kis alapozs....................................................................................................................................................... 97
Mozgsba lendl a kd......................................................................................................................................... 98
ASP a lthatron....................................................................................................................................................... 98
Az ASP kdok begyazsa....................................................................................................................................... 99
Az ASP objektummodell........................................................................................................................................ 101
Egy HTTP vlasz a Response objektum ............................................................................................................. 102
A vlaszpuffer ........................................................................................................................................................ 102
HTTP fejlcek kldse........................................................................................................................................... 102
Tartalom s karakterkszlet.................................................................................................................................... 103
HTTP sttusz s tirnyts.................................................................................................................................... 104
Ha sokig tart az oldal ellltsa........................................................................................................................... 104
Gyorsttrak a cache.......................................................................................................................................... 105
HTTP krs a Request objektum......................................................................................................................... 105
Adatfeltlts a POST HTTP paranccsal................................................................................................................. 106
A HTTP tartalom kiolvassa.................................................................................................................................. 107
Cookie .................................................................................................................................................................... 108
Az IIS napljnnak rsa ........................................................................................................................................ 109
Felhasznlazonosts nvvel s jelszval ............................................................................................................. 109
A Request kollekcik ............................................................................................................................................. 110
Az ASP alkalmazs s munkamenet ...................................................................................................................... 111
Az ASP munkamenet ............................................................................................................................................. 111
A Session objektum ............................................................................................................................................... 112
A global.asa fjl ..................................................................................................................................................... 113
Az ASP alkalmazs ................................................................................................................................................ 114
Az alkalmazs vdelme...................................................................................................................................... 115
Az Application objektum ....................................................................................................................................... 115
A global.asa fjl mgegyszer ................................................................................................................................. 116
Objektumok s tpusknyvtrak............................................................................................................................. 117
A Server objektum ................................................................................................................................................. 118
Naplzs az esemnynaplba................................................................................................................................. 119
Specilis karakterek a HTML kdban.................................................................................................................... 120
rvztr tkrfrgp .......................................................................................................................................... 120
Tovbbi META elemek.......................................................................................................................................... 121
Kdtblk............................................................................................................................................................... 121
Az UTF-8 kdols.................................................................................................................................................. 122
Lokalizls ............................................................................................................................................................. 122
Hibakezels az ASP oldalban................................................................................................................................. 123
VBScipt rviden......................................................................................................................................................... 127
Adatpusok ............................................................................................................................................................. 127
Konstans definils ................................................................................................................................................ 127
VBScript opertorok: ............................................................................................................................................. 127
VBScript vltozk:................................................................................................................................................. 128
Vltoz deklarls:............................................................................................................................................. 128
Elgazsok ............................................................................................................................................................. 129
Ciklusok: ................................................................................................................................................................ 129
Elltesztel cilus amg igaz:............................................................................................................................... 129
Htultesztel ciklus amg igaz: .......................................................................................................................... 130
Elltesztel ciklus amg igaz nem lesz:.............................................................................................................. 130
Htultesztel ciklus amg igaz nem lesz: ........................................................................................................... 130
Kilps ciklusbl EXIT DO segtsgvel: ........................................................................................................... 130
FOR ciklus: ........................................................................................................................................................ 130
CGI............................................................................................................................................................................. 131
Perl ............................................................................................................................................................................. 134
Perl 5 nyelv rvid sszefoglalsa ........................................................................................................................... 134
Induls.................................................................................................................................................................... 135
Adatstruktrk........................................................................................................................................................ 135
Krnyezet............................................................................................................................................................... 136
Skalrok ................................................................................................................................................................. 136
Tmbk .................................................................................................................................................................. 137
Szintaxis ... utastsok ............................................................................................................................................ 137
Egyszer utasts................................................................................................................................................ 138
sszetett utasts ................................................................................................................................................ 138
Opertorok s precedencijuk ................................................................................................................................ 139
cmopertor ........................................................................................................................................................ 140
ismtls .............................................................................................................................................................. 140
konkatenc ....................................................................................................................................................... 140
file tesztels........................................................................................................................................................ 140
szveg sszehasonlts ....................................................................................................................................... 140
szm sszehasonlts.......................................................................................................................................... 140
I/O ...................................................................................................................................................................... 140
A szvegekhez mg jrul egypr "idzjel" opertor ........................................................................................ 140
Mintailleszts ......................................................................................................................................................... 141
Hasznlat............................................................................................................................................................ 141
Mdostk .......................................................................................................................................................... 141
Regular Expressions, regulris kifejezsek ........................................................................................................ 141
Az alapok ........................................................................................................................................................... 141
Karaktersorozatok .............................................................................................................................................. 142
Specilis karakterek ........................................................................................................................................... 142
Csoportosts...................................................................................................................................................... 143
Opertorok tlapolsa ............................................................................................................................................ 143
definilatlan........................................................................................................................................................ 144
TRUE ................................................................................................................................................................. 144
FALSE ............................................................................................................................................................... 144
Beptett fggvnyek ............................................................................................................................................. 144
nhny fggvny... ............................................................................................................................................. 144
Elre definilt vltozk .......................................................................................................................................... 147
Alprogramok rsa.................................................................................................................................................. 149
Alprogramok deklarlsa: .................................................................................................................................. 149
Alprogram hvsa:.............................................................................................................................................. 149
Nvtelen alprogram ltrehozsa:........................................................................................................................ 149
Nvtelen alprogramok definilt krnyezete ....................................................................................................... 149
Beptett fggvnyek tlapolsa......................................................................................................................... 150
Modulok................................................................................................................................................................. 150
package .............................................................................................................................................................. 150
Szimblumtbla ................................................................................................................................................. 150
Konstruktor, destruktor ...................................................................................................................................... 150
Bonyolultabb struktrk......................................................................................................................................... 151
Referenck ltrehozsa....................................................................................................................................... 151
Referencik hasznlata....................................................................................................................................... 151
Szimblikus hivatkozsok.................................................................................................................................. 152
OOP ....................................................................................................................................................................... 153
Amit a Perl objektumokrl tudni kell:................................................................................................................ 153
Objektum............................................................................................................................................................ 153
Osztly ............................................................................................................................................................... 153
Metdus.............................................................................................................................................................. 154
Destruktor .......................................................................................................................................................... 155
PHP ............................................................................................................................................................................ 155
A PHP rvid trtnete ............................................................................................................................................ 155
Alapok.................................................................................................................................................................... 156
Vltozk PHP-ban.................................................................................................................................................. 157
Tmbk a PHP-ban ............................................................................................................................................ 158
Vltozk hatskre................................................................................................................................................. 161
Konstansok............................................................................................................................................................. 163
Kommentek............................................................................................................................................................ 163
Opertorok ............................................................................................................................................................. 163
Opertorok precedencija................................................................................................................................... 163
Aritmetikai opertorok ....................................................................................................................................... 164
Hozzrendel opertorok ................................................................................................................................... 164
Bitorientlt opertorok ....................................................................................................................................... 165
sszehasonlt opertorok ................................................................................................................................. 165
Hibakezel opertorok ....................................................................................................................................... 166
Nvel/cskkent opertorok ............................................................................................................................ 167
Logikai opertorok ............................................................................................................................................. 167
String opertorok................................................................................................................................................ 167
Vezrlsi szerkezetek ............................................................................................................................................. 168
if ......................................................................................................................................................................... 168
else ..................................................................................................................................................................... 168
elseif................................................................................................................................................................... 168
Vezrlsi szerkezetek alternatv szintaxisa ........................................................................................................ 169
while................................................................................................................................................................... 169
do..while............................................................................................................................................................. 170
for....................................................................................................................................................................... 171
foreach................................................................................................................................................................ 172
break................................................................................................................................................................... 172
continue.............................................................................................................................................................. 173
switch ................................................................................................................................................................. 173
declare ................................................................................................................................................................ 175
Tick-ek ............................................................................................................................................................... 175
return .................................................................................................................................................................. 176
require().............................................................................................................................................................. 176
include() ............................................................................................................................................................. 176
require_once() .................................................................................................................................................... 178
include_once().................................................................................................................................................... 178
Fggvnyek............................................................................................................................................................ 179
Felhasznl ltal definilt fggvnyek............................................................................................................... 179
Fggvnyargumentumok.................................................................................................................................... 179
Referencia szerinti argumentumfeltlts............................................................................................................ 179
Argumentumok kezdrtkei ............................................................................................................................. 180
Vltoz hosszsg argumentumlista ................................................................................................................ 180
Visszatrsi rtkek............................................................................................................................................ 180
Fggvnyvltozk.............................................................................................................................................. 181
Fejezet. Osztlyok, objektumok ............................................................................................................................. 181
class.................................................................................................................................................................... 181
extends ............................................................................................................................................................... 183
Konstruktor ........................................................................................................................................................ 184
:: ......................................................................................................................................................................... 185
parent.................................................................................................................................................................. 186
Objektumok szerializcija, objektumok session-kben.................................................................................... 187
A specilis __sleep s __wakeup metdusok..................................................................................................... 188
Referencik a konstruktorban............................................................................................................................. 188
Referencik ............................................................................................................................................................ 189
Mik a referencik ............................................................................................................................................... 189
Mit lehet referencikkal tenni ............................................................................................................................ 189
Mit nem lehet referencikkal tenni..................................................................................................................... 190
Referenciaknti paramtertads........................................................................................................................ 190
Refencia visszatrsi-rtk................................................................................................................................. 191
Referencik megszntetse ................................................................................................................................ 191
A PHP ltal hasznlt referencik........................................................................................................................ 191
global referencik............................................................................................................................................... 191
$this.................................................................................................................................................................... 192
Hibakezels ............................................................................................................................................................ 192
Adatbzis kezels (MySQL fggvnyek)............................................................................................................... 194
HTML (Hyper Text Markup Language)
A HTML dokumentumokrl
A HTML dokumentum-formtumot tekinthetjk az n. hyper-text egyik megvalstsi
formjnak is. A HTML dokumentum egy olyan szvegfjl, amely a szvegen kvl tartalmaz
n. "HTML-tag"-eket - formzutastsokat -, valamint megjelentend objektumokra trtn
hivatkozsokat is. Ezek a HTML formzutastsok (ms szval: parancsok, elemek)
befolysoljk a dokumentum megjelentst, kapcsolatait. Ezeket az utastsokat a
bngszprogram rtelmezi s vgrehajtja. Ezen okbl a formzutasts mindig megelzi azt a
rszt a dokumentumnak, amelyre vonatkozik. A dokumentumksztshez hasznlhat HTML
utastsok kre llandan bvl, a nyelv fejldik. A szabvnyosts csak lassan kveti a fejldst.
Ezrt nem minden bngszprogram tudja a HTML utastsok mindegyikt rtelmezni. Egy
bngsz, ha szmra rtelmetlen utastssal tallkozik, akkor kihagyja, gy nem okoznak
problmt az jabb kelet - mg szabvnyostatlan - utastsok a rgebbi kiads WWW-
bngszknek sem. Sajnos a fentiek miatt ugyanazt a dokumentumot kt klnbz program nem
biztos, hogy azonos formban fogja megjelenteni. Ms oka is van ennek. A WWW-n
kalandoznl kicsi a valsznsge annak, hogy rendelkezsre ll ugyanaz a bettpus, mint a
WWW-oldalt fejlesztnek. Vagy kpek esetn semmi garancia nincs arra, hogy minden
bngszprogram ugyanazon felbontsban s sznszmmal tudja megjelenteni a kpet. s gy
tovbb ... A HTML-ben mgis az a nagyszer, hogy nagymrtkben megkzelti a
platformfggetlensget. Egy HTML dokumentum - ha nem is azonos mdon - mindenki szmra
megtekinthet.
Plda
<BODY
BACKGROUND="pelda.gif"
BGCOLOR="#FF3333"
TEXT="#000099"
LINK="#993399"
VLINK="#009999">
<P> A szemlltets kedvrt az albbi szveg szles szegllyel hatrolt! <P>
<TABLE BORDER=12>
<TH><TD><H1><A HREF="#pelda">Ez itt egy hivatkozs,</A> kattints r!
</H1></TH></TD>
</TABLE>
<P> <IMG SRC="k1.gif" ALT="Grgetsv"> <P>
<A NAME="pelda"> Ide mutat a hivatkozs!</A>
</BODY>
A HTML dokumentum cmszintjeinek felptse
A HTML formtum szvegfjlban definilhatunk cmeket, ill. alcmeket hat szint mlysgig. A
legfels szint cmet a <H1 ALIGN="hely"> s a </H1> utastsprral kell kzrezrni. A
msodik szintet a <H2 ALIGN="hely"> s a </H2> utastsok hatroljk, s gy tovbb a
hatodik szintig.
Minden szint ms-ms betformtumban jelenik meg a dokumentumban, a bngszprogram
belltstl fggen. A cmek igaztst szablyozza az ALIGN opci, melynek lehetsges
rtkei: left, center, right. Amennyiben tl hossz a cm, de egy sorosnak kell maradnia, akkor a
NOWRAP opci megakadlyozza a cm betrdelst tbb sorba.
Tulajdonsga, hogy nem szkrollozdik a dokumentum tbbi rszvel ellenttben.
A cmek csak a szemll szmra keltik a tagoltsg rzett, a valsgban nem tagoljk fizikailag
szakaszokra a dokumentumot. Ezt a tagolst a <DIV CLASS="osztly" ALIGN="hely">,
</DIV> utastsokkal lehet meghatrozni, ahol a CLASS opci sorolja a megfelel SGML
osztlyba a szakaszt, az ALIGN pedig a szakasz igaztsi formtumt rja el. Az automatikus
trdelst itt is megakadlyozza a NOWRAP opci, ez esetben a szakasz trdelst a <P> vagy a
<BR> utastsokkal lehet szablyozni.
Plda a cmszintekre:
<H1 ALIGN="left">Legfels szint cmsor</H1>
<H2 ALIGN="center">Msodik szint alcmsor</H2>
<H3 ALIGN="right">Harmaik szint alcmsor</H3>
<H4 NOW RAP>Negyedik szint alcmsor</H4>
<H5>tdik szint alcmsor</H5>
<H6>Hatodik szint alcmsor</H6>
<DIV ALIGN="center"> Ez egy szakasz, melyben a szveg elvileg azonos mdon - kzpre igaztva -
kezelend. </DIV>
Plda kp alkalmazsra:
<MAP NAME="osztott">
<AREA SHAPE="circle" COORDS="130,130,50" HREF="#vege">
</MAP>
<P>
kp szvegbe beszrva
<IMG SRC="k10.gif" ALT="valami kp" USEMAP="#osztott" ISMAP>
gy jelenik meg
</P>
<P>
<IMG ALIGN="right" SRC="k10.gif" WIDTH="100" ALT="...">
Ugyanez jobbra igaztva s arnyosan kicsinytve...
</P>
<P>
<IMG ALIGN="left" SRC="k10.gif" VSPACE=20 HEIGHT="100" ALT="...">
Ugyanez balra igaztva s arnyosan kicsinytve...
</P>
<P>
<IMG ALIGN="top" SRC="k10.gif" HSPACE=40 WIDTH="100" ALT="...">
Ugyanez a szveg fels szlhez igaztva...
</P>
<P>
<IMG ALIGN="middle" SRC="k10.gif" WIDTH="100" HEIGHT="100" UNITS="en"
ALT="...">
Ugyanez sor kzpre igaztva, valamint...
</P>
<P>
<IMG ALIGN="bottom" SRC="k.gif" WIDTH="200" HEIGHT="100" UNITS="pixel"
ALT="...">
Ugyanez a sor alsszlhez igaztva, valamint...
<P>
<A NAME="vege">VGE</A>
Klnbz listafomtumok a HTML dokumentumban
A HTML formtum szvegfjlban hasznlhatunk listkat is, amelyek szvegszerkesztkbeli
megfeleli a felsorolsok s bajuszos bekezdsek.
A szmozott bekezdsek (felsorolsok) megfelelje a szmozott lista, az n. "bajuszos"
bekezdsek megfelelje pedig a szmozatlan lista.
A harmadik lista tpus pedig a ler lista, ahol az egyes lista elemekhez tartozhat egy hosszabb
lers is.
A szmozott listt az <OL> s az </OL> utastsok kz kell zrni. A szmozatlan listt pedig az
<UL>, </UL> utastspr kz. Mindkt tpus listban hasznlhatjuk a listafejlcet, melyet az
<LH> utasts vezet be - az </LH> pedig zr! Mindkt listatpusban a listk sorai az <LI>
utastssal kezddnek s nem ktelez lezrni.
Szmozott lista esetben a kezd sorszm kzvetlenl megadhat az <OL SEQNUM="szm">
formj kezdutastssal. Msik lehetsg, hogy egy elzleg definilt lista szmozsa
folytathat az <OL CONTINUE> kezdutasts hasznlatval. Egybknt az <OL> utasts 1-
tl kezdi a lista tagok szmozst.
A szmozatlan listk kezdeleme is hordozhat formzinformcikat. Az <UL
SRC="fjlnv.kit"> formj utasts pldul a listasort megelz bajuszknt a megadott
kpfjlt hasznlja. Az <UL DINGBAT="karakter"> a megadott bajuszkaraktert alkalmazza.
Az <UL WRAP="irny"> pedig tbboszlopos listk esetn az igazts formjt hatrozza meg.
(A WRAP opci a horiz s a vert rtkeket veheti fel.
A szmozatlan listk specilis - kln HTML utastsokkal ltrehozhat - fajti a knyvtrlista s
a menlista. A knyvtrlista tpus a <DIR> utastssal kezddik s a </DIR> utastsra vgzdik.
A menlista pedig <MENU> s a </MENU> utastsokkal hatrolt. Ezek a listaformk a norml
szmozatlan listktl mindssze annyiban klnbznek, hogy a knyvtrlista tagjai 20
karakteresnl, a menlista tagjai pedig egy sorosnl nem lehetnek hosszabbak s nincs
"bajuszuk".
A ler listt a <DL> s a </DL> utastsok kz kell zrni. A lista fejlc megadsa azonos az
tbbi listatpusnl ltottal. A listk egyes alkotelemeinek kezdett a <DT> utasts jelzi, az
ehhez tartoz lers kezdett pedig a <DD> utasts hatrozza meg. Nincs egyik utastsnak sem
zr prja, ezrt a lista tag a <DT> elemtl a <DD>-ig, a hozz tartoz lers pedig a <DD>
elemtl a kvetkez <DT>-ig tart.
Plda listkra:
<P>Norml szveg</P>
<P>
<OL><LH>A szmozott lista fejlce</LH>
<LI>Els sor
<OL><LH>A begyazott lista fejlce</LH>
<LI>Els elem
<LI>Msodik elem
<LI>Harmadik elem
</OL>
<LI>Msodik sor
<LI>Harmadik sor
<LI>Negyedik sor
</OL>
</P>
<P>Norml szveg</P>
<P>
<UL><LH>A szmozatlan lista fejlce</LH>
<LI>Els sor
<LI>Msodik sor
<UL wrap="horiz"><LH>A begyazott lista fejlce</LH>
<LI>Els sor
<LI>Msodik sor
</OL>
<LI>Harmadik sor
</OL>
</P>
<P>Knyvtrlista:<BR>
<DIR>
<LI>Els tag
<LI>Msodik tag
<LI>Harmadik tag
<LI>Negyedik tag
</DIR>
</P>
<P>Menlista:<BR>
<MENU>
<LI>Els men
<LI>Msodik men
</MENU>
</P>
<P>Norml szveg</P>
<P>
<DL><LH>A ler lista fejlce</LH>
<DT>Els sor
<DD>Az els sorhoz tartoz lers, lehet hosszabb szveg
is.
A lers trdelse automatikus. Szpen igazodnak a betrdelt sorok
az els sor kezdpontjhoz.
<DT>Msodik sor
<DD>A msodik sorhoz tartoz lers
</DL>
</P>
A HTML formtum tblzatai
A HTML formtumnak ez az utastscsoportja kpes a legvltozatosabb szveg-, s
kpmegjelentsi formk ellltsra. A <TABLE> s a </TABLE> utastsok kz zrt rszt
tekintjk egy tblzatnak.
A tblzatnak a cmt a <CAPTION> s a </CAPTION> utastsok kztt kell megadni.
(Figyelem! Az gy megadott cm nem a tblzatban, hanem eltte fog megjelenni!) A cm
<CAPTION ALIGN="hely"> formj megadssal igazthat.
A tblzat minden sora a <TR> utastssal kezddik s a kvetkez </TR> vagy <TR>-ig, ill. a
tblzat vgig tart. Egy sor tartalmazhat oszlopfejlceket s adatokat. Az oszlopfejlceket a
<TH> </TH>utasts vezeti be s vlasztja el egymstl. A tblzat adatcelli pedig a <TR>-rel
megkezdett sorban egy <TD> utastssal kezddnek s minden cella a kvetkez <TD>-ig - ill.
</TD> ill. a kvetkez sor elejt jelz elemig - tart, ahol rtelemszeren j cella kezddik. Az
oszlopfejlceknek s az adatcellknak csak a kezdutastsa hasznlatos - habr van lezr
utastsuk is (</TH>, </TD>) -, mert a zrutastsuk elhagyhat!
A tblzat nyitutastsa tartalmazhat a teljes tblzatra vonatkoz belltsokat: <TABLE
BORDER="szm" ALIGN="hely" COLSPEC="oszlopjellemzk" UNITS="egysg"
NOWRAP CELLPADDING="pszm" CELLSPACING="kszm"
BGCOLOR="sznkd">
Ahol a BORDER opci a rcsozat szlessgt hatrozza meg. (0 esetn nincs rcsozat.) Az
ALIGN a teljes tbla elhelyezkedst hatrozza meg ( left, right, center lehet). A COLSPEC egy
oszlop igaztst s szlessgt adja meg. Egy oszlopra vonatkozan egy bet s szm egyberva
(pl.: L12 C24 R10), melytl a kvetkez oszlop rtkeit egy kz vlasztja el. Az UNITS a
szmokhoz tartoz mrtkegysget jelli ki (en, relative - oszlopszlessghez -, pixel). A
NOWRAP opci a cellk szvegnek trdelst tiltja le. Vgl a BGCOLOR a tblzat
httrsznt hatrozza meg.
A tblzat oszlopfejlcei nem csak a legfels oszlopban szerepelhetnek, hanem a tblzatban
brhol (pl. sorok cmeknt is).
Mind az oszlopfejlcekben, mind az adatcellkban hasznlhatk a kvetkez formzsra val
opcik:
COLSPAN="szm":
Egyest tbb egymssal szomszdos cellt - vzszintesen.
ROWSPAN="szm":
Egyest tbb egymssal alatti cellt - fgglegesen.
ALIGN="hely":
Igaztja a cellk tartalmt - vszintesen. Lehetsges rtkei: left, center, right, justify, decimal
VALIGN="hely":
Igaztja a cellk tartalmt - fgglegesen. Lehetsges rtkei: top, middle, bottom, baseline
Plda tblzatok hasznlatra:
<TABLE border="5" align="center">
<CAPTION> A tblzat cme
</CAPTION>
<TR>
<TH colspan="2"> Az 1.-2. oszlop kzs fejlce
</TH>
<TH colspan="3"> A 3.-4.-5. oszlop kzs fejlce
</TH>
<TH rowspan="2"> A 6. (2 soros) oszlop fejlce
</TH>
</TR>
<TR>
<TH> Az 1. oszlop msodrend fejlce
</TH>
<TH colspan="2"> A 2.-3. oszlop msodrend fejlce
</TH>
<TH colspan="2"> A 4.-5. oszlop msodrend fejlce
</TH>
</TR>
<TR>
<TH> Az els adatsor cme
</TH>
<TD> Az els adatcella
<TD> Adat (indexe: C3)
</TD>
<TD> Adat (indexe: D3)
</TD>
<TD> Adat (indexe: E3)
</TD>
<TD> Adat (indexe: F3)
</TD>
</TR>
<TR>
<TH> A 2. adatsor cme
</TH>
<TD> Adat (indexe: B4)
</TD>
<TD> Adat (indexe: C4)
</TD>
<TD> Adat (indexe: D4)
</TD>
<TD> Adat (indexe: E4)
</TD>
<TD> Adat (indexe: F4)
</TD>
</TR>
<TR>
<TH> Fggleges igaztsok
</TH>
<TD align="center" valign="bottom"> Le
<TD align="center" valign="top"> Fel
</TD>
<TD align="center" valign="middle"> Kzpre
</TD>
<TD>
</TD>
<TD> Adat (indexe: F5)<BR>Ettl a celltl balra egy
res cella,
alatta pedig kt res cella sszevonva
</TD>
</TR>
<TR>
<TH> Vzszintes igaztsok:
</TH>
<TD> Alaprtelmezs
</TD>
<TD align="left"> Balra
</TD>
<TD align="center"> Kzpre
</TD>
<TD align="right"> Jobbra
</TD>
<TD rowspan="2">
</TD>
</TR>
<TR>
<TD align="center" colspan="5"><IMG src="k12.gif" alt="Kp
a cellban">
</TD>
</TR>
</TABLE>
A HTML dokumentumablak felosztsa
Egyetlen bngszablakban tbb HTML dokumentum is megjelenthet a <FRAMESET> s a
</FRAMESET> utastspr, valamint a szorosan kapcsold <FRAME> utasts egyttes
hasznlatval.
A <FRAMESET ROWS="oszlophatrok"> kezdutastssal oszthat fel a kperny
fgglegesen, a <FRAMESET COLS="sorhatrok"> utastssal pedig vzszintesen. Ahol az
oszlop- s sorhatrok megadhatk kpernypontban ill. szzalkosan - vesszvel elvlasztva -, a
maradk kpernyterletre pedig a * dzskerkarakter hasznlatval lehet hivatkozni. Mivel vagy
csak vzszintesen, vagy csak fgglegesen oszthat fel a kperny, ezrt ha mindkt irnyban
osztott bngszablak ltrehozshoz a <FRAMESET> elemeket egymsba kell gyazni! Teht
pldul egy fggleges felosztson bell kell vzszintesen elvlasztott rszekre tagolni egy
oszlopot.
A fenti mdon definilt terletekre a <FRAME SRC="objektum"> utasts tlti be a megadott
objektumot, mely objektum lehet egy teljes HTML fjl, annak egy maghatrozott rsze, ill. egy
kp. Az gy kitltend keretek viselkedst szablyozza az utasts <FRAME NAME="nv"
SRC="objektum" SCROLLING="rtk" MARGINWIDTH="szm"
MARGINHEIGHT="szm"> alak megadsa.
Az adott keretnek nevet ad a NAME opci, a szkrollozst letilthatja SCROLLING="no"
kiegszts (ezenkvl a yes s az auto rtkeket veheti fel a SCROLLING opci), a
MARGINWIDTH s a MARGINHEIGHT pedig a kereten belli margk szlessgt
szablyozza.
Pldul a fejlcben megadott <BASE TARGET="nv"> utasts a NAME="nv" opcival
elnevezett keretbe irnytja a hivatkozsokat. Egybknt az <A HREF=...> utasts is ismeri a
TARGET="nv" opcit. (A TARGET="_top" opcival az egsz bngszablakot elfoglalja a
hivatkozott dokumentum, teht feloldja az ablak keretekre osztst!) Ha ezek egyike sem
szerepel, akkor a hivatkozs a hivatkoz objektum keretben jelenik meg, fellrva azt!
A <FRAMESET>, <FRAMESET> utastsprral hatrolt terletnek meg kell elznie a
<BODY> utastssal kijellt dokumentumtrzset! St a egy <NOFRAMES> utastssal kell
jelezni a dokumentum azon rsznek kezdett, amelyet akkor kell a bngsznek megjelentenie
csak, ha nem ismeri a keretutastsokat. s csak ez a <NOFRAMES>-mel kezdd rsz
tartalmazhatja a <BODY> s a </BODY> utastsprt.
Plda keretek hasznlatra:
<FRAMESET ROWS=185,*>
<FRAMESET COLS=185,*>
<FRAME SRC=k08.gif SCROLLING=NO NAME="cimer">
<FRAME SRC=02.htm NAME="felepites">
</FRAMESET>
<FRAMESET COLS=25%,*>
<FRAME SRC=index.htm NAME="tart">
<FRAME SRC=13.htm NAME="keret" MARGINHEIGHT=10 MARGINWIDTH=10>
</FRAMESET>
</FRAMESET>
<NOFRAMES>
<CENTER>
<BODY BGCOLOR="#FFFF00">
<FONT COLOR="#FF3333">
<H1>Sajnos ez a bngsz nem tmogatja a keretek hasznlatt!</H1>
</FONT>
</BODY>
<CENTER><H1>Adatfelvteli lap:</H1>
<FORM method="post" action="program.bin">
<INPUT TYPE="reset" VALUE="Alaprtelmezs">
<P>Vezetkneve:
<INPUT NAME="vezeteknev" TYPE="text" VALUE="Kovcs"
SIZE="25" MAXLENGTH="30">Keresztneve:
<INPUT NAME="keresztnev" TYPE="text" MAXLENGTH="50">Frfi:
Karaktertblk
Az Internet hasznlatnak els veiben, az aktulis feladatok megoldsra a 7 bites ASCII
kdols tkletesen elegend volt. A 7 bitbe (127 karakter) belefrt a teljes angol ABC, a szmok
s mg nhny jel is. Azutn a hlzat kezdte tlpni a hatrokat, s egyre inkbb szksg volt az
angoltl klnbz nyelvek betinek megjelentsre is. Ekzben a htbites rendszerekrl lassan
megkezddtt az ttrs a nyolc bitre (gy lett az ASCII-bl ANSI), ezutn kzenfekv volt, hogy
a specilis karaktereket a megjelen 128 res helyre lehet bekdolni. Ahny hz, annyi szoks: ki
gy, ki gy tlttte ki ezt a fels tartomnyt. A klnbz megoldsoknak ksznheten
megszlettek a kdtblk (codepage), s elkezddtt a kosz. Mg messze a DOS-os idkben
jrunk, amikor a tblzatrajzol karakterek helyett nha kezetes karakterek jelennek meg a rossz
belltsoknak ksznheten. A nyugat-eurpai (western) kdtblk tartalmaznak ugyan kezetes
betket, de a magyar hossz s mr nem frt bele. Sebaj, van hasonl: (sajnos) valsznleg
mindannyian tallkoztunk mr a kalapos u s hullmos o betkkel. Akkoriban ez a kis
cssztats mg elviselhetnek tnt, manapsg viszont mr inkbb knos hibnak tnik a
megjelensk. A vilg ugyanis azta sokat fejldtt. A szertegaz kdtblkat szabvnyokk
fogtk ssze, a dokumentumokba beptettk a karaktertblkat azonost adatokat, gy egy
HTML oldal forrsbl, vagy egy e-mailbl azonnal kiderl, hogy azt a kldje milyen
karaktertblval rta. Bizony, gy van ez akkor is, ha a (fleg nem Windows platformon fut)
levelezprogramok zme errl nem hajland tudomst venni. Mindenekeltt kt fontos
kdtblra hvnm fel a figyelmet: az iso-8859-1, ms nven Western kdtbla a nyugat-eurpai
karaktereket (s a hullmos/ kalapos o-t s u-t) tartalmazza, mg az iso-8859-2 alias Central
European amely tartalmazza a magyar vltozatot. Hasonl hatst lehet elrni a Windows-1250
nev kdlappal, ez azonban, mint az a nevbl is kitallhat, nem kifejezetten elterjedt Un*x s
Macintosh krkben :-). Magyar szvegben, amikor csak tehetjk, hasznljuk az iso-8859-2-t!
Bevezets
A CSS egy olyan stluslap megvalsts, amely lehetv teszi, hogy a HTML oldalak szerzi
oldalaikhoz egyedi stlust rendeljenek hozz. A CSS egyik alapvet tulajdonsga a folyamatos
stluslap - HTML lap kapcsolat. A lapok szerzi az ltaluk kedvelt stlust egyszer rgztik, s
hozzkapcsolhatjk minden ltaluk ksztett HTML laphoz. Ez a lers tartalmazza ennek
megoldsi lehetsgeit. Stluslappal (style sheet) tervezni nem nehz, de szksges hozz nmi
alapvet HTML ismeret. Ezt szemllteti az albbi plda:
H1 {color: blue}
Fenti plda tartalmazza a CSS hasznlatnak alapszablyait - egy css utasts kt rszbl ll:
a szelektor tartalmazza a formzand HTML tag megnevezst (H1);
a deklarci vgzi el a szelektorban meghatrozott tag formzst.
Maga a deklarci is kt rszre bonthat: egy tulajdonsgra s a hozz tartoz rtkre (szn: kk).
A szelektor a tulajdonkppeni kapocs a HTML, mint lernyelv s a stluslap kztt; szinte
minden HTML tag betltheti a szelektor szerept. Az elbb emltett szn (color) tulajdonsg csak
egy a tbb, mint 50 kzl, amelyek segtsgvel alakthatjuk egy HTML oldal kinzett. (A
tovbbiakban ahol oldal, dokumentum olvashat, rtelemszeren HTML oldalra,
dolumentumra vonatkozik.)
A stluslap csatolsa
A kvetkez plda mutatja be a kapcsolds ngy lehetsges mdjt:
<HTML>
<HEAD>
<TITLE>Stluslapok</TITLE>
<LINK REL=STYLESHEET TYPE="text/css" HREF="http://style.com/sajat"
TITLE="sajat">
<STYLE TYPE="text/css">
@import url(http://style.com/sajat)
<!--
H1 {color: blue}
-->
</STYLE>
</HEAD>
<BODY>
<H1>A cmsor kk</H1>
<P STYLE="color: green">Az egsz bekezds zld</P>
</BODY>
</HTML>
A fenti pldban lthat els lehetsg a csatolsra a <LINK> tag hasznlata; kls stluslap
behvsra. Msodik lehetsgknt a dokumentum HEAD szekcijban elhelyezett <STYLE>
tag, ahol kzvetlenl definilhatk a hasznlni kvnt stlusok, vagy az '@import' kulcsszval
kls stluslap importlhat. Az utolsknt bemutatott lehetsg pedig valamely HTML elem
STYLE attribtumnak hasznlata, a dokumentum BODY szekcijban.
A bngszk ltalban figyelmen kvl hagyjk az ltaluk ismeretlen elemeket. Ezrt a rgebbi
bngszk j esetben egyszeren 'elmennek' a <STYLE> elem mellett. Kellemetlenebb
eredmnnyel jr, ha belezavarodnak tartalmba. Ez megelzhet, ha egy standard SGML
utastssal elrejtjk ellk:
<STYLE TYPE="text/css">
<!--
H1 {color: blue}
-->
</STYLE>
Csportosts
A stluslapok mretnek cskkentse rdekben a szelektorok csoportosthatk; vesszvel
elvlasztott listba szedve:
H1, H2, H3 {font-family: verdana}
Hasonl mdon a deklarcik is csoportosthatk:
H1
{
font-family: helvetica;
font-size: 12pt;
font-style: normal;
}
Nhny tulajdonsg eltr csoportostsi szintaktikt is megenged:
H1 {font: bold 12pt helvetica}
rklds
Az els pldban a H1 elem sznbelltst mutattuk be. A kvetkezkben tartalmaz egy <EM>
elemet is:
<H1>A cmsor <EM>mindig</EM> fontos.</H1>
Ha az <EM> elemhez nincs kln szn rendelve, a kiemelt (emphasized) "mindig" sz mindig
rkli a tartalmaz (container) elem sznt, jelen esetben a kket. Hasonlkppen ms stlus-
tulajdonsgok is rkldnek (pl.:font-family, font-size). Alaprtelmezett stlustulajdonsg
belltshoz az alkalmazni kvnt stlust olyan elemhez kell ktni, amely tartalmazza
mindazokat az elemeket, amelyekre a stlust vonatkoztatni akarjuk. A HTML dokumentumokban
erre a clra megfelelhet a <BODY> elem:
BODY
{
color: black;
background: url(hatter.gif) white;
}
Ez a stlusplda a BODY szvegsznt feketre lltja be, httrknt kpet rendel hozz. Ha a kp
nem rhet el, a httrszn fehr lesz. Van azonban nhny stlustulajdonsg, amely nem
rkldik (Ezek kz tartozik pl. a background), de a szl elem httrtulajdonsgt nhny
tartalmazott (contained) elem lthatan hagyja. (Ha egy tblzatnak nem adunk meg 'background'
/httr/ tulajdonsgot, tltszik rajta a BODY httere.)
A tulajdonsgok rtke szzalkban is megadhat:
P {font-size: 10pt}
P {line-height: 120%}
Ebben a pldban a 'line-height' tulajdonsg rtke a 'font-size' tulajdonsg rtknek 120% -a
lesz: 12 pont.
A class szelektor
A HTML elemek stlusbelltsi rugalmassgnak nvelse rdekben a W3Cj attribtumot vett
fel a HTML-be: ez a CLASS (osztly). A 'BODY' minden eleme osztlyba sorolhat, az egyes
osztlyok pedig stluslapbl megcmezhetek.
<HTML>
<HEAD>
<TITLE>Stluslap plda</TITLE>
<STYLE TYPE="text/css">
H1.mezei {color: #00ff00}
</STYLE>
</HEAD>
<BODY>
<H1 CLASS=mezei>Zld, mint a rt</H1>
</BODY>
</HTML>
Az osztlyba sorolt elemekre az rklds ltalnos szablyai vonatkoznak. rklik a
stlusrtkeket a dokumentum struktrjban felettk ll n. szl elemeiktl. Minden azonos
osztlyba tartoz elem megcmezhet egyszerre is, elhagyva a hozzjuk tartoz tag nevt:
.mezei {color: green}
/*minden mezei osztlyba tartoz elem (CLASS=mezei)*/
Megjegyzend, hogy szelektoronknt (HTML elemenknt) csak egy osztly definilhat!
Az ID szelektor
A HTML -be felvtelre kerlt az 'ID' attribtum is, amely lehetv teszi az egyedi azonostk
felvtelt a dokumentumba. Ennek a lehetsgnek klnleges jelentsget ad, hogy
felhasznlhat stluslap szelektorknt, s megcmezhet a '#' eltaggal.
#z98y {letter-spacing: 0,3em}
H1#z98y {letter-spacing: 0,5em}
<P ID=z98y>Szles szveg</P>
Az fenti plda els esetben a kivlasztott formzst a 'P' elemhez feleltettk meg, az 'ID'
attribtumrtk segtsgvel. A msodik esetben ketts felttelt tmasztottunk: a formzs akkor
lp rvnybe, ha a H1 elemet a '#z98y' azonostval (ID) ltjuk el. Ezrt ez mr nem vonatkozik a
'P' elemre. Az ID attribtum szelektorknt val hasznlatval HTML elemekre alapozott
stlustulajdonsgok llthatak be.
sszekapcsolt szelektorok
Az rklds szablyai mentestik a stluslap tervezjt egy csom flsleges gpels all. A
tulajdonsgok belltsa sorn elg egyszer elkszteni az alaprtelmezettet, utna felsorolni a
kivteleket. Ha az 'EM' elemnek a 'H1' elemen bell ms sznt szeretnnk meghatrozni, azt a
kvetkezkpp tehetjk meg:
H1 {color: blue}
EM {color: red}
Mikor a stluslap aktv, minden kiemelt (<EM>) szvegrsz, akr a H1 elemen bell, akr azon
kvl tallhat, vrsre vltozik. Abban az esetben, ha csak egyszer akarjuk a H1 -en bell az EM
elemet vrsre sznezni, a CSS kdot az albbiak szerint kell megvltoztatni:
H1 EM {color: red}
sszekapcsolt szelektorok hasznlata esetn azok az elemek lesznek megcmezve, amelyek a
felsorolsban utoljra llnak. Teht akr kettnl tbb elem is 'egymsba gyazhat' ilyen mdon.
Megjegyzsek
A CSS kdban elhelyezett megjegyzsek hasonlak a C programnyelvben elhelyezett
megjegyzsekhez: A megjegyzsek nem gyazhatk egymsba, illetve ms CSS utastsba.
EM {color: red} /* A kiemelt szvegrsz vrs!*/
Rangsor
Ebben a fejezetben a terminolgia egy j elemt kell bevezetnnk: a "slyt". A stluslap-
szablyok slya jelzi, hogy az adott szably milyen prioritst lvez. Termszetszeren a nagyobb
sly szably ersebben rvnyesl, mint az alacsonyabb sllyal rendelkez.
CSS hasznlatval egyidejleg egynl tbb stluslap is befolysolhatja a HTML oldal
megjelenst. E tulajdonsgnak kt f oka van: a modularits s a szerz (tervez) / olvas -
egyensly.
Modularits A stluslap tervezje a redundancia cskkentse rdekben tbb stluslap
hasznlatt kombinlhatja:
@import url(http://www.style.org/egyik);
@import url(http://www.style.org/masik);
H1 {color: red} /* Fellbrlja az importlt stlust */
Szerz / olvas egyensly: Stluslappal a szerz s az olvas is befolysolhatja a
dokumentum megjelenst. Ehhez mindkettejknek ugyanazt a stlusnyelvet kell hasznlniuk,
gy tkrzve a web egyik alapvet tulajdosgt: mindenki kzzteheti elkpzelst. A
bngszk a sajt stluslapokra hivatkozs kivlasztst szabadon lehetv teszik.
Nha ellentt merl fel a dokumentum megjelenst meghatroz stluslapok kztt. Az ellentt
feloldst a stlusszablyok slyozsa teszi lehetv. Alaprtelmezsben az olvas ltal fellltott
stlusszablyok slya kisebb, mint a dokumentum szerzje ltal fellltottak. Teht, ha ellentt
merl fel egy dokumentum szerzi s olvasi stluslapja kztt, a szerzi stluslap kerl
alkalmazsra. Mind a szerzi, mind az olvasi stluslap-szablyok fellbrljk a bngsz
alaprtelmezett belltsait.
Az importlt stluslapok szintn jl meghatrozott rangsorban llnak egymssal. A rangsor az
albb meghatrozott szablyok szerint dl el. Brmely szably, amely a stluslapban van lerva,
ersebb, mint az importlt stluslap(ok)ban lev(k). Teht, az importlt stluslapokban lert
szablyok slya kisebb a stlusok rangsorban, mint a stluslapban magban lert szablyok. Az
importlt stluslapok maguk is rekurzvan importlhatnak s ezltal fellbrlhatnak ms
stluslapokat.
A CSS minden @import utastsnak a stluslap legelejn kell megjelennie, megelzve minden
ms deklarcit. Ez megknnyti annak tlthatsgt, hogy melyik stluslap melyik msikat
brlja fell.
'important'
A stluslapok tervezi deklarciik slyt megnvelhetik:
H1 {color: black ! important; background: white ! important }
P {font-size: 12pt ! important; font-style: italic }
Ebben a pldban az els hrom deklarci slya a fontos! kiemelssel meg van nvelve, mg az
utols deklarci slya norml. Egy olvas ltal fellltott fontos szably prioritsban megelzi a
szerz norml sly szablyt. A szerz ltal fellltott fontos szably prioritsban megelzi az
olvas ltal fellltott fontos szablyt.
A rangsor fellltsa
A deklarci-rangsor fellltsnak szablyai lnyegesek a CSS mkdsben. Egy
elem/tulajdonsg pros rtknek meghatrozshoz az albbi algoritmust kell kvetni:
1. A krdses elem/tulajdonsg prosra alkalmazott sszes deklarci elkeresse. A
deklarci akkor 'alkalmazott', ha a krdses elem szelektorknt szerepel. Ha nincs az
elemhez alkalmazott deklarci, az rkls szablyai rvnyeslnek. Ha nincs rklt
rtk (pl.: a HTML elem esetben), a kezdeti rtkek lesznek irnyadak.
2. A deklarcik explicit slya szerinti rendezs: az !important jells deklarcik
ersebbek, mint a jelletlen (norml) deklarcik.
3. Eredet szerinti rendezs: A szerz stluslapjban meghatrozott szablyok mint az olvas
ltal meghatrozottak; mindkett ersebb a bngsz alaprtelmezett belltsainl. Az
importlt stluslapok eredete megegyezik annak a stluslapnak az eredetvel, ahonnan
importltk.
4. Szelektor egyedisge szerinti rendezs: Az egyedileg meghatrozott szelektororhoz
tartoz szably ersebb, mint az ltalnos meghatrozsban lertak. Az egyedisg
megllaptshoz meg kell llaptani a szelektorban tallhat ID attribtumokat (a), a
CLASS attribtumokat (b), s a tag-nevek szmt (c). A hrom szm 'sszelncolsval'
(concatenating) llapthat meg az adott szelektor egyedisge. A knnyebb megrts
kedvrt nhny plda:
LI {...} /* a=0 b=0 c=1 => egyedisg = 1 */
UL LI {...} /* a=0 b=0 c=2 => egyedisg = 2 */
OL UL LI {...} /* a=0 b=0 c=3 => egyedisg = 3 */
LI.red {...} /* a=0 b=1 c=1 => egyedisg = 11 */
OL UL LI.red {...} /* a=0 b=1 c=3 => egyedisg = 13 */
#x34y {...} /* a=1 b=0 c=0 => egyedisg = 100 */
Formzsmodell
A CSS egy egyszer, dobozszer formzsi modellt hasznl., ahol minden elemformzs
eredmnye egy, vagy tbb ngyszgletes dobozknt kpzelhet el. Minden doboznak van egy
Blokkszint elemek
A kvetkez plda bemutatja, hogyan formzhet CSS hasznlatvel egy kt gyermek-elemet
tartalmaz UL elem. A plda egyszerstse okn szeglyeket nem definilunk. Szintn ez okbl
hasznljuk rtkekknt az ABC kis- s nagybetit, amelyek nem szabvnyos CSS
meghatrozsok, de ebben az esetben hasznlatuk megknnyti a tblzat s a pldastlus
sszevetst.
<STYLE TYPE="text/css">
UL {
background: red;
margin: A B C D;
padding: E F G H;
}
LI {
color: white;
background: blue; /* fehr szveg kk httren */
margin: a b c d;
padding: e f g h;
}
</STYLE>
...
<UL>
<LI>Els elem
<LI>Msodik elem
</UL>
Gyakorlatilag, a kitlts s a marg tulajdonsgai nem rkldnek. De, ahogy a plda is mutatja,
az elemek szlkhz s 'testvrekhez' (velk egyenrangakhoz) viszonytott elhelyezkedse
lnyeges, mert ezeknek az elemeknek kitlts- s margtulajdonsgai hatst gyakorolnak a
gyermek elemekre. Ha az elz pldban lettek volna szeglyek is, azokat a kitlts s a marg
kztt kellett volna megjelenteni.
A kvetkez bra a dobozmodell hasznlatakor rvnyes terminolgirl nyjt ttekintst:
A jellsek fordtsa szndkosan maradt el, ugyanis ugyanezek a kifejezsek szerepelnek a CSS
nyelvtanban is. Azok kedvrt, akik szmra az angol nyelv bizonyos nehzsget okoz, az
albbiakban rvid szszedetet tesznk kzz:
bottom - als
left - bal
top - fels
right - jobb
margin - marg
border - szegly
padding - kitlts
inner - bels
E kis kitr utn trjnk vissza a dobozmodellhez:
A bal kls l a formzott elem bal szle; a hozz tartoz kitltssel, szegllyel s margval. A
bal bels l pedig magnak a tartalomnak a szlt jelenti, kitlts, szegly s marg nlkl. A
jobb oldal ennek tkrkpe. Ugyanez a szably rvnyes az elem cscsra (top) s aljra
(bottom).
Egy elem szlessgn a tartalom szlessgt rtjk, vagyis a bal bels l s a jobb bels l kzti
tvolsgot. Az elem magassgn pedig a tartalom magassgt, azaz a rajzon inner top s inner
bottom kifejezssel jellt magassgok kzti tvolsgot.
Fggleges formzs
A nem 'lebeg' blokkszint elemek margszlessge hatrozza meg az t krlvev doboz szlei
kzti minimlis tvolsgot. Kt, vagy tbb sszevont szomszdos marg (rtsd: nincs kztk
szegly, kitlts, vagy tartalom) kzsen hasznlja a stluslapban meghatrozott legnagyobb
'margin' rtket. A legtbb esetben a fggleges margk sszevons utn vizulisan kellemesebb
ltvnyt nyjtanak, mint amit a tervez gondolt. Az elbbi pldban a kt LI elem kztti marg
van sszevonva, s kzsen hasznljk az els LI elem 'margin-bottom' s a msodik LI elem
'margin-top' tulajdonsga kzl a nagyobbat. Hasonlkppen; ha az UL elem s az els LI elem
kzti kitlts (padding - az E jel konstans) 0 rtk, az UL elem s az els LI elem kzti marg
sszevondik.
Vzszintes formzs
A nem 'lebeg' blokkszint elemek vzszintes pozcijt s mrett ht tulajdonsg hatrozza
meg: a 'margin-left', 'border-left', 'padding-left', 'width', 'padding-right', 'border-right', 'margin-
right'. Ezen tulajdonsgok rtkeinek sszege mindig megegyezik a szl elem 'width' rtkvel.
Alaprtelmezsben agy elem szlessgnek rtke 'auto'. Ha az elem nem helyettestett elem, a
szlessg rtkt a bngsz szmolja ki, a fent emltett ht tulajdonsg rtknek sszegzsvel.
Ha az elem helyettestett elem, 'width' tulajdonsgnak 'auto' rtke automatikusan kicserldik
az elem sajt szlessg-rtkre. A ht tulajdonsg kzl hromnak rtke llthat 'auto' -ra:
'margin-left', 'width', 'margin-right'. A 'width' tulajdonsgnak van egy nemnegatv, bngsz ltal
meghatrozott minimum rtke (amely elemenknt vltozik s mindig msik tulajdonsgtl
fgg). Ha a 'width' rtke e hatrrtk al kerl, akr azrt, mert gy lett belltva, vagy mert
rtke 'auto' volt s az albbi szablyok miatt vlt rtke tl alacsonny: rtke kicserldik a
minimumknt hasznlhat rtkkel. Ha pontosan egy 'margin-left', 'width', vagy 'margin-right'
rtke 'auto'; a bngsz ennek rtkt gy lltja be, hogy kiadja a fentebb felsorolt ht
tulajdonsghoz tartoz maradk rtket; amennyi szksges a szl elem szlessgnek
elrshez. Ha a tulajdonsgok kzl egyik sem 'auto'; a 'margin-right' tulajdosg rtke lesz
'auto'. Ha a hrombl egynl tbb 'auto' s kzlk egyik a 'width'; a tbbi tulajdonsg ('margin-
left's/vagy 'margin-right') rtke nullra lesz lltva, s a 'width' kapja meg azt az rtket,
amennyi szksges a szl elem szlessgnek elrshez. Abban az esetben, ha a 'margin-left',
s 'margin-right' tulajdonsgok vannak 'auto' -ra lltva, mindkett egyenl rtket kap. A
fggleges margkkal ellenttben, a vzszintes margk nem sszevonhatk.
Listaelemek
Azok az elemek, amelyek 'list-item' tulajdonsgnak rtke 'display', blokkszint elemekknt
formzdnak, s listajell elzi meg ket. A jell tpust a list-style tulajdonsg hatrozza
meg. A list-style tulajdonsg rtke szerint a jell elhelyezkedse az albbi lehet:
<STYLE TYPE="text/css">
UL {list-style: outside}
UL.compact {list-style: inside}
</STYLE>
<UL>
<LI>Els listaelem tartalma
<LI>Msodik listaelem tartalma
</UL>
<UL CLASS="compact">
<LI>Els listaelem tartalma
<LI>Msodik listaelem tartalma
</UL>
* Az els listaelem
tartalma
* A msodik listaelem
tartalma
Lebeg elemek
A 'float' tulajdonsg alkalmazsval egy elem elhelyezkedse meghatrozhat az elemek ltal
ltalban elfoglalt helyek oldals vonaln kvl is; ez esetben formzsuk mdja a blokkszint
elemekhez hasonl. Pldaknt: ha egy kp 'float' tulajdonsgt 'left' (bal) rtkre lltjuk be,
eredmnykppen a kp addig toldik balra, mg egy msik blokkszint elem margjt, kitltst,
vagy szeglyt el nem ri. Jobb oldaln a lap tbbi tartalma fogja krbefutni. Az elem margi,
szeglyei, kitltsei megmaradnak, de margi a szomszdos elem margival sosem lesznek
sszevonva. A lebeg elemek pozicionlsa a kvetkez szablyok szerint trtnik
1. Egy balra igaztott lebeg elem bal kls le nem lehet balrbb, mint szl eleme bal
bels le. A jobbra igaztott lebeg elemekre ugyanilyen szably rvnyes.
2. Egy balra igaztott lebeg elem bal kls lnek jobbra kell esnie brmelyik (a HTML
forrsban) korbban lert balra igaztott lebeg elemtl, vagy tetejnek kell lejjebb lennie,
mint az elbb lert aljnak. A jobbra igaztott lebeg elemekre ugyanilyen szably
rvnyes.
3. Egy balra igaztott lebeg elem jobb kls le nem eshet jobbra brmely tle jobbra es,
jobbra igaztott lebeg elem bal kls ltl. A jobbra igaztott lebeg elemekre
ugyanilyen szably rvnyes.
4. A lebeg elem teteje nem lehet magasabban, mint szl elemnek bels magassga (inner
top).
5. A lebeg elem teteje nem lehet magasabban, mint brmely korbbi lebeg, vagy
blokkszint elem teteje.
6. Egy lebeg elem teteje nem lehet magasabban, mint brmely 'sordoboz', amelynek
tartalma a HTML forrsban megelzi a lebeg elemet.
7. A lebeg elemet olyan magasra kell elhelyezni, amennyire csak lehet.
8. A balra igaztott lebeg elemet annyira balra kell elhelyezni, amennyire csak lehet; a
jobbra igaztott lebeg elemet pedig annyira jobbra kell elhelyezni, amennyire csak lehet.
Ez az igaztsi md elnyben rszesl a tbbi (ms) balra / jobbra igaztsi eljrssal
szemben.
<STYLE TYPE="text/css">
IMG {float: left}
BODY, P, IMG {margin: 2em}
</STYLE>
<BODY>
<IMG SRC="kep.gif">
Plda szveg, melynek nnincs ms szerepe, ...
</BODY>
A fenti pldaszveg formzsa a kvetkezkpp alakul:
Megjegyzs: a lebeg IMG elemet a P elem tartalmazza, teht jelen esetben az a szl elem.
Van kt olyan eset, amikor egy lebeg elemek marg-, szegly-, s kitlt terletei tfedhetik
egymst:
Amikor a lebeg elemnek negatv rtk margja van: a lebeg elem negatv margja gy
lesz figyelembe vve, mint ms blokkszint elem.
Amikor a lebeg elem szlesebb, vagy magasabb, mint az t tartalmaz elem.
Helyettestett elemek
A helyettestett elem olyan elem, amely megjelentsekor avval a tartalommal van helyettestve,
amelyre hivatkozsknt mutat. Pldul a egy HTML kdban szerepl IMG elem az SRC
attribtumban szerepl kppel lesz megjelnsekor helyettestve. Ilyenkor a helyettestett elemek
magukkal hozzk sajt mreteiket is. Ha a width rtke auto, az elem szlessgt
megjelentsekor sajt szlessge hatrozza meg. Ha stluslapon keresztl ms (nem auto) rtk
van meghatrozva, a helyettestett elem azzal az rtkkel kerl megjelentsre. (A mretezsi
eljrs a mdia tpustl fgg.) A height tulajdonsgra hasonl szablyok vonatkoznak.
Helyettestett elemek lehetnek soron belli, vagy blokkszint elemek is.
Sorok magassga
Minden elemnek van line-height, azaz sormagassg tulajdonsga, amely egy szvegsor teljes
magassgt adja meg. A szvegsor teljes magassgt a szveg s az al-fl elhelyezett res
helyek sszessge adja meg. Pldaknt: ha egy szveg 12pt magas, s a line-height rtke 14pt;
kt kppontnyi res hely addik hozz a betmrethez: egy kppont a sor fl, egy kppont al.
A betmret s a sormagassg kzti klnbsget vezetsnek nevezzk. A vezets-rtk fele a fl-
vezets. Formzskor minden szvegsor egy-egy sordobozknt rtelmezhet.
Ha a szvegsor egyes rszei klnbz magassg-rtkeket tartalmaznak (tbb klnbz soron
belli elem), akkor minden egyes rsznek megvan a maga sajt vezets-rtke is. A sordoboz
magassgt a legmagasabb rsz tetejtl a legmlyebbre r rsz legaljig mrjk.
Megjegyzend, hogy a 'legmagasabb' s a 'legmlyebb'rtkek nem szksgszeren tartoznak
ugyanazon elemhez, mivel az elemek fggleges pozicionlsa a vertical-align tulajdonsg
belltsval trtnik. Egsz bekezds formzsa esetn a minden sordoboz kzvetlenl az elz
al kerl. A nem helyettestett elemekhez tartoz als s fls kitltsek, szeglyek s margk
nem befolysoljk a sordoboz magassgt. Ms szval: ha a kivlasztott kitltshez, vagy
szeglyhez tartoz line-height tulajdonsg tl kicsi, a szomszdos sorok szvegei r fognak
takarni.
A sorban tallhat helyettestett elemek (pl.: kpek) megnvelhetik a sordoboz magassgt, ha a
helyettestett elem teteje (beletve a hozz tartoz kitltst, szeglyt, margt is) a legmagasabb
szvegrsz fl, illetve alja a legalacsonyabbra r szvegrsz al r.
ltalnos esetben, amikor amikor az egsz bekezdsnek egy line-height rtke van, s nincsenek
nagyobb mret kpek, a fenti szablylers biztosan meghatrozza, hogy a prhuzamos sorok
alapvonalai pontosan a line-height tulajdonsgban megadott rtkre legyenek egymstl.
A Vszon
A Vszon (CANVAS) a bngszfellet azon rsze, amelyre a dokumentum s begyazott
elemei kirajzoldnak. A vszon nem a dokumentum strukturl elemeinek felel meg, s ez a
dokumentum formzsa sorn kt fontos krdst vet fel.
A bellts sorn honnan szmtjuk a vszon mreteit?
Amikor a dokumentum nem fedi le az egsz vszont, az res terlet hogyan lesz
kirajzolva?
Az els krdsre adhat vlasz az, hogy a vszon kezdeti szlessge a bngszablak mretn
alapul, de a CSS a pontos mretbelltst a bngszre hagyja. sszer a bngszre hagyni a
vszon mretnek megvltoztatst az ablak tmretezsekor is, mert ez szintn kvl esik a CSS
hatkrn.
A HTML kiterjesztsei szolgltatnak pldt a msodik krds megvlaszolshoz: A BODY
elem attribtumai lltjk be a htteret; az egsz vszonra vonatkozan. A laptervezk
elvrsainak tmogatsra a CSS-ben bevezetsre kerlt egy, a vszon htterre vonatkoz
szably:
Ha a HTML elem background rtke nem transparent, akkor az kerl hasznlatba, egybknt
pedig a BODY elem background attribtuma.
Fenti szably hasznlat kzben a kvetkezkpp jelenhet meg:
<HTML STYLE="background: url(http://style.com/hatter.jpg)">
<BODY STYLE="background: red">
A pldban a vszont beterti a 'hatter.jpg' nev kp. A BODY elem httrszne pedig (amely
nem biztos, hogy teljesen lefedi a vszont), vrs lesz.
CSS tulajdonsgok
A stluslapok a dokumentumok megjelenst a stlustulajdonsgokhoz hozzrendelt rtkekkel
befolysoljk. Ez a fejezet bemutatja a definilt stlustulajdonsgokat, s az azokhoz rendelhet
rtkeket.
Font tulajdonsgok
A stluslapok leggyakoribb hasznlata a fonttulajdonsgok belltsa. Balszerencsre, nem ltezik
ltalnos rvny s szles kren elfogadott mdszer a bettpusok osztlyozsra, nincs
terminolgia, ugyangy alkalmazhatnnk a klnbz bettpus-csaldokra. (az 'italic' jelz
ltalnosan hasznlt a dlt szveg jelzsre, de a dlt betk jelezhetek az Oblique, Slanted,
Incline, Cursive, vagy Kursiv cmkkkel is.) Ezrt nem egyszer problma ltalnosan
hasznlhat tulajdonsgokat hozzrendelni egy meghatrozott bettpushoz. A CSS-ben a font-
family, font-style, font-variant, font-weight, font-size s font tulajdonsgok vannak lerva.
Bettpusok megfeleltetse
Mivel nem ltezik ltalnos rvny s szles kren elfogadott mdszer a bettpusok
osztlyozsra, a tulajdonsgok s betmegjelentsek sszeprostsa fokozott vatossgot
kvn. A tulajdonsgok megfeleltetse jl definilt sorrendben trtnik, hogy biztostva legyen a
konzisztencia a megfeleltetsi mvelet vgeredmnye s a bngsz kpessgei kztt.
1. A bngsz minden ltala ismert bettpushoz, kszt (vagy megnyit) egy adatbzist,
amely tartalmazza az alkalmazhat CSS tulajdonsgokat. A bngsz ismeri az elrhet
bettpusokat, mivel azok a helyi szmtgpre vannak teleptve. Ha kt bettpus is
megfelel ugyanannak a tulajdonsgnak, a bngsz az egyiket figyelmen kvl hagyja.
2. Egy adott elemnl, s az elem minden karakterre vonatkozan a bngsz sszegyjti az
elemhez alkalmazhat bettpus-tulajdonsgokat. A teljes tulajdonsg-kszlet
hasznlathoz a bngsz a font-family tulajdonsgot hasznlja, hogy kivlasszon egy
(ideiglenes) prba-fontcsaldot. A fennmarad tulajdonsgokat pedig a minden
tulajdonsgra lert megfeleltetsi kritrium szerint teszteli. Ha az sszes fennmarad
tulajdonsgot sikerlt megfeleltetnie, akkor megtallta a megfelel font-kinzetet az adott
elemhez.
3. Ha nincs a 2. lpsnek megfelel font-kinzet a font-family tulajdonsg rtkei kztt, de
van alternatv fontcsald az elrhet betkszletben, a msodik lpsben lert
megfeleltetsi eljrs azzal folytatdik.
4. Ha van megfelel kinzet font, de a kszlet nem tartalmazza az brzoland karaktert, s
van kvetkez alternatv font-csald; a msodik lps ismtldik.
5. Ha nincs megfelel font a 2. lpsben kivlasztott betkszlet-csaldban, a bngsztl
fgg alaprtelmezett betkszlet-csld kerl hasznlatba, s a bngsz azon bell
ismtli meg a 2. lpst, amg vgl megtallja az elrtnak legjobban megfelelt.
A tulajdonsgonknti megfeleltets szablyai (2. lps) a kvetkezk:
1. Az els keressi felttel a font-style. (Az 'italic' keressi felttel akkor megfelel, ha vagy
van a bngsz font-adatbzisban, amely megfelel a CSS 'italic', vagy 'oblique'
kulcsszava ltal meghatrozottaknak.)
2. A kvetkez megfeleltetsi felttel a 'font-variant'. 'normal' az a font, amely nincs 'small-
caps'-knt megjellve. 'small-caps' az a font, amely (1) gy van megjellve, (2) az a font,
amelyikbl a 'small-caps'-et ellltjk, vagy (3) az a font, amely esetben kisbetk
nagybetkkel vannak helyettestve. Kiskapitlis bettpust el lehet lltani elektronikus
ton is, norml fontbl, a nagybetk tmretezsvel.
3. A kvetkez megfeleltetsi felttel a 'font-weight'; ez sosem okozhat hibt (lsd a 'font-
weight' tulajdonsgot, lejjebb).
4. A 'font-size' tulajdonsg megfeleltetse a bngsz trshatrn trtnik. (ltalban, a
mretezhet fontok mretei a legkzelebbi egsz szm pixel rtkre vannak kerektve; a
bittrkpes fontok megjelentsnek trse 20% krl van.)
'font-family'
rtke lehet: [[<family-name>|<generic family>],]*[<family-name>|<generic family>]
Alaprtelmezs: Bngszfgg.
Alkalmazhat: Minden elemhez
rkldik: Igen
Szzalkos rtkek: Nincs rtelmezve
rtke elsbbsgi listja a fontcsald neveknek, s/vagy az ltalnos fontcsald-neveknek.
Eltren a legtbb ms CSS tulajdonsgtl, az rtkeket vesszvel kell elvlasztani, gy jelezve,
hogy azok alternatvk.
BODY {font-family: gill, helvetica, sans-serif}
A felsorolsban hasznlhat tpusok:
<family-name>
A vlasztott fontcsald neve. Fenti pldban fontcsald a 'gill' s a 'helvetica'.
<generic-family>
Fenti pldban az utols rtk az ltalnos fontcsald-nv. A kvetkez ltalnos fontcsald-
nevek vannak definilva:
serif; (pl: Times)
sans-serif (pl: Helvetica)
cursive (pl: Zapf-Chancery)
fantasy (pl: Western)
monospace (pl: Courier)
Az ltalnos fontcsaldok, mint vgs eset jhetnek szmtsba. A szkzket is tartalmaz
fontneveket idzjelbe kell tenni:
BODY {font-family: "new century schoolbook", serif}
'font-style'
rtke lehet:
normal | italic | oblique
Alaprtelmezs: normal
Alkalmazhat: Minden elemhez
rkldik: Igen
Szzalkos rtkek: Nincs rtelmezve
A 'font-style' tulajdonsg hasznlatval lehet egy fontcsaldbl kivlasztani a norml, vagy dlt
bets megjelenst (az 'italic' s az 'oblique' is dlt bett eredmnyez).
Az rtkek azokat a bettpusokat vlasztjk ki a bngsz fontadatbzisbl, amelyek az
rtknek megfelelen vannak megjellve. Ha 'italic' jells font nem elrhet, helyette az
'oblique' kerl hasznlatba. Az 'oblique' jells fontokat a bngsz futsidben is generlhatja;
egy norml (ll) font megdntsvel.
H1, H2, H3 {font-style: italic}
H1 EM {font-style: normal}
Fenti pldban a H1 elemen bell szerepl kiemelt (EM) szveg norml betkkel jelenik meg.
'font-variant'
rtke lehet:
normal | small-caps
Alaprtelmezs: normal
Alkalmazhat: Minden elemhez
rkldik: Igen
Szzalkos rtkek: Nincs rtelmezve
A fontcsaldon belli megjelentsvltozatok msik tpusa a kiskapitlis bettpus. A kiskapitlis
megjelentsnl a kibetk hasonltanak a nagybetkhz, csak mretk kisebb; arnyaikban
jelentktelen a klnbzsg.
A 'normal' rtk a bettpus norml alakjt, a 'small-caps' a kiskapitlis alakot vlasztja ki. A
CSS-ben elfogadhat (de nem megkvetelt), hogy a kiskapitlis betk kisbeti a norml
fontkszlet nagybetinek futsidej tmretezsvel legyenek kialaktva.
A kvetkez pldban tallhat utastsok eredmnyekppen a H3 elemben lev szveg
kiskapitlis betkel lesz megjelentve:
H3 {font-variant: small-caps}
'font-weight'
rtke lehet:
normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 |
800 | 900
Alaprtelmezs: normal
Alkalmazhat: Minden elemhez
rkldik: Igen
Szzalkos rtkek: Nincs rtelmezve
A 'font-weight' tulajdonsg vlasztja ki a bettpus slyt (megjelenst).
Az angol eredetiben a "weight" sz szerepel, a magyarban nincs igazn megfelel egy sz az itt
alkalmazott jelentsre: a bettpus vastagsga, sznintenzitsa. Ezrt megmaradtam a sz szerinti
fordtsnl: sly.
Alkalmazhat rtkei 100 - 900 -ig terjedhetnek, ahol minden egyes szm egy slyt jelez,
amelyek mindegyike sttebb az elznl. A normal kulcssz a '400'-as, a bold a 700 -as
rtknek felel meg.
P {font-weight: normal} /* 400 */
H1 {font-weight: 700} /* bold */
A bolder s lighter rtkek a szl elemtl rklt slyhoz viszonytva vlasztjk ki az
alkalmazand slyt.
STRONG {font-weight: bolder}
A tovbbi gyermek-elemek az gy eredmnyknt kapott rtket rklik, nem az eredetit.
A fontoknak (font adatoknak) jellemzen van egy, vagy tbbb tulajdonsguk, amelyeknek rtkei
a font "slyt" ler nevek. Ezeknek a neveknek nincs szleskren elfogadott, ltalnos rvny
jelentsk. Feladatuk elssorban az, hogy sly szerint megklnbztessk a fontcsaldon bell a
klnbz kinzet fontokat. Hasznlatuk klnbz fontcsaldok kztt meglehetsen vltoz.
Az a font, amit boldnak (flkvrnek) gondolhatnnk, az lersa szerint lehet, hogy Regular,
Roman, Book, Medium, Semi-, vagy Demi-bold, Bold, vagy Black, attl fggen, mennyire stt
a 'normal' font az adott fontcsaldban. Mivel a neveknek nincsenek mrtkad hasznlati
elrsaik, a CSS weight tulajdonsg-rtkei egy numerikus skln vannak megadva, ahol a
400-as, vagy normal rtk jelenti a fontcsald "normal" rtkt. Ez a slynv van
hozzrendelve ahhoz a kinzet fonthoz, amelynek neve ltalban Book, Regular, Roman, illetve
ritkbban Medium.
A fontcsaldon bell ms slyok hozzrendelse a numerikus rtkekhez az rnykolsi
(stttsi) sorrend megtartsval trtnik. A kvetkez mveleti sorrend megmutatja, hogy egy
tipikus esetben hogyan trtnik a slyok szmrtkhez rendelse.
Ha a fontcsald mr hasznl kilencrtk numerikus sklt, a hozzrendels kzvetlenl
trtnik.
Ha a fontcsaldban a medium rtk s a Book, Regular, Roman, Medium rtkek
ms slyt jelentenek, a medium rtkhez az 500 lesz hozzrendelve.
A boldknt jellt font leggyakrabban a 700-as rtket kapja.
Ha a fontcsaldban kevesebb, mint kilenc slyrtk van, a "lyukak" kitltsre a kvetkez
algoritmus hasznlatos: Ha az '500'-as rtk hozzrendels nlkli, ahhoz a fonthoz lesz
hozzrendelve, amelyikhez a '400'. Ha a '600', '700', '800', vagy '900'-as rtkek valamelyike
marad hozzrendels nlkl, ahhoz a fonthoz lesznek hozzrendelve, amelyiket a kvetkez
sttebbnek megfelel kulcssz kijell. Ha a '300', '200', vagy '100'-as rtkek valamelyike
marad hozzrendels nlkl, ahhoz a fonthoz lesznek hozzrendelve, amelyiket a kvetkez
vilgosabbnak megfelel kulcssz kijell.
A kvetkez plda mutatja ennek vgrehajtst. A 'Csald 1' fontcsaldban ngy slyt
feltteleznk, a vilgosabbtl a sttebb fel: Regular, Medium, Bold, Heavy. A 'Csald 2'
fontcsaldban 6 sly van: Book, Medium, Bold, Heavy, Black, ExtraBlack. Figyeljk meg, hogy a
'Csald 2 ExtraBlack' fonthoz nem rendelnk rtket.
Elrhet kinzetek | Hozzrendelt rtk | Kitlttt "lyukak"
--------------------+--------------------+--------------------
Csald 1 Regular | 400 | 100, 200, 300
Csald 1 Medium | 500 |
Csald 1 Bold | 700 | 600
Csald 1 Heavy | 800 |
--------------------+--------------------+--------------------
Csald 2 Book | 400 | 100, 200, 300
Csald 2 Medium | 500 |
Csald 2 Bold | 700 | 600
Csald 2 Heavy | 800 |
Csald 2 Black | 900 |
Csald 2 ExtraBlack | (nincs) |
Mivel a bolder s lighter relatv kulcsszavak clja a csaldon bell a fontok sttebben,
vagy vilgosabban trtn brzolsa, s mert a fontcsaldoknak nincs valamennyi slyrtkhez
fontja hozzrendelve, a bolder kulcssz hatsra a fontcsald kvetkez sttebb, a lighter
kulcssz hatsra a fontcsald kvetkez vilgosabb tagja kerl hasznlatba. A pontossg
kedvrt a bolder s lighter relatv kulcsszavak jelentse a kvetkez:
A bolder azt a slyt vlasztja ki, amelyik sttebb, mint az eredeti rklt rtk. Ha nincs
megfelel, ez egyszeren a kvetkez numerikus rtket jelenti (s a font vltozatlan marad).
Ha az rklt rtk '900' volt, az eredmnyl kapott sly is '900' lesz.
A lighter hasonlkppen jr el, csak ellenkez irnyban. A kvetkez vilgosabb
slyrtkhez tartoz kulcsszt vlasztja ki; ha nincs megfelel, a kvetkez vilgosabb
szmrtket (s a megjelentett font vltozatlan marad).
Nincs garantlva, hogy minden font-weight rtk hatsra az alkalmazott font sttebb lesz;
a fontcsaldok egy rszben csak norml s flkvr tpus van, mg ms fontcsaldok nyolc
klnbz slyrtkkel rendelkeznek. Nincs garantlva az sem, hogy a bngszk helyesen
rendelik egymshoz az ugyanahhoz a fontcsaldhoz tartoz fontokat a megfelel slyrtkekkel.
Az egyetlen garantlhat kvetkezmny az, hogy egy adott rtknl a font nem lesz kevsb
stt, mint egy vilgosabb rtknl.
'font-size'
rtke lehet: <abszolt mret> | <relatv mret> | <hossz> | <szzalk>
Alaprtelmezs: medium
Alkalmazhat: Minden elemhez
rkldik: Igen
Szzalkos rtkek: Viszonytsi alap a szl elem fontmrete
<abszolt mret>
Az abszolt mret egy indexet jelent a bngsz ltal nyilvntartott fontmret-tblzaton.
Lehetsges rtkei:
[xx-small | x-small | small | medium | large | x-large | xx-large].
A szomszdos indexek kztti klnbsg megjelentskori javasolt rtke 1,5-szrs; ha a
'medium' 10 pontos mretet jelent, a 'large' 15 pontos lesz. A klnbz mdiatpusokhoz
klnbz mretezsi faktorok szksgesek. A fontmret-tblzat a klnbz fontcsaldok
esetn klnbzhet egymstl.
<relatv mret>
A relatv mret a fontmret-tblzat s a szl elem vals fontmrete kztti arnyt veszi
figyelembe. Lehetsges rtkei:
[ larger | smaller ]
Ha a szl elem fontmrete 'medium' volt, a larger rtk az aktulis elem fontmretnek
rtkt large -ra lltja. Ha a szl elem fontmrett a bngsz fontmret-tblzata nem
tartalmazza, a bngsz helyettestheti a kvnt mretet a sorban kvetkezvel. A hossz s
szzalkos rtkek nem frhetnek hozz a fontmret-tblzathoz az elem aktulis fontmretnek
kiszmtsakor. Negatv rtkek hasznlata nem megengedett. A tbbi tulajdonsgnl, az 'em' s
'ex' mretrtkek az aktulis elem fontmretre hivatkoznak. A font-size tulajdonsg esetn
azonban ezek a mrtkegysgek a szl elem fontmrett veszik alapul. Pldk:
P {font-size: 12pt;}
BLOCKQUOTE {font-size: larger}
EM {font-size: 150%}
EM {font-size: 1,5em}
Ha a javasolt 1,5-szrs mretezsi faktor van hasznlatban, az utols hrom deklarci -
eredmnyt tekintve- megegyezik.
'font'
rtke lehet:
[<font-style> || <font-variant> || <font-weight>]?<font-size> [/<line-
height>]?<font-family>
Alaprtelmezs: Nincs definilva
Alkalmazhat: Minden elemhez
rkldik: Igen
Szzalkos rtkek: rtelmezhet a font-size s a line-height tulajdonsgokhoz.
A font tulajdonsg hasznlata gyors elrsi lehetsget biztost afont-style, font-variant, font-
weight, font-size, line-height, font-family tulajdonsgok belltshoz. Hasznlata a
hagyomnyos rvidutas tipogrfiai jelrendszer szablyain alapul.
A lehetsges s alaprtkek belltshoz lsd az elz bekezdsekben lert szablyokat. Azon
tulajdonsgok esetben, ahol rtk nincs belltva, azok alaprtelmezett rtkei kerlnek
hasznlatba.
P { font: 12pt/14pt sans-serif }
P { font: 80% sans-serif }
P { font: x-large/110% "new century schoolbook", serif }
P { font: bold italic large Palatino, serif }
P { font: normal small-caps 120%/120% fantasy }
A msodik szablyban a szzalkos mretrtk a szl elem fontmrett veszi alapul. A harmadik
szably sormagassgra vonatkoz szzalkos rtke magt az aktulis elemet veszi viszonytsi
alapul. Az els hrom szablyban a 'font-style', 'font-variant', 'font-
weight' tulajdonsgok nincsenek explicit mdon emltve, ezrt mindhrom tulajdonsg
alaprtelmezett rtkt ('normal') veszi fel. A negyedik szably a 'font-weight'
tulajdonsgot 'bold'-ra, a 'font-style' tulajdonsgot 'italic'-ra lltja, a 'font-
variant' pedig implicit mdon kapja meg a 'normal' rtket. Az tdik szably lltja be a
'font-variant' (small-caps), a font-size (a szl elem betmretnek 120%-a), a
'line-height' (a fontmret 120%-a) s a 'font-family' (fantasy) tulajdonsgokat.
Szn- s httrtulajdonsgok
Ezek a tulajdonsgok rjk le egy elem (gyakran eltrsznknt [foreground color] emltett) szn
s httrtulajdonsgait. A httr az a fellet, amelyre a tartalom kirajzolsra kerl. Ez lehet httr
szn, vagy httr kp. Szintn ezek a tulajdonsgok hasznlhatak nhny ms fontos
megjelentsi lehetsg belltshoz: httr-kp helyzete, legyen-e s hnyszor ismtelve, fix
legyen-e, vagy grdthet a vszonhoz kpest, stb...
A color tulajdonsg norml mdon rkldik. A httr tulajdonsgai nem rkldnek, de az
egyes szl elemek htterei ttnnek az alaprtelmezett httrrtken, mivel a background-
color alaprtelmezett rtke a transparent.
'color'
rtke lehet: szn
Alaprtelmezs: Bngszfgg.
Alkalmazhat: Minden elemhez
rkldik: Igen
Szzalkos rtkek: Nincs rtelmezve
Ez a tulajdonsg rja le egy elemhez tartoz szveg sznt; gyakran eltrsznknt (foreground
color) trtnik rla emlts. Egy szn rtknek meghatrozsa tbfle mdon trtnhet:
EM { color: red }
EM { color: rgb(255,0,0) }
EM { color: #FF0000 }
Fenti hrom deklarci mindegyike az EM elem szveghez a vrs sznt rendeli hozz. Az els
esetben a szn nevt rtuk le, a msodik s harmadik esetben a szn RGB kdjt; elszr
decimlisan, az utols esetben hexadecimlisan.
'background-color'
rtke lehet: <szn> | transparent
Alaprtelmezs: transparent
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ez a tulajdonsg lltja be egy elem httrsznt.
H1 { background-color: red }
H1 { background-color: rgb(255,0,0) }
H1 { background-color: #FF0000 }
'background-image'
rtke lehet: <url> | none
Alaprtelmezs: none
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ez a tulajdonsg lltja be egy elem htterknt lthat kpet. Egy httr-kp belltsakor
bellthat httr-szn is, amely akkor lthat, ha a kp nem elrhet. Ha a kp megjelenthet, a
httrsznt el fogja takarni.
BODY { background-image: url(hatter.gif) }
P { background-image: none }
'background-repeat'
rtke lehet: repeat |
repeat-x | repeat-y |
no-repeat
Alaprtelmezs: repeat
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ha van httr-kp belltva, a 'background-repeat' tulajdonsggal llthat be, hogy
legyen-e s hnyszor legyen ismtelve a kivlasztott kp.
A repeat rtk azt jeleni, hogy a kp vzszintesen s fgglegesen egyarnt ismtldni fog. A
repeat-x (repeat-y)rtk felels a kp vzszintes (fggleges) ismtldsrt; gy egy
kisebb mret httrkpbl a kperny egyik oldaltl a msikig r sv llthat el.
BODY
{
background: red url(hatter.gif);
background-repeat: repeat-y;
}
Fenti pldban a httrkp fgglegesen ismtldik.
'background-attachment'
rtke lehet: scroll | fixed
Alaprtelmezs: scroll
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ha van belltott httrkp, a 'background-attachment' rtke hatrozza meg, hogy fixen
marad-e, vagy a tartalommal egytt grdthet.
BODY
{
background: red url(hatter.gif);
background-repeat: repeat-y;
background-attachment: fixed;
}
A bngszk nha a fixed rtket is scroll-nak rtelmezik. A W3C ajnlsa azt tartalmazza, hogy a bngszk
a fixed rtket rtelmezzk helyesen, legalbb a HTML s a BODY elemek vonatkozsban, mivel a weblapok
szerzinek nincs arra lehetsgk, hogy kln htteret vlasszanak csak a gyemgbb kpessg bngszk szmra.
'background-position'
rtke lehet:[<szzalkos> | <hossz>]{1,2}|[top | center | bottom]|| [left |
center | right]
Alaprtelmezs: 0% 0%
Alkalmazhat: Blokkszint- s helyettestett elemekhez
rkldik: Nem
Szzalkos rtkek: Viszonytsi alap a formzott elem
Ha van belltott httr-kp, a 'background-position' rtke hatrozza meg annak
betltdskor elfoglalt helyzett. A 0% 0% rtkpr hasznlatval a kp az elemet krbefog
doboz bal fels sarkba kerl. (Nem a margt, szeglyt, kitltst tartalmaz dobozrl van sz.) A
100% 100% rtkpr a kp jobb als sarkt azelem jobb als sarkba helyezi. A 14% 84%
rtkpr a kpet az elemen vzszintesen a 14%-ot jelent ponttl fgglegesen a 84%-ot jelent
pontig helyezi el.
A 2cm 2cm rtkpr a kpet az elem bal fels sarktl 2 cm-re balra s 2 cm-re lefel helyezi el.
Ha csak egy szzalkos, vagy hosszsgrtk van megadva, az csak a vzszintes pozcit lltja
be, a fggleges pozci rtke 50% lesz. Kt rtk megadsa esetn a vzszintes pozcira
vonatkoz rtket kell elszr megadni. A hosszsg- s szzalkos rtkek kombincija
megengedett (50% 2cm). Megengedett a negatv rtkek hasznlata is.
A httrkp helyzetnek belltshoz hasznlhatk kulcssz-rtkek is. A kulcsszavak nem
kombinlhatk a hosszsg- s szzalkos rtkekkel. A hasznlhat kulcssz-kombincik s
rtelmezsk:
Kulcsszavak | rtelmezsk
-------------------------------------------+--------------
'top left' s 'left top' | 0% 0%
'top', 'top center', 'center top' | 50% 50%
'right top', 'top right' | 100% 0%
'left' 'left center', 'center left' | 0% 50%
'center', 'center center' | 50% 50%
'right', 'right center', center right' | 100% 50%
'bottom left', 'left bottom' | 0% 100%
'bottom', 'bottom center', 'center bottom' | 50% 100%
'bottom right', 'right bottom' | 100% 100%
-------------------------------------------+--------------
Pldk:
BODY {background: url(hatter.gif) right top
BODY {background: url(hatter.gif) top center
BODY {background: url(hatter.gif) center
BODY {background: url(hatter.gif) bottom
Ha a httr-kp rgztve van a vszonhoz, az elem elhelyezshez a mretek viszonytsa nem az
elemhez, hanem a vszonhoz trtnik.
'background'
rtke lehet: <background-color> || <background-image> || <background-repeat> || <background-
attachment> || <background-position>
Alaprtelmezs: Nincs definilva
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Hasznlhat a <background-position> tulajdonsghoz.
A background egy n. gyorstulajdonsg, amellyel egy helyrl llthat be az sszes httrre
vonatkoz tulajdonsg. Hasznlhat rtkei megegyeznek az egyedi httr-tulajdonsgok sszes
rtkeivel.
BODY {background: red}
P {background: url(hatter.jpg) gray 50% repeat fixed}
A background tulajdonsg mindig belltja az sszes egyedi tulajdonsgot. Az els pldban csak
a httr-szn lett belltva, a tbbi tulajdonsg alprtelmezett rtkeit kapja. A msodik pldban
az sszes egyedi tulajdonsg kapott kezdrtket.
Szveg tulajdonsgok
'word-spacing'
rtke lehet: normal | hossz
Alaprtelmezs: normal
Alkalmazhat: Minden elemhez
rkldik: Igen
Szzalkos rtkek: Nincs rtelmezve
A megadott hosszsgrtk jelzi, hogy mennyivel nvelend meg a szavak kztti
alaprtelmezett szkz rtke. rtke lehet negatv, de lehetnek megvalsts-fgg korltozsok.
A bngsz szabadon vlaszthatja meg a megfelel szkzrtk-kiszmtsi algoritmust. A
szkz mrtke fgghet a szveg igaztstl is (ez a text-align tulajdonsg rtkeivel llthat
be).
H1 { word-spacing: 1em }
Fenti pldban a H1 elemen bell a szkz rtke 1em rtkkel megnvelt. A bngszk a
word-spacing brmely rtkt rtelmezhetik normal-knt.
'letter-spacing'
rtke lehet: normal | hossz
Alaprtelmezs: normal
Alkalmazhat: Minden elemhez
rkldik: Igen
Szzalkos rtkek: Nincs rtelmezve
A megadott hosszsgrtk jelzi, hogy mennyivel nvelend meg a betk kztti alaprtelmezett
kz rtke. rtke lehet negatv, de lehetnek megvalsts-fgg korltozsok. A bngsz
szabadon vlaszthatja meg a megfelel betkzrtk-kiszmtsi algoritmust. A betkz mrtke
fgghet a szveg igaztstl is (ez a text-align tulajdonsg rtkeivel llthat be).
BLOCKQUOTE { letter-spacing: 0,1em }
Fenti pldban a BLOCKQUOTE elemen bell a betkz rtke 0,1em rtkkel megnvelt. Ha a
belltott rtk a normal, a bngsz szabadon llthatja be a betkzt, a szveg igaztsnak
megfelelen. Ez nem trtnik meg, ha a letter-spacing tulajdonsg rtkt explicit mdon
adjuk meg:
BLOCKQUOTE { letter-spacing: 0 }
BLOCKQUOTE { letter-spacing: 0cm }
A bngszk a letter-spacing brmely rtkt rtelmezhetik normal-knt.
'text-decoration'
rtke lehet: none |[underline||overline||line-through||blink ]
Alaprtelmezs: none
Alkalmazhat: Minden elemhez
rkldik: Nem, de lsd a rszletezst albb
Szzalkos rtkek: Nincs rtelmezve
Ez a tulajdonsg rja le egy elem szvegnek megjelentsekor alkalmazhat dekorcikat (nincs,
alhzott, flhzott, thzott, villog). Ha az elem res (<EM></EM>), vagy nem tartalmaz
szveget (IMG), a tulajdonsg nem eredmnyez lthat hatst. A blink rtk hatsra a szveg
villog.
A szvegdekorci szneit a color tulajdonsg rtkeivel kell belltani.
Ez a tulajdonsg nem rkldik, de az elemek sszeillenek szl elemeikkel. Teht; ha egy elem
alhzott, az alhzs meg fog jelenni a gyermek elemnl is. Az alhzs szne ugyanaz marad
akkor is, ha a leszrmazott elem color tulajdonsgnak rtke ms.
A:link, A:active, A:visited { text-decoration: underline }
A fenti plda az sszes link szvegt (link minden A elem, amelynek HREF attribtuma van). A
bngszknek fel kell ismernik a blink kulcsszt, de nem ktelesek tmogatni a villogtatst.
'vertical-align'
rtke lehet: baseline|sub|super|top|text-top|middle|bottom|text-
bottom|<szzalkos>
Alaprtelmezs: baseline
Alkalmazhat: Soron belli elemekhez
rkldik: Nem
Szzalkos rtkek: Viszonytsi alap az elem line-height tulajdonsga
Ez a tulajdonsg az elem fggleges pozicionlst befolysolja. rtkkszletnek egy csoportja
a szl elemhez viszonylik:
baseline - az elem alapvonalra igazt (vagy az aljra, ha a szl elemnek nincs
alapvonala);
middle - az elem fggleges kzppontjra igazt (ltalban kp esetn);
sub - az elem als indexe;
super - az elem fels indexe;
text-top - az elem tetejhez igazt, a szl elem betinek tetejhez;
text-bottom - az elem aljhoz igazt, a szl elem betinek aljhoz.
Az rtkkszlet msik csoportja a formzott sorhoz viszonylik:
top - az elem tetejhez igazt, a sor legmagasabb elemvel egy vonalba;
bottom - az elem aljhoz igazt, a sor legmlyebben lev elemvel egy vonalba;
A szzalkos rtkek viszonytsi alapja az elem line-height tulajdonsga. Ez a tulajdonsg felel
az elem alapvonalnak (baseline) holltrt (vagy az elem aljnak elhelyezkedsrt, ha az
elemnek nincs alapvonala). Negatv rtkek megengedettek (a -100% lesllyeszti az elemet
annyira, hogy az elem alapvonala a kvetkez sor alapvonalhoz r. Ez az olyan elemek
fggleges igaztsnak is klnsen pontos belltst teszi lehetv, amelyeknek nincs
alapvonaluk [kpek]).
'text-transform'
rtke lehet: capitalize|uppercase|lowercase|none
Alaprtelmezs: none
Alkalmazhat: Minden elemhez
rkldik: Igen
Szzalkos rtkek: Nincs rtelmezve
capitalize - Minden sz els karaktert nagybetss alaktja;
uppercase - Az elem sszes betjt nagybetss alaktja;
lowercase - Az elem sszes betjt kisbetss alaktja;
none - Hatstalantja az rklt rtket.
Az aktulis transzfomci minden esetben nyelvfgg.
H1 { text-transform: uppercase }
A H1 elemben lev szveget nagybetss alaktja.
A bngszk figyelmen kvl hagyhatjk a text-transform tulajdonsgot, ha azok a
karakterek, amelyikre alkalmazni kellene, nem a Latin-1 karakterkszletbl valk.
'text-align'
rtke lehet: left|right|center|justify
Alaprtelmezs: Bngszfgg
Alkalmazhat:Blokkszint elemekhez
rkldik: Igen
Szzalkos rtkek: Nincs rtelmezve
Ez a tulajdonsg rja le a szveg igaztst az elemen bell. Az aktulis igaztsi algoritmust a
bngsz nyelvfggen alkalmazza.
DIV.center { text-align: center }
Mivel a text-align rkldik, a DIV elemen belli sszes CLASS="center"
attribtummal elltott blokkszint elem kzpre lesz igaztva. Megjegyzend, hogy az igazts
viszonytsa nem a vszonhoz, hanem az elemhez trtnik. Ha a justify rtket a bngsz
nem tmogatja, ltalban a left rtkkel helyettesti.
'text-indent'
rtke lehet: hossz | szzalkos
Alaprtelmezs: 0 (nulla)
Alkalmazhat: Blokkszint elemekhez
rkldik: Igen
Szzalkos rtkek: Viszonytsi alap a szl elem szlessge
Ez a tulajdonsg hatrozza meg a formzott sor behzst. rtke negatv is lehet, de lehetnek
megvalstsbeli korltozsok. Behzs nem helyezhet el olyan elem belsejbe, ahol valamilyen
trs (pl.: BR) mr van.
P {text-indent: 3em }
'line-height'
rtke lehet: normal | szm | hossz | szzalkos
Alaprtelmezs: normal
Alkalmazhat: Minden elemhez
rkldik: Igen
Szzalkos rtkek: Viszonytsi alap az elem fontmrete
Ez a tulajdonsg lltja be a kt szomszdos sor alapvonalnak tvolsgt. Ha numerikus rtk
van meghatrozva, a sormagassgot a fontmret s a szm szorzata adja meg. Ez a megolds a
szzalkos rtkmegadstl az rkldsben klnbzik: szmrtk megadsakor a leszrmazott
elemek magt a szmot rklik, nem az eredmnyt. Negatv rtkek nem alkalmazhatak. A
kvetkez pldban szerepl hrom deklarci eredmnye ugyanaz a sormagassg:
DIV { line-height: 1,2; font-size: 10pt } /* szmrtk */
DIV { line-height: 1,2em; font-size: 10pt } /* hossz */
DIV { line-height: 120%; font-size: 10pt } /* szzalkos */
A normal rtk a line-height tulajdonsg rtkt az alkalmazott fonthoz kpest sszer
mretre lltja be.
Doboz-tulajdonsgok
A doboz-tulajdonsgok az elemeket reprezentl dobozok mrett, kerlett s helyzett lltjk
be. A marg-tulajdonsgok lltjk be az elemhez tartoz margkat. A margin tulajdonsg
minden oldalra vonatkozik, mg a tbbi marg-tulajdonsg csak csak a sajt margikra van
hatssal. A kitlts-tulajdonsgok rjk le, mekkora hely legyen a szegly s az elem tartalma
kztt. A padding tulajdonsg minden oldalra vonatkozik, mg a tbbi kitlts-tulajdonsg
csak csak a sajt oldalon lv kitltsre van hatssal. A szegly-tulajdonsgok lltjk be az
elemhez tartoz szeglyeket. Minden elemnek ngy szeglye van, minden oldalon egy-egy,
amelyek szlessgkkel, sznkkel, stlusukkal vannak lerva. A width s height
tulajdonsgok lltjk be a doboz mrett; a float s clear tulajdonsgok az elem pozcijt
vltoztathatjk.
'margin-top'
rtke lehet: hossz | szzalkos | auto
Alaprtelmezs: 0
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Viszonytsi alap a legkzelebbi blokkszint szlelem
Ez a tulajdonsg lltja be az elem fls margjt:
H1 { margin-top: 2em }
Negatv rtk hasznlata engedlyezett, de lehetnek megvalstsbeli korltozsok.
'margin-right'
rtke lehet: hossz | szzalkos | auto
Alaprtelmezs: 0
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Viszonytsi alap a legkzelebbi blokkszint szlelem
Ez a tulajdonsg lltja be az elem jobb oldali margjt:
H1 { margin-right: 2em }
Negatv rtk hasznlata engedlyezett, de lehetnek megvalstsbeli korltozsok.
'margin-bottom'
rtke lehet: hossz | szzalkos | auto
Alaprtelmezs: 0
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Viszonytsi alap a legkzelebbi blokkszint szlelem
Ez a tulajdonsg lltja be az elem als margjt:
H1 { margin-bottom: 2em }
Negatv rtk hasznlata engedlyezett, de lehetnek megvalstsbeli korltozsok.
'margin-left'
rtke lehet: hossz | szzalkos | auto
Alaprtelmezs: 0
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Viszonytsi alap a legkzelebbi blokkszint szlelem
Ez a tulajdonsg lltja be az bal oldali margjt:
H1 { margin-left: 2em }
Negatv rtk hasznlata engedlyezett, de lehetnek megvalstsbeli korltozsok.
'margin'
rtke lehet: [hossz | szzalkos | auto]{1,4}
Alaprtelmezs: Nincs definilva
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Viszonytsi alap a legkzelebbi blokkszint szlelem
A margin tulajdonsg egy 'gyorstulajdonsg', amelynek segtsgvel egy deklarcin bell
llthat be a margin-top, margin-right, margin-bottom s a margin-left
tulajdonsg rtke. Ha rtkknt ngy szmrtket adunk meg, annak rtelemzsi sorrendje
mindig a fels => jobb als => bal. Ha csak egy rtk van megadva, az mind a ngy oldalra
vonatkozik, ha kett, vagy hrom: a szemben lv rtkek meg fognak egyezni.
BODY { margin: 2em }
BODY { margin: 1 em 2em }
BODY { margin: 1em 2em 3em }
Fenti pldk kzl a legals -hatst tekintve- a kvetkezvel megegyezik:
BODY {
margin-top: 1em;
margin-right: 2em;
margin-bottom: 3em;
margin-left: 2 em; /* megegyezik a szembeni oldal rtkvel */
}
Negatv marg-rtkek engedlyezettek, de lehetnek megvalstsbeli korltozsok.
'padding-top'
rtke lehet: hossz | szzalkos
Alaprtelmezs: 0
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Viszonytsi alap a legkzelebbi blokkszint szlelem
Ez a tulajdonsg lltja be egy elem fls kitltst.
BLOCKQUOTE { padding-top: 0,3em }
Negatv kitlts-rtk nem megengedett.
'padding-right'
rtke lehet: hossz | szzalkos
Alaprtelmezs: 0
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Viszonytsi alap a legkzelebbi blokkszint szlelem.
Ez a tulajdonsg lltja be egy elem jobb oldali kitltst
BLOCKQUOTE { padding-right: 0,3em }
Negatv kitlts-rtk nem megengedett.
'padding-bottom'
rtke lehet: hossz | szzalkos
Alaprtelmezs: 0
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Viszonytsi alap a legkzelebbi blokkszint szlelem
Ez a tulajdonsg lltja be egy elem als kitltst
BLOCKQUOTE { padding-bottom: 0,3em }
Negatv kitlts-rtk nem megengedett.
'padding-left'
rtke lehet: hossz | szzalkos
Alaprtelmezs: 0
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Viszonytsi alap a legkzelebbi blokkszint szlelem
Ez a tulajdonsg lltja be egy elem bal oldali kitltst
BLOCKQUOTE { padding-left: 0,3em }
Negatv kitlts-rtk nem megengedett.
'padding'
rtke lehet: [hossz | szzalkos]{1,4}
Alaprtelmezs: Nincs definilva
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Viszonytsi alap a legkzelebbi blokkszint szlelem
A padding tulajdonsg egy 'gyorstulajdonsg', amelynek segtsgvel egy deklarcin bell
llthat be a padding-top, padding-right, padding-bottom s a padding-left
tulajdonsg rtke. Ha rtkknt ngy szmrtket adunk meg, annak rtelemzsi sorrendje
mindig a fels => jobb als => bal. Ha csak egy rtk van megadva, az mind a ngy oldalra
vonatkozik, ha kett, vagy hrom: a szemben lv rtkek meg fognak egyezni.
A kitltfellet megadsa a background tulajdonsggal:
H1 {
background: white;
padding: 1em 2em;
}
Fenti plda 1em rtk kitltst llt be fgglegesen (fent s lent), s 2em rtk kitltst llt be
vzszintesen (jobb- s baloldalt). AZ em rtk magyarul a -szorosnak felel meg. Viszonytsi
alapja az elem fontmrete. Az 1em (egyszeres) megegyezik a hasznlt font magasgval.
A kitltsi rtkek nem lehetnek negatvak.
'border-top-width'
rtke lehet: thin | medium | thick | hossz
Alaprtelmezs: medium
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ez a tulajdonsg lltja be egy elem fls szeglyt. A kulcsszavakhoz tartoz tnyleges rtkek
bngszfggk, de a kvetkez sorrend mindenkppen rvnyben marad: thin (vkony)
medium (kzepes) thick (vastag)
H1 { border: solid thick red }
P { border: solid thick blue }
A fenti plda szerint a H1 s a P elemek ugyanolyan szeglyt kapnak, fggetlenl a fonmrettl.
Relatv szlessg elrshez az em hasznlhat:
H1 { border: solid 0,5em }
A szeglyszlessgek nem kaphatnak negatv rtket.
'border-right-width'
rtke lehet: thin | medium | thick | hossz
Alaprtelmezs: medium
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ez a tulajdonsg lltja be egy elem jobb oldali szeglyt. Hasznlata megegyezik a border-top-
width tulajdonsg hasznlatval.
'border-bottom-width'
rtke lehet: thin | medium | thick | hossz
Alaprtelmezs: medium
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ez a tulajdonsg lltja be egy elem als szeglyt. Hasznlata megegyezik a border-top-width
tulajdonsg hasznlatval.
'border-left-width'
rtke lehet: thin | medium | thick | hossz
Alaprtelmezs: medium
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ez a tulajdonsg lltja be egy elem bal oldali szeglyt. Hasznlata megegyezik a border-top-
width tulajdonsg hasznlatval.
'border-width'
rtke lehet: [thin | medium | thick | hossz]{1,4}
Alaprtelmezs: Nincs definilva
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
A border-width tulajdonsg egy 'gyorstulajdonsg', amelynek segtsgvel egy deklarcin
bell llthat be a border-width-top, border-width-right, border-width-
bottom s a border-width-left tulajdonsg rtke.
Ngy rtke lehet, a kvetkez rtelmezsban:
Egy megadott rtk: - Mind a ngy szegly a megadott rtket kapja;
Kt megadott rtk: - Az els rtk a fls s als szeglyekre, a msodik rtk a bal sa
jobb szeglyre vonatkozik;
Hrom megadott rtk: - Az els rtk a fls, a msodik a jobb s bal, a harmadik az
als szeglyre vonatkozik;
Ngy megadott rtk: - Fls, jobb, als s bal oldali szeglyekre vonatkozik, a felsorols
sorrendjben.
A kvetkez pldban a megjegyzsben rt rtkek jelzik a szeglyek vastagsgt:
H1 {border-width: thin } /* thin thin thin thin */
H1 {border-width: thin thick } /* thin thick thin thick */
H1 {border-width: thin thick medium } /* thin thick medium thin */
H1 {border-width: thin thick medium thin } /* thin thick medium thin */
A szeglyek szlessge nem vehet fel negatv rtket.
'border-color'
rtke lehet: szn{1,4}
Alaprtelmezs: A color tulajdonsg rtke
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
A border-color tulajdonsg a ngy szegly sznt lltja be. Ngy rtke lehet, az rtkek a
klnbz oldalak szneit lltjk be, ahogyan azt a border-width tulajdonsgnl lertuk.
Ha nincs sznrtk meghatrozva, helyt az elem color tulajdonsga veszi t.
P {
color: black;
background: white;
border: solid
}
Fenti pldban az elem szeglye vkony, fekete vonal lesz.
'border-style'
rtke lehet:
none|dotted|dashed|solid|double|groove|ridge|inset|outset
Alaprtelmezs: none
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
A border-style tulajdonsg lltja be a ngy szegly stlust. Ngy rtke lehet, az rtkek a
klnbz oldalak szneit lltjk be, ahogyan azt a border-width tulajdonsgnl lertuk.
#b14 { border-style: solid dotted }
Fenti plda szerint a vzszintes szeglyek stlusa solid, a fggleges szeglyek pedig dotted
(pontvonal) lesz. Mivel a szeglystlusok alaprtelmezs szerinti belltsa none, kln belltott
rtkek nlkl az elemeknek nem lesz lthat szeglye.
A szeglystlusok a kvetkezket jelentik:
none - Nincs kirajzolt szegly (tekintet nlkl a border-width tulajdosg rtkre);
dotted - A szegly pontozott vonallal lesz kirajzolva az elem htterre;
dashed - A szegly szaggatott vonallal lesz kirajzolva az elem htterre;
solid - A szegly folytonos vonallal lesz kirajzolva az elem htterre;
double - A szegly ketts vonallal lesz kirajzolva az elem htterre. A kt vonal sszes
szlessge s a kztk lev kz megegyezik a border-width rtkvel;
groove - A szegly 3D sllyesztett hatst keltve lesz kirajzolva;
ridge - A szegly 3D dombor hatst keltve lesz kirajzolva
inset - A szegly 3D bekelt stlust keltve lesz kirajzolva;
outset - A szegly 3D kiemelt hatst keltve lesz kirajzolva;
'border-top'
rtke lehet: border-top-width||border-style||szn
Alaprtelmezs: Nincs meghatrozva
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ez a 'gyorstulajdonsg' egy elem fls szeglye szlessgnek, stlusnak s sznnek belltsra
szolgl.
H1 { border-top: thick solid red }
Fenti pda a H1 elem fls szeglynek vastagsgt, vonaltpust s sznt lltja be. A
felsorolsbl kihagyott rtkek alaprtelmezskkel lesznek helyettestve.
H1 { border-top: thick solid }
Mivel ebben a pldban a szn nem szerepel, a szegly szne megegyezik az elem szeglynek
sznvel.
'border-right'
rtke lehet: border-top-width||border-style||szn
Alaprtelmezs: Nincs meghatrozva
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ez a 'gyorstulajdonsg' egy elem jobb oldali szeglye szlessgnek, stlusnak s sznnek
belltsra szolgl. Hasznlata megegyezik a border-top tulajdonsgval.
'border-bottom'
rtke lehet: border-top-width||border-style||szn
Alaprtelmezs: Nincs meghatrozva
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ez a 'gyorstulajdonsg' egy elem als szeglye szlessgnek, stlusnak s sznnek belltsra
szolgl. Hasznlata megegyezik a border-top tulajdonsgval.
'border-left'
rtke lehet: border-top-width||border-style||szn
Alaprtelmezs: Nincs meghatrozva
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ez a 'gyorstulajdonsg' egy elem bal oldali szeglye szlessgnek, stlusnak s sznnek
belltsra szolgl. Hasznlata megegyezik a border-top tulajdonsgval.
'border'
rtke lehet: border-width||border-style||szn
Alaprtelmezs: Nincs meghatrozva
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
A border tulajdonsg egy 'gyorstulajdonsg', amelynek segtsgvel egy deklarcin bell
llthat be a border-top, border-right, border-bottom s a border-left
tulajdonsg rtke.
A kvetkez pldban mutatott els deklarci eredmnye megegyezik a msodik deklarci
eredmnyvel:
P { border: solid red }
P {
border-top: solid red
border-right: solid red
border-bottom: solid red
border-left: solid red
}
Eltren a margin s padding tulajdonsgoktl, a border tulajdonsg nem tud klnbz
rtkeket belltani a klnbz oldalakhoz. Ehhez a tbbi szeglytulajdonsgot kell hesznlni.
'width'
rtke lehet: hossz | szzalkos | auto
Alaprtelmezs: auto
Alkalmazhat: Blokkszint elemekhez s helyettestett elemekhez
rkldik: Nem
Szzalkos rtkek: Viszonytsi alap a szl elem szlessge
Ez a tulajdonsg ltalban szveg-elemekhez hasznlatos, de igen hasznos a helyettestett
elemeknl (pl.: kpek) is. Ezen a mdon megadhat egy elem szlessge. Az elemek
mretezsnl az oldalak arnya vltozatlan marad, ha a height tulajdonsg rtke auto.
IMG.icon { width: 100px }
Ha a width s a height tulajdonsg rtke is auto; az elem sajt eredeti mretvel jelenik
meg. Negatv rtkek nem alkalmazhatk. A width tulajdonsg s a marg, valamint a kitlts
kztti kapcsolat lersrt lsd a formzsmodell fejezetet.
'height'
rtke lehet: hossz | auto
Alaprtelmezs: auto
Alkalmazhat: Blokkszint elemekhez s helyettestett elemekhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ez a tulajdonsg ltalban szveg-elemekhez hasznlatos, de igen hasznos a helyettestett
elemeknl (pl.: kpek) is. Ezen a mdon megadhat egy elem szlessge. Az elemek
mretezsnl az oldalak arnya vltozatlan marad, ha a width tulajdonsg rtke auto.
IMG.icon { height: 100px }
Ha a width s a height tulajdonsg rtke is auto; az elem sajt eredeti mretvel jelenik
meg. Negatv rtkek nem alkalmazhatk. Ha az elem, amelyre alkalmazzuk nem helyettestett
elem, a bngszk figyelmen kvl hagyhatjk a height tulajdonsgot (auto rtkkel
helyettestik).
'float'
rtke lehet: left | right | none
Alaprtelmezs: none
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelemzve
Ha none rtkt alkalmazzuk, az elem ott jelenik meg, ahol a szvegben az t beilleszt kdsor
tallhat. Ha rtke left (right); az elem a bal- (jobb-) oldalon fog megjelenni, s a szveg a
jobb (bal) oldaln fog krbefutni. Ha rtke left, vagy (right); az elem blokkszintknt
viselkedik.
IMG.icon {
float: left;
margin-left: 0;
}
Fenti plda az sszes 'icon' osztlyba tartoz IMG elemet a szl elem bal oldalra helyezi el. A
float tulajdonsgot leggyakrabban soron belli kpekhez hasznljuk, de jl alkalmazhat
szveges elemekhez is.
'clear'
rtke lehet: none | left | right | both
Alaprtelmezs: none
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ez a tulajdonsg hatrozza meg, hogy elem melyik oldaln engedlyezi lebeg elemek
megjelenst. Pontosabban: E tulajdonsg rtkei soroljk fel azokat az oldalakat, ahol lebeg
elemek nem jelenhetnek meg. Ha a clear rtke leftre van belltva, az elem, amelyre
alkalmaztuk, a bal oldaln lev brmely lebeg elem al kerl.
H1 { clear: left }
Osztlyoz tulajdonsgok
Ezek a tulajdonsgok soroljk az elemeket kategrikba, ezenkvl belltjk megjelentsi
tulajdonsgaikat is. A felsorols-tulajdonsgok rjk le, a listaelemek formzsi elrsait. A
felsorols-tulajdonsgok minden elemhez alkalmazhatak s norml mdon rkldnek a
leszrmazsi fastruktrn. Mindamellett megjelentsi hatst csak a listaelemekre gyakorolnak. A
HTML-ben tipikusan ide tartoznak a LI elemek.
'display'
rtke lehet: block | inline | list-item | none
Alaprtelmezs: block
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ez a tulajdonsg hatrozza meg, hoy egy elem legyen-e, s hogyan legyen brzolva a
megjelentn (a megjelent lehet kperny, nyomtatsi termk, stb...).
Egy block rtkkel rendelkez elem j dobozt kap. A doboz elhelyezst s a szomszdos
dobozokhoz viszonytott helyzett a formzsmodell hatrozza meg. ltalban, a H1, vagy P
jelleg elemek block-tpusak. A list-item rtk hasonlt a blockhoz, kivve, ha
listajell is van hozzadva. A HTML-ben tipikusan ilyen (listajellvel elltott) elem a LI.
Egy inline rtkkel rendelkez elem soron belli dobozt kap, ugyanabban a sorban, mint az t
megelz tartalom. A doboz mretezse formzott tartalmnak mrete szerint trtnik. Ha
tartalma szveg, sorokra oszthat, s minden sornak kln doboza lesz. A marg-, szegly-, s
kitlts-tulajdonsgok hasznlatosak az inline elemekhez, a sortrsnl nincs lthat hatsuk.
A none rtk hasznlata kikapcsolja az elem megjelentst, belertve leszrmazott elemeit s az
t krlvev dobozt is.
P { display: block }
EM { display: inline }
LI { display: list-item }
IMG { display: none }
A legutols definci kikapcsolja a kpek megjelentst.
A display tulajdonsg alaprtelmezett rtke a block; de minden bngsz rendelkezik
alaprtelmezett rtkekkel minden HTML elemre vonatkozan, amely a HTML specifikciban
rt javasolt megjelentsen alapul.
A bngszk figyelmen kvl hagyhatjk a display tulajdonsgot, a stluslap szerzje ltal
definilt helyett hasznlhatjk sajt alaprtelmezett rtkeiket is.
'white-space'
rtke lehet: normal | pre | nowrap
Alaprtelmezs: normal
Alkalmazhat: Blokkszint elemekhez
rkldik: Igen
Szzalkos rtkek: Nincs rtelmezve
Az angol 'whitespace' kifejezsre nem talltam egy magyar szt; krlrva: a szavak, mondatok
kztti res kzt jelenti, ami nem azonos a szkzkkel. A tovbbiakban -egyb megegyezs
hjn- kzknt fogom emlteni.
Ez a tulajdonsg rja le, hogyan legyenek rtelmezve a kzk egy elemen bell: normal mdon
(amikor a kzk egy szkzz vannak tmrtve), pre-knt (gy viselkedjen, mint a PRE a
HTML-ben), vagy nowrap mdon (a sortrs BR elemhez hasonl mdon):
PRE { white-space: pre }
P { white-space: normal }
A white-space tulajdonsg alaprtelmezse a normal, de a bngszknek ltalban minden
HTML elemhez van alaprtelmezett rtkk, a HTML specifikciban lert elemkirajzolsi
elrsok szerint.
A bngszk figyelmen kvl hagyhatjk a display tulajdonsgot, a stluslap szerzje ltal
definilt helyett hasznlhatjk sajt alaprtelmezett rtkeiket is.
'list-style-type'
rtke lehet: disc|circle|square|decimal|lower-roman| upper-roman|lower-
alpha|upper-alpha|none
Alaprtelmezs: disc
Alkalmazhat: display: list-item tulajdonsg-rtk prral rendelkez elemekhez
rkldik: Igen
Szzalkos rtkek: Nincs rtelmezve
E tulajdonsg hasznlatval hatrozhat meg a listajell megjelense, ha a list-style-
image tulajdonsg rtke none, vagy a kp, amelyre a benne szerepl hivatkozs mutat, nem
elrhet.
OL { list-style-type: decimal } /* 1 2 3 4 stb... */
OL { list-style-type: lower-alpha } /* a b c d stb... */
OL { list-style-type: lower-roman } /* i ii iii stb... */
'list-style-image'
rtke lehet: <url> | none
Alaprtelmezs: none
Alkalmazhat: display: list-item tulajdonsg-rtk prral rendelkez elemekhez
rkldik: Igen
Szzalkos rtkek: Nincs rtelmezve
Ez a tulajdonsg lltja be azt a kpet, ami listaelem-jellknt alkalmazhat. Ha a kp elrhet,
helyettesteni fogja a list-style-type tulajdonsgban belltott jellt.
UL { list-style-image: url(images/styleimage.gif) }
'list-style-position'
rtke lehet: inside | outside
Alaprtelmezs: outside
Alkalmazhat: display: list-item tulajdonsg-rtk prral rendelkez elemekhez
rkldik: Igen
Szzalkos rtkek: Nincs rtelmezve
A list-style-position rtke hatrozza meg a lista-jell pozcijt a tartalomhoz
kpest.
'list-style'
rtke lehet: [disc|circle|square|decimal|lower-roman|upper-roman|lower-
alpha|upper-alpha|none] || [inside|outside] || [url|none]
Alaprtelmezs: Nincs definilva
Alkalmazhat: display: list-item tulajdonsg-rtk prral rendelkez elemekhez
rkldik: Igen
Szzalkos rtkek: Nincs rtelmezve
A list-style tulajdonsg egy 'gyorstulajdonsg', amelynek segtsgvel a list-style-
type, a list-style-image s a list-style-position tulajdonsgok rtkei
llthatk be.
UL { list-style: upper-roman inside }
UL UL { list-style: circle outside }
LI.square { list-style: square }
A LI elemre kzvetlenl belltott list-style tulajdonsg nem vrt eredmnyt hozhat.
Tekintsnk egy pldt:
<STYLE TYPE="text/css">
OL.alpha LI {list-style: lower-alpha }
UL LI {list-style: disc }
</STYLE>
<BODY>
<OL CLASS="alpha">
<LI>1. szint
<UL>
<LI>2. szint
</UL>
</OL>
</BODY>
Mivel a fenti pldban az els defincinak nagyobb az egyedisge, fell fogja brlni a msodik
definci elrsait s csak a lower-alpha felsorols-stlus fog rvnyeslni. Ezrt csak a
felsorols jelleg elemeknl ajnlott belltani a list-style tulajdonsgot.
OL.alpha { list-style: lower-alpha }
UL { list-style: disc }
Fenti pldban az OL s UL elemekre belltott rtkek -hla az rkldsi szablyoknak-
vonatkozni fognak a LI elemekre is.
Egysgek
Hosszsg egysgek
A hosszsgrtkek meghatrozott formtuma egy opcionlis +, vagy - jelbl (alaprtelmezett a
+), az azt kzvetlenl kvet szmbl s a szmot kzvetlenl kvet egysg-azonostbl
(annak ktbets rvidtsbl) ll. A 0 (nulla) szm utn az egysg-azonost opcionlis. Nhny
tulajdonsg hasznlatnl engedlyezett a negatv rtk hasznlata, de ez bonyolthatja a
formzsmodellt s lehetnek megvalstsbeli korltozsai is. Ha egy negatv rtk nincs
tmogatva, az a legkzelebbi tmogatptt rtkkel lesz helyettestve. A hosszsg-egysgeknek
kt tpusa hasznlhat: a relatv s az abszolt. A relatv egysgek e mretet egy msik
hosszsg-tulajdonsghoz viszonytva adjk meg. Azok a stluslapok, amelyek a mreteket
relatvan adjk meg, knnyebben sklzhatk egyik mdiatpusrl a msikra (pl.: szmtgp
kpernyrl nyomtatra). A szzalkos egysgek (lsd albb) hasonl elnyket knlnak fel.
A kvetkez relatv egysgek hasznlhatk:
H1{ margin: 0,5em } /* -szoros, az elem fontmret-magassghoz kpest */
H1{ margin: 1ex } /* x-magassg, az 'x' bez magassghoz kpest */
P { font-size: 12px }/* pixelben, a vszonhoz kpest */
Az em s ex rtkek az elem fontmrethez viszonyulnak. E szably all az egyetlen kivtel a
font-size tulajdonsg, ahol az em s ex rtkek a szl elem fontmrethez viszonytandk.
A pixel egysgek (ahogy a plda mutatja) a vszon (leggyakrabban szmtgp-kperny)
felbontshoz viszonyulnak. Ha a kimeneti eszkz pixelsrsge nagyban klnbzik a
szmtgp kpernyjtl, a megjelent eszkz1 tszmolja a pixelrtkeket. A javasolt
referencia pixel mrete egy pixel lthat szge az olvas ember karhosszsgban lev 90 dpi
pixelsrsg eszkzn. Egy tlagos karhosszsgot 71 cm-nek (28 inch) vve, egy pixel
0,0227 alatt ltszik.
A gyermek elemek nem a relatv, hanem a szmtott rtket rklik:
BODY {
font-size: 12pt;
text-indent: 3em; /* rtsd: 36pt */
}
H1 { font-size: 15pt }
Fenti pldban a H1 elemek text-indent tulajdonsgnak rtke 36pt lesz, nem pedig 45pt.
Az abszolt hosszsgegysgeket csak akkor rdemes hasznlni, ha a kiviteli eszkz fizikai
tulajdonsgai ismertek. A kvetkez abszolt egysgek tmogatottak:
H1 { margin: 0,5in } /* inch; 1 inch = 2.54 cm */
H2 { line-height: 3cm } /* centimter */
H3 { word-spacing: 4mm }/* millimter */
H4 { font-size: 12pt } /* pont; 1 pt = 1/72 inch */
H4 { font-size: 1pc } /* pica; 1 pc = 12 pt */
Abban az esetben, ha a meghatrozott mret nem tmogathat, a bngszk megprbljk
hozzvetlegesen megkzelteni.
Szzalkos egysgek
A szzalkos rtkek meghatrozott formtuma egy opcionlis +, vagy - jelbl (alaprtelmezett a
+), az azt kzvetlenl kvet szmbl s a szmot kzvetlenl kvet % jelbl ll. A szzalkos
egysgek mindig valamely ms egysgre vonatkoznak, ez leggyakrabban hosszsg-egysg.
Minden tulajdonsgnl, amelyeknl szzalkos egysgek alkalmazhatk, meg van hatrozva,
hogy a szzalkos egysg mire hivatkozik. A hivatkozsi alap leggyakrabban az adott elem
fontmrete.
P { line-height: 120% } /* Az elemnl alkalamazott 'font-size' 120%-a */
Minden rklt CSS tulajdonsgnl, ha rtke szzalkosan van megadva, a leszrmazott elemek
a szmtott rtket rklik, nem a szzalkosat.
Sznjellsek
A sznek meghatrozsa trtnhet a szn nevvel, vagy numerikusan, a szn RGB kdjval. A
javasolt sznmegnevezsek a kvetkezk: aqua, black, blue, fuchsia, gray,
green, lime, maroon, navy, olive, purple, red, silver, teal,
white s yellow. Ez a 16 szn tallhat a Windows VGA palettjn, RGB rtkk nincs
meghatrozva ebben a specifikciban.
BODY { color: black; background: white }
H1 { color: maroon }
H2 { color: olive }
Az RGB modell szmszer sznmeghatrozsokat hasznl. A kvetkez pldk ugyanazt a sznt
eredmnyezik.
EM { color: #f00 } /* #rgb */
EM { color: #ff0000 } /* #rrggbb */
EM { color: rgb(255,0,0) } /* egsz szmok: 0 - 255 */
EM { color: rgb(100%,0%,0%) } /* szzalkos : 0% - 100% */
Az RGB rtkek hexadecimlis formtuma: egy # karakter, amelyet kzvetlenl kvet vagy
hrom, vagy hat hexadecimlis karakter. A hromszmjegyes RGB kifejezsek (#rgb)
hatszmjegyes formba (#rrggbb) a szmjegyek ismtlsvel, nem 0-k (nullk) hozzadsval
konvertlhatk. (Teht a #b0 kifejtve #bb00) Ez biztostja, hogy a fehr (#ffffff) meghatrozhat
legyen rvid formban is (#fff), fggetlentve a megjelent eszkz sznmlysgtl. Az RGB
rtkek funkcionlis formtuma: az rgb karkterlnc, amelyet kzvetlenl kvet a hrom
sznrtk vesszvel elvlasztott felsorolsa (vagy hrom egsz szm 0 - 255 rtkhatron bell,
vagy hrom szzalkos kifejezs 0% - 100% rtkhatron bell). A megadott rtkhatrokon
kvli szmrtkek nem rtelmezhetek, csonktva lesznek. A kvetkez hrom deklarci
rtelmt tekintve megegyezik.
EM { color: rgb(255,0,0) } /* egsz szmok: 0 - 255 */
EM { color: rgb(300,0,0) } /* csonktva 255 -re */
EM { color: rgb(110%,0%,0%) } /* csonktva 100% -ra */
URL
Az URL rvidts a Uniform Resource Locator kifejezst takarja, amelynek magyar megfelelje:
Egysges Erforrs Helymeghatrozs.
BODY { background: url(images/hatter.jpg) }
Az URL kifejezs formja: url kulcssz, amelyet kzvetlenl kvet zrjelben ( ( ) )
opcinlisan egyszeres, vagy ktszeres idzjelek ( ', " ) kz zrva maga az URL. Relatv URL
megadsakor az elrsi utat nem a dokumentumhoz kell viszonytani, hanem a stluslaphoz.
sszhang
Egy bngsz, amely egy dokumentum megjelentshez CSS-t hasznl, akkor felel meg a CSS
specifikci ltal tmasztott kvetelmnyeknek, ha:
Elr el minden hivatkozott stluslapot s specifikcijuk szerint rtelmezi ket;
A deklarcikat a rangsor fejezetben lert rangsor szerint rendezi;
A CSS funkcionalitst a megjelent eszkz korltai kz tudja illeszteni.
Egy bngsz akkor felel meg a CSS specifikciban megfogalmazott stluslap-
kvetelmnyeknek, ha:
kimenete rvnyes CSS stluslap.
Egy bngsz, amely egy dokumentum megjelentshez CSS-t hasznl, s kimenete stluslap,
akkor felel meg a CSS specifikcinak ha a fentiekben emltett mindkt kvetelmnycsoportot
kielgti.
Egy bngsz sem tudja teljesteni a CSS valamennyi lehetsges funkcijt: a bngszk akkor
felelnek meg a CSS tmasztotta kvetelmnyeknek, ha az alapvet funkcikat kpesek teljesteni.
Az alapvet funkcik a teljes CSS specifikcibl llnak, kivve azokat a rszeket, amelyek
kifejezetten kivtelknt szerepelnek. Azokat a funkcikat, amelyek nem tartoznak a CSS alapvet
funkcii kz, tovbbfejlesztett (advanced) funkciknak nevezzk.
Pldk a megjelent eszkz korltaira: Korltozott erforrsok (fontok, sznek), korltozott
felbonts (a margk nem jelennek meg helyesen). Ezekben az esetekben a bngsz csak
megkzelti a stluslap elrsait. Vannak bngszk, amelyek lehetv teszik a felhasznl
szmra a megjelents megvlasztst.
Elre-kompatbilis elemzs
Ez a lers a CSS 1-et mutatja be. Elre lthatan a ksbi verzik tbb j tulajdonsgot
vezetnek be. Ez a fejezet azt mutatja be, hogy mit tesznek a bngszk, ha olyan deklarcival
tallkoznak, amelyek a CSS jelen kiadsban nem rvnyesek.
Az ismeretlen tulajdonsgot tartalmaz deklarcikat figyelmen kvl hagyjk. Pldul;
ha a stluslap a
H1 { color: red; rotation: 70deg }
deklarcit tartalmazza, a bngsz gy veszi figyelembe, mintha csak a
H1 { color: red }
deklarcit tartalmazta volna.
Az rvnytelen rtkeket, vagy rvnytelen rszeket tartalmaz rtkeket a bngsz
szintn figyelmen kvl hagyja, a kvetkezk szerint:
IMG { float: left} /* CSS-nek megfelel */
IMG { float: left top } /* a 'top' nem rtke a 'float'-nak
*/
IMG { background: "red" } /* a kulcsszavak nem kerlhetnek
idzjelbe */
IMG { border-width: 3 } /* hinyzik a mrtkegysg */
Fenti pldban a bngsz csak az els deklarcit rtelmezi, gy a stluslap tnyleges
tartalma:
IMG { float: left}
IMG { }
IMG { }
IMG { }
Figyelmen kvl hagyja a bngsz az rvnytelen at (@) kulcsszavakat is, minden
egybbel, ami kveti, egszen a kvetkez pontosvesszig (;), vagy kapcsos zrjel-prig
({ }). Pldakpp ttelezzk fel, hogy a stuslap a kvetkezket tartalmazza:
@three-dee
{
@background-lightning:
{
azimuth: 30deg;
elevation: 190deg
}
H1 { color: red }
}
H1 { color: blue }
Mivel a @three-dee a CSS szerint rvnytelen, gy az egsz deklarci a harmadik
jobb kapcsos zrjelig (}) bezrlag rvnytelen. A bngsz egyszeren kihagyja, a
stluslap rtelmezhet rsze a kvetkez lesz:
H1 { color: blue }
Rszletesebben:
Egy CSS stluslap, brmely verzijban kszlt is, utastsok sorozatt tartalmazza. Az
utastsoknak kt fajtja van: az at elrsok s az elrskszletek. Az utastsok krl lehetnek
kzk (whitespace) is (tabultor-, szkz-, ujsor-karakterek).
A CSS utastsok gyakran a HTML dokumentumba vannak begyazva; megvan a lehetsg arra,
hogy ezeket az utastsokat elrejtsk a rgebbi bngszk ell. Erre a clra a HTML szabvny
'megjegyzs' (comment) jele szolgl: <-- Megjegyzs --> - a kt jel kz rand a CSS
utastssor.
Az at-elrsok egy azonostknt szerepl at-kulcsszval kezddnek, amely eltt kzvetlenl
egy at, vagyis @ karakter ll (pl.:@import, @page). Az azonost tartalmazhat betket,
szmjegyeket s ms karaktereket (lsd albb). Egy at-elrs tartalma az els pontosvesszig
(;), vagy a kvetkez blokkig tart. Ha egy bngsz olyan at-elrssal tallkozik, amely nem az
@import kulcsszval kezddik, figyelmen kvl hagyja az egsz at-elrst s az elemzst a
kvetkez utastssal folytatja. Szintn figyelmen kvl hagyja az @import kulcsszt is, ha az
nem a stluslap legelejn tallhat.
@import "stilus.css"
H1 { color: blue }
@import "masikstilus.css"
Fenti pldban a msodik @import utasts a CSS1 szerint rvnytelen. A CSS rtelmez
kihagyja az egsz at-elrst, a stluslapot a kvetkezkppen rtelmezi:
@import "stilus.css"
H1 { color: blue }
Egy blokk nyit kapcsos zrjellel ({) kezddik s a neki megfelel zr kapcsos zrjelig (})
tart. Kzztk brmely egyedi karakter elfordulhat, a zrjelek (( )), kapcsos zrjelek ({ })
s szgletes zrjelek ([ ]) kivtelvel, amelyek a blokkon bell csak prban fordulhatnak el.
A fent emltett karakterek kz zrt utastsok egymsba gyazhatk. Az egyszeres (') s dupla
(") idzjelek szintn prban fordulhatnak el; a kzjk zrt karakterlnc szvegknt lesz
rtelmezve. A kvetkezkben bemutatunk egy pldt a blokk rtelmezsre. Figyeljk meg, hogy
az idzjelek kztt szerepl zr kapcsos zrjel nem prja a nyit kapcsos zrjelnek, valamint
a msodik egyszeres idzjel (') egy 'fgg' karakter, nem prja a nyit idzjelnek:
{ causta: "}" + ({7} * '\'') }
Egy elrskszlet egy szelektorbl s a hozz tartoz deklarcikbl ll. A szelektorknt
rtelmezend karakterlnc az els nyit kapcsos zrjelig ({) tart (de azt nem foglalja magba).
Azt az elrskszletet, amely nem rvnyes CSS szelektorral kezddik, a bngszk figyelmen
kvl hagyjk. Ttelezzk fel, hogy egy stluslap a kvetkezkpp nz ki:
H1 { color: blue }
P[align], UL { color: red; font-size: large }
P EM { font-weight: bold }
Fenti plda msodik sora rvnytelen CSS szelektort tartalmaz, a bngsz a kvetkezkpp
fogja rtelmezni:
H1 { color: blue }
P EM { font-weight: bold }
Egy deklarcis blokk egy nyit kapcsos zrjellel ({) kezddik s a hozz tartoz zr kapcsos
zrjrlig (}) tart. Kztk 0 (nulla), vagy tbb, pontosvesszvel (;) elvlasztott deklarci llhat.
Egy deklarci egy tulajdonsgnvbl, kettspontbl (:) s egy tulajdosg-rtkbl ll.
Mindegyik krl lehet kz (whitespace). A tulajdonsgnv egy (a korbban lertaknak megfelel)
azonost. A tulajdonsg-rkben brmely karakter szerepelhet, de a zrjelek (( )), kapcsos
zrjelek ({ }), szgletes zrjelek ([ ]), egyszeres (') s dupla (") idzjelek csak prban
fordulhatnak el. A zrjelek, szgletes zrjelek s kapcsos zrjelek egymsba gyazhatk. Az
idzjelek kztt tallhat karakterek szvegknt lesznek rtelmezve.
Annak rdekben, hogy a jvben meglev tulajdonsgokhoz j tulajdonsgokat s rtkeket
lehessen hozzadni, a bngszknek figyelmen kvl kell hagyniuk brmely rvnytelen
tulajdonsgnevet, vagy tulajdonsg-rtket. Valamennyi CSS1 tulajdonsg csak akkor fogadhat
el rvnyesnek, ha megfelel a nyelvtani s szemantikai elrsoknak. Pldaknt lssuk a
kvetkez stluslap elrst:
H1 { color: red; font-style: 12pt }
P { color: blue; font-vendor: any; font-variant: small-caps }
EM EM { font-style: normal }
Az els sor msodik deklarcijban a '12pt' rvnytelen rtk. A msodik sor msodik
deklarcijban a 'font-vendor' definilatlan tulajdonsg. A CSS rtelmez ezeket a deklarcikat
kihagyja, gy a stluslapot a kvetkezkpp fogja rtelmezni:
H1 { color: red }
P { color: blue; font-variant: small-caps }
EM EM { font-style: normal }
Megjegyzsek brhova beilleszthetk, ahol kzk (whitespace) elfordulhatnak. A CSS definil
ezenkvl mg helyeket, ahol kzk elfordulhatnak s megjegyzsek berhatk. A kvetkez
szablyok mindig betartandk:
Minden CSS stluslap kis-nagybet rzketlen, kivve a stluslap azon rszeit, amelyeket
nem a CSS vezrel (pl.: a fontcsald nevek s az url-ek kis-, s nagybet rzkenyek. A
CLASS s ID attribtumok a HTML felgyelete alatt llnak.)
A CSS1-ben a szelektorok (elemnevek, ostlyok s ID-k) csak a kvetkez karaktereket
tartalmazhatjk: a-z, A-Z, 0-9, az Unicode karaktereket 161-255 -ig, valamint a ktjelet
(-); nem kezddhetnek ktjellel, vagy szmjeggyel; tartalmazhatnak 'fgg'
karaktereket, s brmely numerikus kddal jellt Unicode karaktert (lsd a kvetkez
pontot).
A 'balper' jel (\) utn kvetkez legfeljebb ngy hexadecimlis szmjegy (0..9A..F) egy
Unicode karaktert jelent.
Brmely karakter - hexadecimlis szmot kivve - megfoszthat specilis jelentstl, ha
el egy 'balper' jelet helyeznk. Plda: "\"" - szveg, amely egy dupla idzjelet
tartalmaz.
JavaScript
Mi is az a JavaScript?
A JavaScript egy objektum alap programozsi nyelv, melyet a Netscape fejlesztett ki eredetileg
LiveScript nven. A LiveScript s a Java tvzsbl alakult ki a JavaScript, melyet elszr a
Netscape Navigator 2.0-ban implementltak. Sokan nevezik a nyelvet objektum orientltnak, ami
azonban nem teljesen igaz, hiszen olyan alapvet tulajdonsgok, mint pldul az rklds,
hinyoznak belle. A JavaScript a Java appletektl s a Java programoktl eltren futsidben
kerl rtelmezsre. Teht a bngsz letlti az oldalt, megjelenti a tartalmt, majd rtelmezi a
JavaScript (vagy ms nyelven rt scriptek) sorait. Mr most fontos leszgezni, hogy a JavaScript
nem Java! Szintaktikjban s felptsben ugyan nagyon hasonlt a nevt ad proramozsi
nyelvre, azonban lehetsgei sokkal korltozottabbak.
JavaScript s a bngszk
Mivel a JavaScript interpretlt nyelv, a programunk csak az oldal betltsekor fog lefutni, addig a
HTML kd sorai kztt pihen. Ennek a megoldsnak az az elnye, hogy a hibs programsorokat
knnyedn tudjuk javtani, htrnya viszont az, hogy a fradtsgos munkval megrt scriptnkhz
brki hozzfrhet, aki megtekinti oldalunkat. Ha egy programot a bngsz futtat, annak vannak
pozitv s negatv tulajdonsgai is. Elnyknt rtkelhet az, hogy a scriptnk platformfggetlen
lesz, teht ugyangy fog futni egy Macintosh gp bngszjben, mint a sokat dicsrt Windows-
os krnyezetben. Htrnyai kz sorolhat viszont az, hogy a script hibtlan futtatsa - a
szabvnyok tbbfle rtelmezsnek ksznheten - ersen a hasznlt bngsz tpusnak
fggvnye. Jelents eltrsek fedezhetk fel mr csak Windows-os bngszk JavaScript
implementciinak sszehasonltsa sorn is. Nzznk csak meg egy Internet Explorer 5.0-ra
optimalizlt oldalt Netscape, vagy Opera bngszkkel! J esetben csak nhny funkci nem
mkdik az oldalon, mskor azonban az egsz weblap mkdskptelenn vlhat. Tovbbi
problmk merlhetnek fel, ha oldalunk ltogatja olyan bngszt hasznl, mely nem tmogatja,
vagy nem ismeri a JavaScriptet, br ennek valsznsge manapsg igen kicsi. E bngszk
ugyanis hajlamosak arra, hogy a szmukra rtelmezhetetlen utastsokat egyszeren megjelentik,
mintha az a weblap szvegnek rsze lenne, elcsftva s feltrva ezzel gondosan elksztett
oldalunkat. Hogy ezt elkerljk az utastsainkat a HTML kd megjegyzsei kz kell
beillesztennk: a "<!--" s "-->" szekvencik kz. Az jabb bngszket nem zavarja ez a kis
csalafintasg, a HTML szabvnyt pontosan kvet rgebbi vltozatok pedig nem zavarodnak
ssze tle, mert egyszeren kommentknt rtelmezik a valjban script-kdot tartalmaz
oldalrszeket. A fentiek miatt nagyon fontos, hogy szem eltt tartsuk a kvetkez dolgokat:
scripteket csak korltozott mrtkben alkalmazzunk, s lehetleg gy, hogy azt tbb bngsz
segtsgvel is kiprbljuk. A msik dolog, hogy ha amennyiben lehetsg van r, alkalmazzunk
statikus HTML megoldsokat a feladatok elltsra s szerver-oldali ellenrzseket a bemen
adatok validlsra arra az esetre, ha a JavaScript kdunk ezt a feladatot a bngsz vezrija
s/vagy belltsai miatt nem kpes elvgezni. Hogy egy kicsit rthetbb legyen: ha script
segtsgvel automatikusan tirnytunk egy oldalt egy msikra (ksbb lerjuk hogyan), akkor
tegynk az oldalra egy linket is, amelyik a msik oldalra vezet, azon bngszk szmra, akik
nem rtik a JavaScriptet. A problmk egy rsze ugyan a bngsz azonostsval (szintn
ksbb) elkerlhet, azonban jobb a scriptek hasznlatval csnjn bnni.
Link a Script-re
Ennek a fejezetnek kt fontos tanulsga lesz. Az els, hogy a JavaScriptnket nemcsak
esemnyek hatsra hvhatjuk meg, hanem szabvnyos HTML linkek segtsgvel is, a msodik
pedig az, hogy ahny bngsz, annyi szoks. Mit is jelent ez? Azt mr tudjuk, hogy a Netscape-
ben jelent meg elszr a JavaScript, s mint ltvnyos s jl hasznlhat scriptnyelv hamarosan
el is terjedt, s tbb bngszbe is beptettk. A bngszk fejleszti azonban nem egysgesen
implementltk a nyelvet, s ez rdekes megoldsokhoz vezetett. IE 4.0 alatt tesztelve oldalunkat
semmi baj nem szrmazik abbl, ha egy kphez rendeljk hozz az onClick esemnyt - ami a
JavaScript szablyai szerint slyos hibnak szmt - st, oldalunk mg megfelelen is fog
mkdni. Ha azonban ezt az oldalt a Netscape valamely kiadsval tekintjk meg jobb esetben
nem trtnik semmi, ha a kpre kattintunk, rosszabb esetben hibazenetet is kapunk. Akkor vajon
mi a teend ha egy kphez az onClick esemnykezelt szeretnnk rendelni, s szeretnnk
oldalunkat lehetleg Netscape s Opera bngszkkel is lvezhetv tenni? Ekkor hasznlhatjuk
a kvetkez megoldst: kphez ugyan nem, de linkhez mr rendelhetnk Click esemnyt. Teht a
kpet, mint szabvnyos linket hozzuk ltre viszont href attribtumnak a kvetkez rtket adjuk:
href="javascript:void(utastsok, fggvnyek)". A kvetkezkppen:
<HTML>
<BODY>
<a href="javascript:void(alert('Mkdik!'))">link, ami akr egy kp is
ehet</a>
</BODY>
</HTML>
Teht ltrehoztunk egy linket - ami nem csak szveg, hanem akr egy kp is lehet - aminek href
tagjban megadtuk, hogy a link valjban nem egy msik HTML oldalra mutat, hanem egy
JavaScript utastsra, ami esetnkben az alert fggvny meghvsa.A fggvny rtket adhat
vissza, s a visszaadott rtk a kpernyn jelenne meg, amit viszont a VOID() megakadlyoz. Ezt
a megoldst csak akkor kell alkalmaznunk, ha a meghvott eljrsnak van visszaadott rtke,
teht esetnkben nem.
Objektumok, dokumentumok
Tudjuk, hogy a JavaScript objektum alap, s nem objektum orientlt nyelv, hiszen az
objektumok egy szinten helyezkednek el, objektumai kztt mgis szoros, al s flrendeltsgi
viszony figyelhet meg. Az egsz HTML dokumentumunk ilyen objektumokbl pl fel, melyek
alapkontextust a window objektum adja. Az objektumoknak tovbbi objektumai, tulajdonsgai
s metdusai is lehetnek, amelyekre a pont-opertor segtsgvel hivatkozhatunk. Lssunk egy
egyszer pldt: ha a HTML oldalunk URL-jt akarjuk megtudni, teht azt az Internet-cmet,
amin keresztl a lapot elrjk, a document objektum location objektumnak rtkt kell
kiratnunk: document.location. Az objektumok metdusait is hasonl mdon rhetjk el: a
dokumentum nv mezjre val fkuszlshoz pldul a mezhz tartoz FOCUS() metdust
kell meghvnunk: document.form.nv.focus(). Az objektumokat nagyon sokfle mdon
elrhetjk programozs sorn, ami megknnyti a munkt, viszont nagyon zavar is lehet, ha
valaki nincs tisztban az objektumok hierarchijval, ezrt jl jhet a kvetkez segtsg. A teljes
HTML dokumentum objektumok sokasgbl pl fel, s a JavaScript segtsgvel szinte
minden egyes objektumnak meg tudjuk vltoztatni az sszes tulajdonsgt - hiszen erre talltk
ki. ptsnk fel egy HTML rlapot, mely telis-tele van klnbz beviteli mezkkel
rdigombokkal, s checkbox-okkal. Ennek a dokumentumnak a f objektuma a document
objektum. Ennek tovbbi objektumai a formok, melyek tovbbi objektumokknt tartalmazzk a
beviteli mezket. A beviteli mezknek pedig tovbbi metdusai s tulajdonsgai lehetnek. gy
teht egy beviteli mez rtkt a kvetkezkppen rhetjk el: document.form.mezo.value. Az
objektumoknak nem ktelez, de lehet nevet adni. Az objektumok ekkor hromfle mdon
rhetk el. Az elbbi pldnl maradva: a beviteli mez rtke a kvetkezkppen rhet el:
- document.form.mezo.value
- document.forms[0].elements[0].value
- document.forms['form'].elements['mezo'].value
A fenti elrsi mdozatokat kombinlhatjuk is. Sokat segthet azonban, ha tudjuk, hogy a
dokumentum elemei a lap tetejtl kezdve kerlnek beszmozsra, teht a document.forms[0] a
dokumentum tetejhez legkzelebb es HTML formot jelenti. Nzznk egy pldt: Az oldal
tulajdonsgainak mdostsa lesz a feladat. Ltrehozunk egy formot egy beviteli mezvel,
amelynek kirjuk, majd megvltoztatjuk az rtkt. Ehhez kt fggvnyt fogunk hasznlni, egyet
a kirshoz s egyet a megvltoztatshoz.
<HTML>
<HEAD>
<SCRIPT LANGUGE="JavaScript">
function kiiras(mezo) {
alert(mezo);
}
function valtoztatas() {
document.form.szoveg.value="Megvltozott!";
}
</SCRIPT>
</HEAD>
<BODY>
<FORM name="form">
<input type="text" name="szoveg">
<input type="button" value="Kiir"
nClick="kiiras(document.form.szoveg.value)">
<input type="button" value="Valtoztat" onClick="valtoztatas()">
</FORM>
</BODY>
</HTML>
Ahhoz hogy a fent lert feladatot el tudjuk vgezni a KIIRAS() fggvny meg kell hogy kapja a
beviteli mez rtkt meghvsakor, mely jelen esetben a document.form.szoveg.value
tulajdonsgon keresztl rhet el. A VALTOZTATAS() eljrsnak ezzel szemben nincs szksge
semmilyen paramterre, hiszen feladata csak annyi, hogy a mez rtkt megvltoztassa. A fenti
plda ugyan nagyon egyszer, de vegyk szre, hogy ezzel a mdszerrel, teht egy egyszer
rtkadssal, mdosthatjuk minden objektum tulajdonsgt, dinamikusan vltoztatva ezzel
oldalunk megjelenst. Kicserlhetjk a httrsznt, de akr a betk sznt is megvltoztathatjuk.
Ha a beviteli meznek nem adunk nevet, akkor a vltoztatskor a fentiekben lert mdon
jrhatunk el. Ha teht az VALTOZTATAS() fggvnyt kicserljk a kvetkezre, minden
ugyangy fog mkdni.
function valtoztatas() {
document.forms[0].elements[0].value="Megvltozott!";
}
Ha hibztunk
Mi trtnik, ha hibt vtnk a program rsa kzben? A tbbi programozsi nyelvben ilyenkor a
fordttl figyelmeztetst vagy hibazenetet kapunk. JavaScript esetben a fordtst s a futtatst
is egy bngsz vgzi, gy a hibajelzseket innen kell vrnunk, nhny esetben sajnos hiba.
Azrt hiba, mert a bngszk "termszetesen" ebben is klnbznek. Ha a Netscape hibt jelez
("Javascript error!" Felirat jelenik meg az llapot sorban), akkor a cmsorba kell bernunk a
"javascript:" sort, s mris rmutat a hiba okra. Ez a funkci akkor is jl hasznlhat, ha csak
ellenrizni szeretnnk egy-egy utastst, mivel azokat itt is tesztelhetjk. rjuk be a cmsorba,
hogy "javascript:alert('Hiba')" s mris megjelenik a figyelmeztet ablak. Ez a funkci rendkvl
egyszeren s hatkonyan hasznlhat.
Az Explorer szoldabban (egy kis srga hromszg a status sor sarkban) jelzi a hibnkat, s a
hiba oknak feldertsben sem jr el a Netscape gondossgval.
Esemnyek
Ahhoz, hogy hatkonyan hasznlhassuk a JavaScript nyelvet, szksgnk lesz egsz csom
esemny kezelsre, hiszen a felhasznli beavatkozsok, tevkenysgek irnytjk lapunk
mkdst. Az esemnyek lekezelshez - mint mr tudjuk - esemnykezelket kell hasznlnunk.
Ezek egy kis rszt mr ismerjk, de a programozs sorn sokkal tbb esemny
megklnbztetsre lesz szksgnk. Amit fontos mg tudni, hogy nem minden esemny
rendelhet hozz minden objektumhoz, elemhez. Hogy tisztn lssuk az esemnyek -
esemnykezelk - objektumok viszonyt, nzzk meg alaposan az albbi tblzatot. esemnyek -
esemnykezelk objektumok
Esemny esemnykezel objektum Akkor kvetkezik be...
elemei ha a fkusz egy msik
Blur onBlur window, frame, form
objektumra kerl
gomb, radio-gomb, ha az objektumra kattintunk
Click onClick
checkbox,link
ha megvltozik az adott mez
Change onChange text,textarea,select
rtke
Focus onFocus window, frame, form elemei ha a fkusz az elemre kerl
document, image,
Keydown onKeyDown ha egy billenty lenyomsra kerl
link, text, textarea
document, image,
Keyup onKeyUp ha egy billenty felengedsre kerl
link, text, textarea
Load onLoad document amikor a HTML oldal betltdik
Mouseout onMouseOut area, link ha az egr elhagyja az objektumot
Mouseov
onMouseOver area, link ha az egr az elem fl kerl
er
ha a mez valamely rszt
Select onSelect text, textarea
kivlasztjuk
Submit onSubmit form ha a submit gombra kattintunk
Ha esetleg a fenti tblzat rtelmezshez me egy kis magyarzat: az els oszlopban szerepel az
esemny neve, a msodikban a hozz tartoz esemnykezel, a harmadik oszlop tartalmazza azon
objektumok listjt, melyekhez az esemnykezel hozzrendelhet, s vgl a negyedik
oszlopban lthatjuk, hogy az adott esemny mikor kvetkezik be. Nzznk egy gyakorlati pldt:
Vltoz kpek
Ha a HTML kdban <IMG> tag-be berakjuk a NAME="kep" attribtumot, akkor kpnkre a
kvetkez mdon hivatkozhatunk: document.kep, a forrsfjlt pedig a document.kep.src
tulajdonsgon keresztl rhetjk el, illetve vltoztathatjuk meg. A feladat rendkvl egyszer
lesz: vltozzon meg a kp, ha a felhasznl fl viszi az egeret, nyerje vissza eredeti llapott, ha
elvitte onnan, s legyen ms akkor is, ha rkattintottunk. Lssuk a programot:
<html>
<body>
<a href="javascript:alert('Lenyomva is ms a kp, de sajnos hamar
isszaugrik')">
<img name="kep" src="1.jpg"
onMouseOver="document.kep.src='2.jpg'"
onMouseOut="document.kep.src='1.jpg'"
onClick="document.kep.src='3.jpg'">
</a>
</body>
</html>
Mi trtnik, ha a cserlend kpek tl nagyok, vagy a felhasznl svszlessge tl kicsi?
Nagyon egyszer, a kpek kisebb nagyobb ksssel fognak megjelenni, hiszen letltsk csak az
els hivatkozs pillanatban fog elkezddni (azaz pl. a 2.jpg akkor, amikor elszr mozgatjuk az
egeret a kp fl), s a kicsi svszlessg miatt akr j nhny msodpercbe is beletelhet mire a
bngsznek sikerl a kpet letltenie, s vgre megjelentheti azt. Ez idnknt elg zavar lehet.
Azonban erre is van megolds.
Eltlttt kpek
Ltre kell hoznunk j objektumokat, mgpedig olyanokat, amelyek kpek, de nem jelennek meg
az oldal betltdskor a dokumentum felletn. Ezt az Image objektum hasznlatval rhetjk el.
Lssuk elszr a forrskdot, majd sorrl sorra a magyarzatot.
<html>
<script>
elsoKep = new Image();
elsoKep.src = "1.jpg";
masodikKep = new Image();
masodikKep.src = "2.jpg";
function kepMutat(forras) {
if (forras==1) document.kep.src= elsoKep.src;
else document.kep.src= masodikKep.src;
}
</script>
<body>
<a href="javascript:alert('Elre tlttt kpekkel...')">
<img name="kep" src="1.jpg"
onMouseOver="kepMutat(2)"
onMouseOut="kepMutat(1)">
</body>
</html>
A HTML kd remlem mr mindenkinek vilgos: ltrehozunk egy kpet - ami felttlenl link
kell, hogy legyen -, amely klnbz esemnyek hatsra klnbz fggvnyeket hv meg. A
hangsly itt a fggvnyeken, illetve a JavaScript kdon van. A script trzsben - teht a fggvny
defincijn kvl - ltrehozunk kt j objektumot, melyek gy a fggvnybl s azon kvlrl is
elrhetek lesznek. Ezek az objektumok Image, azaz kp objektumok, melyeket a
kvetkezkppen hoztunk ltre: elsoKep = new Image(). Teht az elsoKep egy j (new) kp
objektum lesz (Image), melynek, a kvetkez sorban, az src attribtumban megadjuk a kpet
tartalmaz fjlnak a nevt. Hasonlan hozzuk ltre a msodik kpnket is. Ezzel a mdszerrel a
kpek mr az oldal letltdse kzben letltsre kerlnek a memriba vagy a bngsz helyi
gyorsttrba, gy a kpcserekor csak meg kell jelenteni ket, nem kell azok letltsre
vrnunk. Nincs ms dolgunk, mint rni egy fggvnyt, ami a kpek attribtumainak vltoztatsait
elvgzi. Erre a feladatra szolgl a kepMutat eljrs, ami a paramtertl fggen az elsoKep vagy
a masodikKep objektumokban trolt kpeket jelenti meg, egy feltteltl fggen. A fenti
mdszerek alkalmazsval - akr tbbtucat kpet is hasznlhatunk - nagyon ltvnyoss tehetnk
mr egy egyszer oldalt is, azonban itt sem rdemes tlzsokba esni, s tldszteni a lapunkat.
Idztsek
A JavaScript lehetsget ad az utastsok idztsre. Ez az idzts tulajdonkppen azt jelenti,
hogy az adott utasts csak bizonyos id mlva fog vgrehajtdni. Erre a funkcira sokszor
szksgnk lehet, ha valamit ksleltetni szeretnnk, pldul a felhasznlnak idt szeretnnk adni
egy szveg elolvassra, mieltt j oldalt tltennk be. Az ilyen esetekre talltk ki a
setTimeout() metdust, melynek paramterei a kvetkezk: setTimeout("utasts",id). Az eljrs
a paramterl kapott utastst - melyet mindig idzjelek kz kell tennnk - csak adott id
mlva hajtja vgre. Ha teht azt szeretnnk, hogy 5 msodperc mlva ugorjunk egy msik
oldalra, akkor a kvetkez utastst kell hasznlnunk: setTimeout("location.href =' uj_oldal.html'
",5000), ugyanis az id paramterl szolgl szmokat milliszekundumokban (azaz ezred
msodpercekben) kell megadnunk.
Feladatunk az lesz, hogy egy beviteli mezben bizonyos ksleltetssel rjunk ki egy szveget,
mintha valaki ppen most gpeln be azt. Lssuk elszr a forrskdot majd a hozz tartoz
magyarzatot.
<html>
<script>
function kiiras() {
var kiirandoSzoveg="Ezt szpen lassan jelentjk meg...";
var kiirtSzoveg=document.form.mezo.value;
var kiirandoHossz=kiirandoSzoveg.length;
var kiirtHossz=kiirtSzoveg.length;
if (kiirtHossz<kiirandoHossz) {
document.form.mezo.value=kiirandoSzoveg.substring(0,kiirtHossz+1);
setTimeout("kiiras()",300);
}
}
</script>
<body onLoad="kiiras()">
<form name='form'>
<input type='text' name='mezo' size='35'>
</form>
</body>
</html>
A HTML kdban mindssze egy beviteli mezt definilunk a hozz tartoz form-mal, s az oldal
betltdsekor meghvjuk a kiiras eljrst. Nzzk akkor a fggvnynket sorrl sorra. Az els
sorban definilunk egy vltozt, melyben elhelyezzk a kirand szveget. A msodik sorban
ltrehozunk mg egy vltozt, melyben a mr kirt szveget troljuk el. Mivel szksgnk lesz
mind a kirand, mind a kirt szveg hosszra, ezrt a kvetkez utastsok segtsgvel ezt a kt
rtket troljuk el egy-egy vltozban. Kvetkezik egy felttel, mely eldnti, hogy folytassuk-e a
kiratst, vagy befejezdhet scriptnk futsa, azaz mr kirtuk a kvnt szveget. Ekkor a kirt
karakterek szmt nveljk a substring metdus segtsgvel, majd jra meghvjuk
fggvnynket, egy kis ksleltets beiktatsval.
Azt hiszem, nem rt, ha a felttel igaz gban szerepl kt sort kicsi tovbb elemezzk. A
kiirandoSzoveg vltoznak hasznljuk a substring metdust, melynek kt paramtere van. Az
els paramter mondja meg, hogy hnyadik karaktertl kezdve, a msodik pedig hogy hnyadik
karakterig rjuk ki a stringet. Teht ha stringnk a"valami" szbl ll, akkor annak
string.substring(0,2) metdusa a "va" sztagot adja vissza rtkl. Mivel esetnkben a msodik
paramter mindig egyel nvekszik, gy minden lpsben egyel tbb karakter jelenik meg a
kirand stringbl a kpernyn. Most kvetkezik a ksleltets, mely 0,3 msodperc mlva jra
meghvja a kiiras() eljrst, s gy jabb bet jelenhet meg a beviteli mezben.
Ezt a mdszert, amikor a fggvny sajt magt hvja meg rekurzinak nevezzk, s ilyen, vagy
ehhez hasonl problmk (faktorilis kiszmtsa) nagyon j hasznt vehetjk.
Status sor
A status sorban lland s vltoz informcik is megjelenhetnek, ppgy, mint egy beviteli
mezben. A kt mezbe val rs mdja sem tr el jelentsen egymstl, gy kzenfekv, hogy az
elbbi pldban hasznlt szvegkir scriptet ltessk t a status sorra. A kd csak annyiban
vltozik, hogy nem kell formot deklarlnunk, s a beviteli mez helyett a scriptnk kimenete a
status sor lesz.
<html>
<script>
function kiiras() {
var kiirandoSzoveg="gy kszl az internetes futfny, mr csak le
kellene trlni...";
var kiirtSzoveg=window.status;
var kiirandoHossz=kiirandoSzoveg.length;
var kiirtHossz=kiirtSzoveg.length;
if (kiirtHossz<kiirandoHossz) {
window.status=kiirandoSzoveg.substring(0,kiirtHossz+1);
setTimeout("kiiras()",100);
}
}
</script>
<body onLoad="kiiras()">
Ne ide nzz, hanem egy kicsit lejjebb...
</body>
</html>
A kdban trtnt vltoztatsok szerintem maguktl rtetdek, ezrt nem is szeretnm tlmagyarzni a dolgot. A
scriptnkkel - remlhetleg - csak egyetlen gond van, mgpedig az, hogy ugyan hajland kirni a szveget, azonban
futsa ekkor be is fejezdik, s a status sor jra unalmass vlik. Erre a problmra nyjt gygyrt a kvetkez plda.
SWITCH hasznlat
Nzznk egy olyan progamot, amely eltvoltja egy szvegbl az kezeteket:
<html>
<script>
function check() {
var
utolsoKarakter=document.form.text.value.substring(document.form.text.value.len
gth-1);
var ujKarakter="";
switch (utolsoKarakter) {
case "" : ujKarakter="e"; break;
case "" : ujKarakter="E"; break;
case "" : ujKarakter="a"; break;
case "" : ujKarakter="A"; break;
case "" : ujKarakter="i"; break;
case "" : ujKarakter="I"; break;
case "" : ujKarakter="u"; break;
case "" : ujKarakter="U"; break;
case "" : ujKarakter="u"; break;
case "" : ujKarakter="U"; break;
case "" : ujKarakter="o"; break;
case "" : ujKarakter="O"; break;
case "" : ujKarakter="o"; break;
case "" : ujKarakter="O"; break;
case "" : ujKarakter="u"; break;
case "" : ujKarakter="U"; break;
case "" : ujKarakter="o"; break;
case "" : ujKarakter="O"; break;
}
if (ujKarakter)
document.form.text.value=document.form.text.value.substring(0,document.form.te
xt.value.length-1) + ujKarakter;
}
</script>
<body>
Ide lehet beptygni a szveget, amibl majd kiszedjk az kezetes
betket:<br>
<form name="form">
<textarea name="text" rows="10" cols="30" onKeyUp="check()"></textarea>
</form>
</body>
</html>
Ltrehoztunk egy form-ot egy beviteli mezvel, s megadtuk, hogy minden egyes billenty
lenyomsa utn fusson le az ltalunk megrt ellenrz fggvny. Metdusunk nem tl bonyolult
mindssze egy vltoz defincit, egy switch-case szerkezetet, s egy felttelt tartalmaz. Az els
lpsben beolvassuk a beviteli mezben lv sztringet, s levgjuk rla az utols karaktert, hiszen
elg ezt vizsglnunk. Ezek utn el kell dntennk, hogy mit tegynk ezzel a karakterrel. Ehhez
egy switch-case szerkezetet hasznlhatunk, mely a kvetkezkppen mkdik. A switch a
paramterknt megkapott vltoz, switch(valtozo), rtktl fggen klnbz utastsokat hajt
vgre. Ezeket az rtkeket s a hozzjuk tartoz utastsokat a case "rtk" : utasts
szintaktikval definilhatjuk. A switch sajtossga, hogy minden egyes ilyen sor utn, ha nem
akarjuk, hogy a kvetkez is vgrehajtdjon, egy break utastst kell rnunk. Ennek megfelelen
a case "" : ujKarakter="e"; break; sor abban az esetben, ha az utols lettt karakter "" volt az
ujKarakter vltoznak az "e" karaktert adja rtkl, s befejezi a vizsglatot. Mivel ezt minden
kezetes betre elvgeztk, gy mindegyik helyre sajt kezet nlkli prja helyettestdik majd
be. Ehhez azonban szksg van mg egy lpsre: meg kell vizsglnunk, hogy megvltoztattuk-e a
karaktert, azaz az ujKarakter vltozba kerlt-e valami. Ha a felttel igaznak bizonyul, akkor a
beviteli mezben lv stringhez a fggvny ltal visszaadott karaktert fzzk, a felttel hamis
volta esetn nem trtnik semmi.
A mlt hnapban megprbltam gyakorlati pldkon bemutatni, hogyan is hasznlhatjuk a JavaScript kdokat a
weblapunk kialaktsakor. Most ezt a hagyomnyt kvetve mg gyakorlatibb pldkat szeretnk bemutatni, amik
vals helyzetben is hasznlhatk, s valdi problmkat oldanak meg. Az elz rszben mr volt egy kis program, az
kezettelent rutin, mely ilyen feladatot oldott meg, ennek most egy tovbbfejlesztett vltozatval is
megismerkedhetnk.
For ciklus haszlata
Az elz verzinak kt, viszonylag nagy, hibja van. Az egyik, hogy csak az utols karaktert
vizsglja, gy ha valaki utlag szr be valamit a szvegbe, akkor abban mr nem cserli le az
kezeteket. A msik hiba, hogy ha kivg/beilleszt mdszerrel nagyobb szveget msolunk a
beviteli mezbe, akkor az elbb emltett okokbl szintn elmarad a kvnt hats. Mindkt
problma orvosolhat a kvetkez mdszerrel. Minden egyes bevitelkor, egy for ciklus
segtsgvel, az egsz szveget leellenrizzk. Kvetkezzen most a javtott vltozat, s egy kis
magyarzat hozz:
<html>
<script>
function check()
{
var vizsgaSzoveg=document.form.text.value;
Ellenrzsek
A valdi internetes oldalak kialaktsakor ltalban szksg van adatok bevitelre a felhasznl
rszrl, azonban ezeket az adatok ellenrizni kell a feldolgozsuk eltt. Mivel itt kliens oldali
programozsrl runk, gy az adatok feldolgozsval nem, csak az ellenrzskkel foglalkozunk.
Ehhez szksg van HTML ismeretekre is, amit gyorsan tvesznk, hogy rthet legyen a
problma, s a megolds is.
Mr eddig is hoztunk ltre form-okat (magyarra fordtva taln rlapokat), de a valdi
jelentsgkrl mg nem, vagy csak alig esett sz. Ezek az rlapok biztostjk a felhasznl s a
szerver kztti adatcsert. Az gy kitlttt adatokat elkldjk a szerverre, ahol valamilyen CGI
(Common Gateway Interface) program feldolgozza azt. Az rlap klnbz beviteli elemekbl
ll, ezekbl mutatok be most rviden nhnyat:
tpus Tulajdonsgok
text Sortrsek nlkli szveg bevitelre alkalmas mez.
textarea Tbbsoros szveg bevitelekor hasznljuk
select Vlasztlista, tbb lehetsges, rgztett rtk kzl vlaszthatunk.
button Nyomgomb, ami a felhasznli interakcikat hivatott lekezelni.
submit Nyomgomb, ami a form adatainak elkldsre szolgl.
hidden Specilis rejtett mez, amiben a szerver oldali program szmra
fontos adatokat kezelhetnk.
Form nhny eleme, s tulajdonsgaik
A pldk sorn csak a text, s a submit, illetve a button objektumokkal fogunk megismerkedni,
mivel a feladatok nagy rsze ezek segtsgvel jl bemutathat. A ksbbiekben igyekszem majd
a tbbi elem bemutatsra is.
Egy egyszer form a kvetkez elemekbl ll: beviteli mezk s submit vagy button
nyomgomb. ltalban a submit gombot hasznljuk az adatok elkldsre, de kerl ton a
button gombbal is megoldhat ez a feladat.
Lssunk akkor egy form-ot, melynek csak annyi a feladata, hogy kt mez tartalmt elkldi a
szervernek (a <body> s <html> tagokat most elhagyjuk):
<form name="form" action="feldolgoz.cgi" method="post">
nv: <input type="text" name="nev"><br>
e-mail cm: <input type="text" name="email"><br>
<input type="submit" name="gomb" value="Elkld">
</form>
A form-nak krlbell ezek azok a paramterei amiket mindenkppen rdemes megadni. A name
rtelemszeren az rlap nevt jelenti, amivel hivatkozhatunk r. Az action jelenti annak a CGI
programnak a nevt, ami a feldolgozst vgzi majd. A method paramterben adhatjuk meg, hogy
milyen mdon kldjk az adatokat. A post rtk azt jelenti, hogy az adatokat egy "csomagknt"
kapja meg a szerver oldali program.
Amit rdemes megfigyelni az a submit gomb paramterezse. A name magtl rtetden az
elem nevt jelenti, a value pedig azt a szveget tartalmazza, ami a gomb felirataknt megjelenik.
Ha teht a gombra kattintunk, a mezk tartalma a feldogoz.cgi programnak addik t.
A klds eltt, mint mr emltettem, ellenrizni kell az adatokat, s itt hasznlhatjuk fel a
JavaScript-et.
"res szveg"
A feladatunk az lenne, hogy ellenrizzk le klds eltt, hogy valamelyik mez tartalmaz-e res
adatokat. Ha hinyos informcit adna meg valaki, akkor figyelmeztessk, s lltsuk le az
adatok kldst. Ehhez az elz form-ot kicsit t kell alaktanunk, s rni kell hozz egy ellenrz
fggvnyt:
<html>
<head>
<script>
function ellenoriz()
{
if (document.form.nev.value=="")
{
alert("Nem adtl meg nevet!");
return false;
}
if (document.form.email.value=="")
{
alert("Nem adtl meg e-mail cmet!");
return false;
}
return true;
}
</script>
</head>
<body>
<form name="form" action="feldolgoz.cgi" method="post">
nv: <input type="text" name="nev"><br>
e-mail cm: <input type="text" name="email"><br>
<input type="submit" name="gomb" value="Elkld" onClick="return
ellenoriz()">
</form>
</body>
</html>
Lssuk hogyan is mkdik a dolog. Elszr is meg kell mondanunk a bngsznek, hogy az
Elkld gombra trtn kattintskor hvja meg az ellenoriz() fggvnyt, s figyelje is hogy milyen
rtkkel tr vissza. A return kulcsszval mondhatjuk meg, hogy a visszatrsi rtket figyelembe
vve kldjk el a form-ot, vagy lltsuk le a folyamatot. Ha teht a meghvott fggvny true, azaz
igaz rtkkel tr vissza, a folyamat tovbb fut, ha azonban false, azaz hamis rtkkel tr vissza a
klds megszakad. Nincs ms dolgunk teht, csak megrni gy a fggvnyt, hogy ezeket az
rtkeket adja vissza. Egy egyszer if szerkezettel, pontosabban kettvel, vizsgljuk a mezk
tartalmt. A vizsglat trtnhet a benne lv tartalom, vagy a tartalom hossza szerint, n az
elbbit vlasztottam. Teht ha a mez res, akkor egy zenetet kldnk a felhasznl fel, majd
hamis rtkkel trnk vissza. Ha mindkt vizsglaton tljutottunk, az azt jelenti, hogy nem volt
hiba, s visszaadhatjuk az igaz rtket.
Itt szeretnm megemlteni, hogy az ellenrzst ms helyen is lehet vgezni, a msik eljrs
egybknt a form onSubmit esemnyt hasznlni.
Az elbbi pr oldaban prbltam meg bemutatni a JavaScript alapvet tulajdonsgait. A
JavaScriptben lv objektumok metdusainak pontos lersa a JavaScript referencikban telejs
mrtkben megtallhat.
Az XML
Bevezets
Az XML a World Wide Web Konzorcium (W3C) ajnlsa, amely kompatbilis egy sokkal
rgebbi, SGML (Standard Generalized Markup Language = szabvnyos ltalnostott
jellnyelv) nev ISO 8879/1986 szabvnnyal. Az SGML megfelelsg azt jelenti, hogy minden
XML dokumentum egyben SGML dokumentum is, de fordtva mr nem igaz, azaz van olyan
SGML lers, ami nem XML megfelel.
Az XML (Extensible Markup Language = bvthet jellnyelv) adatler nyelv ltrehozst a
nylt rendszerek trhdtsa s az Internet tette szksgess. A Java nyelv s az XML kztt van
egy rdekes hasonlsg: a Java a futtathat formban hordozhat programok nyelve, mg az
XML a hordozhat adat ksztsnek az eszkze.
Az XML dokumentumok (hasonlan a Java forrskdhoz) unicode alap szveges
karaktersorozatok, ahol az alaprtelmezs az UTF-8 (tmrtett unicode), de a dokumentum
elejn ettl eltr kdolsi eljrst is vlaszthatunk.
Az XML formtum dokumentumok fokozatosan kezdik levltani a jelenleg szles krben
elterjedt ASCII alap szvegfjl alkalmazsokat (plda: interface-ek, konfigurcis fjl-ok).
Ennek a tendencinak az az oka, hogy az ASCII fjl-ok semmilyen ler, kezel informcit
(meta adatot) nem tartalmaznak sajt magukrl (mg az az alapvet tulajdonsguk sem rzdik
meg, hogy melyik kdlapot hasznlta a fjl ksztje). Ezzel szemben az XML alap
dokumentumok a benne trolt adatok vagy hivatkozsok (szveg, kp, ) rtkein fell
rendelkeznek plusz informcikkal is, ugyanakkor lersuk hasonlan a HTML nyelvhez
tovbbra is rendelkezik azzal a kellemes tulajdonsggal, hogy szvegalap. Az XML
dokumentumokban az adatok rtkein tl olyan tovbbi cmkket s hivatkozsokat helyezhetnk
el, amik utalnak az adat termszetre, a dokumentum szerkezeti s tartalmi felptsre, tovbb
ezek az informcik felhasznlhatak a dokumentum rvnyessgnek vizsglathoz is.
Egy XML dokumentum nem tartalmaz utalst arra nzve, hogy egy alkalmazs (pldul Internet
Explorer 5, tovbbiakban: IE5), hogyan jelentse meg, de vannak kiegszt W3C ajnlsok,
amik ezt a hinyossgot megoldjk.
Az XML gy lett tervezve, hogy egy XML adatfolyamot ler, illetve rvnyessgt meghatroz
formlis nyelvtant knny legyen definilni, gy az XML adatfolyam szintaxisvezrelt elemzse
egyszer. Ez utbbi tulajdonsg az, ami miatt az XML ma szinte ez egyetlen szles krben
elterjedt, ltalnos eszkz arra, hogy adatainkat hordozhat formban troljuk s tovbbtsuk. Az
XML ebben a megkzeltsben a klnfle jellnyelvek ksztst ler nyelv (meta nyelv).
Amikor az XML segtsgvel megalkotunk egy j, konkrt jell nyelvet, akkor ennek az
eredmnyt XML alkalmazsnak nevezzk.
XML alkalmazsok
Az elzekben mr emltsre kerlt, hogy az XML segtsgvel megalkotott jellnyelveket
XML alkalmazsoknak nevezzk. Alaposan krbenzve az egyes applikcik (Linux,
Windows programok) kztt lthat, hogy az XML szinte mr alapvet konfigurcis s
adattrol eszkzz vlt. A Linux GNOME gnumeric, AbiWord a dokumentum trolsi
formjul az XML-t vlasztotta. Linux alatt az egyik legjobb grafikus elemkszlet a QT, amihez
ltezik egy QT Designer (a QT elemkszlet s a designer a Trolltech alkotsa). A QT Designer-
ben a Delphi vagy Visual Basic-hoz hasonlan - vizulisan lehet felhasznli interface-eket
kszteni, majd azokat szabvnyos *.ui fjl-okba menteni . Amikor a QT Designer hasznlatval
egy Teszt Form cmsor s frmTeszt nev formba egy OK felirat, btnOK nev gombot
terveznk, akkor a kvetkez XML fjl jn ltre:
<!DOCTYPE UI><UI>
<class>frmTeszt</class>
<widget>
<class>QWidget</class>
<property stdset="1">
<name>name</name>
<cstring>frmTeszt</cstring>
</property>
<property stdset="1">
<name>geometry</name>
<rect>
<x>0</x>
<y>0</y>
<width>342</width>
<height>155</height>
</rect>
</property>
<property stdset="1">
<name>caption</name>
<string>Teszt Form</string>
</property>
<widget>
<class>QPushButton</class>
<property stdset="1">
<name>name</name>
<cstring>btnOK</cstring>
</property>
<property stdset="1">
<name>geometry</name>
<rect>
<x>20</x>
<y>20</y>
<width>104</width>
<height>28</height>
</rect>
</property>
<property stdset="1">
<name>text</name>
<string>OK</string>
</property>
</widget>
</widget>
</UI>
A fenti kt pldn kvl most csak megemltek nhny tovbbi, elterjedt XML alkalmazst:
. projekt a Microsofttol, teljesen XML alap fejleszti eszkz, s ebbl kiindulva az j
Windowsokbl pldul az eddigi registry kezels helyre is egy XML alap mechanizmus lp.
XHTML nyelv: A HTML nyelvet rja le, illetve kiss mdostja annak rdekben,
hogy a HTML XML megfelel legyen.
XSQL nyelv: Adatbzis kezel mveletek XML megfelel lersra szolgl jell
nyelv
MathML (Mathematics Markup Language)
A szabvnyostott XML alkalmazsok kre egyre szlesebb, amit folyamatosan figyelemmel
kvethetnk a W3C honlapon. Az egyik legfontosabb XML alkalmazs az XSL (Extended Style
Language = bvtett stluslap ler nyelv), amivel a CSS alternatvjaknt az XML
dokumentumok kpi megjelentsnek kinzett lehet meghatrozni. Az XML ltalnos
informci ler kpessge miatt egyre gyakrabban tallkozunk XML alap konfigurcis fjl-
okkal is. Pldaknt mindenkinek ajnlom a Jakarta-Tomcat web.xml nev fjl-jt
tanulmnyozsra, ami a WEB hely aktulis kialaktsnak konfigurcijt tartalmazza.
Elemek (Elements)
Az elemek a legalapvetbb rszei az XML dokumentumoknak. A <NEV>X Y</NEV> rszlet
egy konkrt elem. Egy XML elem ltalban a kvetkez rszekettartalmazza:
Az elemet bevezet <ElemCimke> tag, amit cscsos zrjelek kztt kell megadni.
Az elemhez tartoz adat (Pl. X Y). Nem minden elem tartalmaz adatot.
Az elemet zr </ElemCimke> tag.
A nyit s zr tag-ek feladata az, hogy megjelljk s elnevezzk az ltaluk kzrefogott adatot.
Ezzel az adataink termszete s tartalma is nyomonkvethetv vlik, emiatt fontos, hogy a
cmke nevek kifejezk legyenek. Lnyeges kiemelni, hogy a hagyomnyos XML meghatrozs
nem ad olyan precz adatbrzol s kezel eszkzt a keznkbe, mint a programozsban
megismert tpus fogalma, azonban mr ltezik olyan W3C ajnls (XML Schema definci), ami
ennek a szigor kvetelmnynek is eleget tesz. Idnknt elfordul, hogy egy tag nem fog kzre
semmilyen adatot. Erre plda az, ha valakinek nincs e-mail cme: <EMAIL></EMAIL>. Ezt a
terjengs lerst az XML-ben a kvetkez mdon rvidthetjk: <EMAIL/>. A tag nevekre a
kvetkez szablyokat kell betartani:
Csak betvel vagy alhzs jellel kezddhet
Tartalmazhat bett, szmjegyet, pontot, ktjelet, alhzs jelet
A kis s nagybetk klnbznek szmtanak
Megjegyzs
Az XML dokumentumban a HTML nyelvben megszokott megjegyzst hasznlhatjuk.
<!
Ez egy XML megjegyzs, ami lexikailag olyan mint a HTML comment
-->
Ezeket a rszeket az XML feldolgoz (elemz, rvnyessg vizsgl, megjelent) alkalmazsok
figyelmen kvl hagyjk.
Tulajdonsgok (attributes)
Az XML elemek tetszleges szm tulajdonsggal is rendelkezhetnek. A VKONYV XML
msodik vltozatbl tekintsk a kvetkez rszletet:
<VENDEG sorszam=2 NEV=X V DATUM=2002.04.30>
Itt hrom tulajdonsgot hatroztunk, adtunk meg a VENDEG elem rszre: sorszam, NEV,
DATUM. A tulajdonsgok ltalban gy nznek ki:
<element nev1=rtk1 nev2=rtk2 >
</element>
Egyed hivatkozsok (entity references)
Az egyedek olyanok, mint a marhelyettestsek. Minden egyednek egy egyedi nvvel kell
rendelkeznie. Legyen az EgyedNev egy egyednv, ekkor ennek a meghvsa a kvetkez:
&EgyedNev;, azaz & jellel kezddik s ;-vel fejezdik be. Ha megnzzk az AbiWord
ltal ksztett XML dokumentum ó rszlett, akkor ott ez egy egyedhivatkozs az
betre.
Lteznek elre definilt egyedek, mint pldul a gt nev. Az > hatsa olyan, mintha az
XML adatfolyamba egybl a > jelet rtuk volna. Az egyedek fogalma lehetv teszi azt is, hogy
brmilyen unicode karaktert helyezznk el a szvegbe. Ekkor az egyednv #szm vagy
#xszm alak, ahol az els a decimlis, a msodik a hexadecimlis megadsi md. A kis o
hexa unicode kdja 0x0151. Ezt mint egyedet a kvetkez mdon hvhatjuk meg: ő.
Az XML ajnls lehetv teszi, hogy sajt egyedeket is ltrehozzunk. Ez az <!ENTITY
myEgyed rtk> szintaxis-sal lehetsges, amit &myEgyed;-vel hvhatunk meg s az a
hatsa, mintha kzvetlenl az rtk karakterfzrt rtuk volna le. Az egyedek definilsa a
jell nyelv nyelvtani szablyait meghatroz DTD lers rsze, ezrt erre ott mg visszatrnk.
A CDATA szakaszok
Az ebben a szakaszban lv CDATA, azaz karakteres adat interpretls nlkl taddik az XML
adatfolyamot fogad alkalmazsnak. A szakasz szintaxisa a kvetkez:
<![CDATA[Itt van a tetszoleges string]]>. A megadott karakterfzr a ]]
kivtelvel brmi lehet.
Nvterek
Mi van akkor, ha tbb orszg iskolibl kapunk tanulmnyi eredmnyeket (termszetesen XML
formtumban), s ezeket szeretnnk egy nagy XML dokumentumba foglalni? Azonban az egyik
orszgban az 1-esnek rlnek a gyerekek, mg nlunk az 5-snek. Ha egyszeren sszefznnk
az adatokat, akkor lehetetlen lenne sszehasonltani a klnbz eredmnyeket. Valahogyan
definilni kellene az sszestett XML dokumentumban a szmok ktfle rtelmezst. Ezutn
minden ttelnl megjelljk, hogy melyik ttel melyik rtelmezshez kapcsoldik, gy ksbb
egyrtelmen kibnyszhatk az rdemjegyek. Az ilyen jelleg problmk feloldsra vezettk
be a nvtr (namespace) fogalmt az XML szabvnyban. A dokumentum elejn meghatrozzuk a
lerni kvnt tpusokat, s a tagoknl megjelljk, hogy azok melyikhez tartoznak. Nvtr
hasznlata nlkl gy nzne ki az sszevont rdemjegy tblzat:
<Osztlyzatok>
<oszt>4</oszt>
<oszt>2</oszt>
</Osztlyzatok>
Melyiknek rlne egy gyerek? Az attl fgg, hogy honnan kerltek bele az adatok. Tegyk
egyrtelmv az adatok rtelmezst:
<Osztlyzatok
xmlns:AztsaJ="http://iskola.hu/Ot"
xmlns:AzEgyesaJ="http://iskola.hu/Egy" >
<AztsaJ:oszt>4</AztsaJ:oszt>
<AztsaJ:oszt>5</AztsaJ:oszt>
<AzEgyesaJ:oszt>2</AzEgyesaJ:oszt>
</Osztlyzatok>
Mit lthattunk itt? Ksztettnk kt nvteret. Az egyiknek AztsaJ, a msiknak
AzEgyesaJ a neve. A nevek tetszlegesen vlaszthatk, lehetne Jancsi s Juliska is, de nem
rt, ha a vlasztott nvtr neve utal a funkcijra. Az xmlns:nvtrnv="valami egyedi"
segtsgvel definilhatunk nvteret egy taghoz. A valami egyedi-nek az egsz vilgon
egyedinek kell lenni, gy elvileg a vilg sszes XML dokumentumt konfliktus nlkl ssze
lehetne fzni, mert a valami egyedi egyrtelmen azonostja a forrst, gy nem lehetnek
nvtkzsek. A nvtrnv egy lnv (alias) a hossz, egyedi nvtr nvre. gy a tagokban
knnyebb rjuk hivatkozni. A nvtr rkldik, gy a gyermek tagok (mint az oszt) is
hasznlhatjk a szlben (Osztlyzatok), nagyszlben, ddszlben, satbbi definilt nvteret.
A nvterek egyedi elnevezsre kt mdszer addik kzenfekven: hasznljunk valamilyen URL-
t, vagy alkalmazzuk a Windows-os GUID-ot (Globally Unique Identifier). Mivel a W3C
konzorcium, az XML gazdja nem csak a Microsoft ltal befolysolt szervezet, ezrt a legtbb
nvtr deklarciban URL-t ltunk, s nem GUID-ot, mint egyedi nvtr azonostt. Amikor egy
program feldolgozza az gy sszestett adatokat, akkor minden egyes tag feldolgozsa sorn
megnzi, hogy az adott tag melyik nvtrhez tartozik. A nvtereket tudnia kell elre ahhoz, hogy
tudja a dokumentumban tallhat szmok, mint osztlyzatok rtelmt. Ha az adatok zme egyfle
rtelmezs, gy csak egy kis szzalka kellene, hogy valami ms nvtrbe tartozzon, akkor
rdemes kihasznlni az alaprtelmezett nvtr (default namespace) lehetsgt, hogy rvidebb
dokumentumot kapjunk. Ha az elbbi pldnk bejv adathalmazban a hazai (az ts a legjobb
jegy) rtelmezs a leggyakoribb, akkor tegyk azt az alaprtelmezett nvtrr, gy csak azokat az
adatokat kell megjellni, amelyeket nem gy kell rtelmezni. Az alaprtelmezett nvteret gy
deklarljuk, hogy nem adunk lnevet a kvnt nvtrazonostnak:
<Osztlyzatok
xmlns="http://iskola.hu/Ot"
xmlns:AzEgyesaJ="http://iskola.hu/egy" >
<oszt>4</oszt>
<oszt>5</oszt>
<AzEgyesaJ:oszt>2</AzEgyesaJ:oszt>
</Osztlyzatok>
Kivtelek persze mindig vannak. A nvtrrkldsi lncot megszakthatjuk brmely ponton gy,
hogy egy res nvtrdefincit alkalmazunk a gyermekelemre, s attl a szinttl lefel mr nem
lesz rvnyes az alaprtelmezett nvtr:
<Osztlyzatok
xmlns=http://iskola.hu/Ot >
<oszt xmlns="">
<o1/>
<o2/>
</oszt>
<oszt>5</oszt>
</Osztlyzatok>
A pldban a "http://iskola.hu/Ot" alaprtelmezett nvteret kapcsoljuk ki az els <oszt> elemre,
s az 2 gyermekre (<o1/> s <o2/>). Fontos, hogy az alaprtelmezett nvtr nem vonatkozik
az attribtumokra, csak a tagokra, azaz az <oszt megj="Okos gyerek"> esetn a megj attribtum
az nem tartozik az alaprtelmezett nvtrhez (semmilyen nvtrhez sem tartozik). Ha azt
szeretnnk, hogy ahhoz tartozzon, akkor minden egyes attribtum el is ki kell rni a nvtr
eltagot: <oszt AzEgyesaJ:megj="Okos gyerek">. Ezzel mg sokszor fogunk tallkozni az
adatbzis-XML kapcsolatok lersnl.
A CSS
A CSS rszletes lerst lsd DHTML rszen bell, gy itt csak a hasznlatt mutatjuk be. A CSS
lersok jellemzen *.css fjl-okban tallhatak meg. Legyen adott egy vkonyv.css kinzet
lersunk. Ekkor az els vltozat VKONYV XML karakterfolyam megjelentsre a CSS
hasznlatot a kvetkez utastssal rhatjuk el a megjelent alkalmazs rszre:
<?xml version="1.0" encoding="WINDOWS-1250" ?>
<?xml-stylesheet type=text/css href=vkonyv.css ?>
<VKONYV>
<VENDEG sorszam=1>
...
</VKONYV>
A plda kedvrt nzznk egy nagyon egyszer CSS-t, amit a vkonyv.css fjl-ban tallhat el. A
fjl tartalma:
NEV { display: block; font-size: 20pt; font-weight: bold; }
EMAIL { display: block; font-size: 15pt; font-weight: bold; }
DATUM { display: block; font-size: 12pt; font-weight: bold; }
SZOVEG { display: block; font-size: 10pt; font-weight: bold; }
rdekessgkppen lerjuk, hogy ezt a formt azrt nevezi a szabvny cascade-nak, mert a
megjelentsi belltsok klnfle szintjeit egyms utn vizsglja meg a megjelent alkalmazs
(Ezek a szintek: a bngsz alaprtelmezsei, egy kls stluslap defincii, a <style>...</style>
tag ltal loklisan megadott lehetsg, direkt stlusjegyek: <B>, <FONT>).
Az XSL
Az XSL tbb, mint egy egyszer stluslap meghatroz nyelv, inkbb egy olyan
szvegfeldolgoznak tekinthet, mint a Perl vagy a UNIX-os AWK nyelvek. A feldolgozs
eredmny karaktersorozata termszetesen egy HTML dokumentum is lehet, amit a bngszk
meg tudnak jelenteni. Az XSL kt nll nyelvi rszbl ll:
a transzformcis nyelvbl (XSL Transformation) s
a formz (XSL Formatting Objects, XSL-FO) nyelvbl.
A transzformcis nyelv elemeivel olyan szablyokat definilhatunk, amelyek segtsgvel egy
XML dokumentumbl egy msik dokumentumot, illetve ltalnosabban fogalmazva brmilyen
byte-sorozatot hozhatunk ltre. Ennek kvetkeztben a ltrehozott dokumentum nem
szksgszeren lesz XML megfelel, hiszen ezzel a mdszerrel RTF, PDF, HTML,
dokumentumok is gyrthatk.
Az XSL Formatting Objects (XSL-FO) az XSL ajnls msodik rsze. Az XSL-FO egy olyan
rszletes modell, amellyel XML szintaxis stluslapokat hozhatunk ltre, amik a CSS-hez
hasonlan meghatrozzk, hogyan kell az XML dokumentumnak megjelennie. Az XSL
Formatting Objects (XSL-FO) a HTML+CSS formtum megjelentsnl sokkal tbbet nyjt.
Lehetsg van a klnbz tipogrfiai, a nyomdai kiadvnyoknl megszokott oldal s
szvegformzsi elemek (fejlc, lblc, tartalomjegyzk, ...) szablyainak lersra. Az XSLFO
dokumentumokat ltalban XSL transzformcival hozzuk ltre. A szemlletessg rdekben
elksztettnk egy vkonyv1.xsl fjl lerst, amit az albb lthat mdon a CSS-hez hasonlan
pthetnk be egy XML dokumentumba:
<?xml version="1.0" encoding="WINDOWS-1250" ?>
<?xml-stylesheet type="text/xsl" href="vkonyv1.xsl"?>
<VKONYV>
<VENDEG sorszam="1">
...
</VKONYV>
A teljessg kedvrt nzzk meg a vkonyv1.xsl fjl tartalmt is:
<?xml version="1.0" encoding="WINDOWS-1250" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<html><body> <H1>VENDGKNYV</H1>
<xsl:apply-templates/>
</body></html>
</xsl:template>
<xsl:template match="VKONYV"> <br/> <xsl:apply-templates/> <hr/>
</xsl:template>
<xsl:template match="VKONYV/VENDEG"> <xsl:apply-templates/>
</xsl:template>
<xsl:template match="VKONYV/VENDEG/NEV">
<hr/>Neve: <b>
<xsl:value-of select="."/> </b>
</xsl:template>
<xsl:template match="VKONYV/VENDEG/EMAIL">
Email cme: <b>
<xsl:value-of select="."/> </b>
</xsl:template>
</xsl:stylesheet>
Az bra mutatja a VKONYV XML adatfolyam kinzett akkor, amikor a vkonyv1.xsl stluslapot
hasznltuk. szrevehet, hogy ez a mdszer a megjelentend adatok krt is knnyen kezelni
tudja (itt most csak a Nv s Email lett megjelentve). Az XSL stluslap nyelv egy XML
alkalmazs. Az XSL lapok a mintailleszts mdszert hasznljk az egyes elemek
megjelentshez. Itt a tag nevek xsl:-tal kezddnek, utalva arra, hogy itt olyan XML elemek
vannak, amiket az XSL alkalmazs keretben akarunk hasznlni. Ez a megolds egy XML nvtr
(namespace) szabvnyon alapul, aminek az a clja, hogy az egyes XML alkalmazsok tag-jei
kln-kln nvtrben legyenek (hasonlan a C++ nvtereihez). Itt az xsl:-ben az xsl sz a
nvtr neve. Rviden nzzk t, hogyan hatrozza meg a megjelenst a vkonyv1.xsl tartalma. A
fjl els sora arra utal, hogy ez a fjl egy XML adatfolyamot tartalmaz. A msodik sor az xsl
nvteret vezeti be. A 3-7 sor azt mondja, hogy az egyes elemek megjelentse eltt rjuk ki a az
eredmny karaktersorozatba a <html><body><H1>VENDGKNYV</H1> fzrt, majd
alkalmazva a mintalersokat (apply-templates) kezdjk el feldolgozni az XML fa egyes elemeit.
Az elem feldolgozsok utn a befejez lps az, hogy a ksztend html dokumentumot is
befejezzk, azaz kirjuk a </body></html> karakterfzrt. A kvetkez template szakaszok arrl
rendelkeznek, hogy mit kell csinlna a fa bejrsa sorn, illetve akkor, amikor egy konkrt XML
elemnl tart a feldolgozs. A <xsl:template match="VKONYV/VENDEG/NEV"> sorban a
"VKONYV/VENDEG/NEV" kifejezst XPath-nak hvjuk. Az XSL vezrl mkdst jobban
tgondolva vilgoss vlik, hogy az applytemplates kulcsszval egy rekurzv defincit tudunk
megadni a feldolgozsra. A <xsl:value-of select="."/> mindig az aktulis faelem (node)
rtkt adja vissza.
Mozgsba lendl a kd
Az id mlsval egy msik terleten is sokat fejldtt a HTML, illetve annak felhasznlsa.
Kezdetben elg volt, ha egy dokumentumot ltrehoztunk, annak tartalma nem, vagycsak ritkn
vltozott. Ksbb felmerlt az igny arra, hogy a gyakran vltoz HTML oldalak tartalmt
dinamikusan hozzk ltre. Kezdettl kt irnyvonal ltezett, attl fggen, hogy a kiszolglra,
vagy pedig a dokumentumot felhasznl gyflprogramra bztk a feladatot. Ez utbbi megolds
nem biztos, hogy mkdik (senki sem garantlja, hogy az gyflprogram kpes ezt a feladatot
vgrehajtani), radsul tbb szempontbl elnytelen is: ha a cl az, hogy 100 dologbl csak egy
valami jelenjen meg az gyfl kpernyjn, felesleges mind a szzat elkldeni neki, majd ott
kivlasztani a szksges egyet egyszerbb, biztonsgosabb s olcsbb, ha mr eleve csak a
szmra rdekes adatok kerlnek hozz. Ehhez viszont a kiszolglnak kell erfesztseket
tennie. A kiszolgloldali megoldsok kzs tulajdonsga, hogy a kiszolgl mindig ksz,
feldolgozhat HTML kdot kld az gyflnek a kd tartalma viszont dinamikus, idrl idre
vltozik. Magyarn: a cl az, hogy HTML kdot generljunk. A legkzenfekvbb megolds az
volt, ha ksz, teljes programokat rtak az egyes feladatok vgrehajtsra. A programok
szabvnyos bemeneten (stdin) keresztl kaptk a bemen adatokat, majd a szabvnyos kimeneten
(stdout) tovbbtottk az ltaluk ltrehozott kdot. A webkiszolgl s a programok kztti
kapcsolatot az n. CGI (Common Gateway Interface) valstotta meg, gy a programok ltszlag
a kiszolgl rszeknt mkdtek (s mkdnek ma is). Ezt a mdszert CGI programozsnak
nevezzk, s br nhny terleten mg ma is hasznlatos, htrnyai miatt lassan kiszorul. Mert:
mit tehetnk, ha azt szeretnnk, hogy a CGI program mostantl ms kdot generljon? Egy:
jrarjuk, jrafordtjuk s kicserljk a programot. Kett: Eleve olyan CGI alkalmazst runk, ami
a bemen adatok segtsgvel paramterezhet. St, mi lenne, ha a bemen paramter egy
valamilyen formban meghatrozott parancssorozat, vagy akr egy valamilyen nyelven megrt
script kd lenne? A CGI program azt rtelmezi, vgrehajtja, s visszaadja az eredmnyt ez a
megolds a scriptnek ksznheten teljesen dinamikus s brmire hasznlhat lenne s az is. J
plda erre a Perl nyelv, ahol a webprogramozs lelke a perl.exe. Bemenete egy Perl nyelven rt
script, kimenete pedig a ksz HTML kd.
ASP a lthatron
A fenti megolds egy kicsit mgis knyelmetlen: milyen j lenne, ha a HTML oldalak ltalban
statikus rszt hagyomnyos mdon, akr egy knyelmes WYSIWYG szerkesztvel
kszthetnnk, s csak a dinamikus rszt kellene programozni! Az Active Server Pages (ASP)
elve pontosan ez: amikor azt mondjuk, ASP, tulajdonkppen egy HTML kdba gyazott,
specilis programozsi mdszerrl beszlnk. (Fontos, hogy az ASP nem egy programozsi
nyelv, hanem csak egy keretrendszer). Az ASP oldal vgrehajtsakor a webkiszolgl
vgigszalad az oldal tartalmn, s ha abban ASP scriptrszletet tall, vgrehajtja. A HTML oldal
s a script ltal esetleg visszaadott kdrszletek egyttesen kpezik az eredmnyt, amit azutn az
IIS elkld a bngsznek. Lssunk egy pldt:
<HTML><HEAD><TITLE></TITLE></HEAD>
<BODY>
<%
Response.Write("<center>Hello World!</center>")
%>
</BODY>
</HTML>
A HTML kd belsejben tallhat <% s %> jelzi az ASP kd kezdett s vgt. A kztk
tallhat kdrszlet elvileg soha nem jut el az gyflhez, csakis a kd futtatsa sorn keletkez
kimenet (ami esetnkben a Response.Write() metdusnak tadott szvegrsz). Az ASP scriptek
begyazsnak mdjrl kicsit ksbb mg lesz sz, most lssuk, mi lesz az eredmny:
<HTML><HEAD><TITLE></TITLE></HEAD>
<BODY>
<center>Hello World!</center>
</BODY>
</HTML>
Az ASP kd ltal generlt kimenet teht sszemosdott a HTML kddal. Ez j, hiszen rrnk az
oldalt teljes egszben elkszteni egy kls, knyelmes HTML szerkesztvel, majd utlag
begyazhatjuk az ASP kdot. Egy gondolat az ASP hasznlatrl: mint lthat, az ASP az IIS
webkiszolgl rsze. A Windows NT 4.0 Option Pack segtsgvel telepthet Internet
Information Server 4.0 (Windows NT 4.0 Workstation-n Personal Web Server) mr tartalmazza
az ASP kezelshez szksges komponenseket, amelyek a Windows 2000 IIS5
webkiszolgljban termszetesen alaprtelmezett tartozkok. Ha azt szeretnnk, hogy egy fjlt
az IIS tnyleg ASP oldalknt kezeljen, adjunk a fjlnak .asp kiterjesztst (ha ezt nem tesszk, a
kd vgrehajts nlkl eljut az gyflhez, mintha a HTML oldal tartalma lenne).
Az ASP objektummodell
Az .asp oldalak programozst, a HTTP kommunikci, a webkiszolgl egyes szolgltatsainak
elrst kln objektummodell segti. Az ASP objektummodelljnek minden elemt elrhetjk az
.asp oldalak kdjaibl. A ksbbiek sorn mindegyik ASP objektumot bemutatjuk rszletesen is,
most vessnk egy rpke pillantst a teljes objektummodellre s annak elemeire.
A vlaszpuffer
Az .asp oldal ellltsa termszetesen tbb lpsben trtnik, az oldalban tallhat scripttl
fggen elfordulhat az is, hogy az oldal tartalmnak egy rsze csak bizonyos vrakozsi id
utn ll rendelkezsre. Ilyenkor dnthetnk, hogy a mr ksz tartalmat elkldjk-e az gyflnek,
majd vrunk a folytatsra, vagy kivrjuk, amg a teljes oldal elkszl, s csak a munka legvgn
kldjk a komplett vlaszt. Ez utbbi esetben a kimenet egy pufferbe kerl. A pufferels az
IIS5-ben alaprtelmezsben mkdik, mg az IIS4-ben alaprtelmezsben ki van kapcsolva. A
Response objektum segtsgvel mi magunk is kezelhetjk a puffert: mindenekeltt, a
Response.Buffer property-nek False rtket adva letilthatjuk, True segtsgvel pedig
engedlyezhetjk a puffer hasznlatt.A Clear() metdus kirti a puffert (Legynk vatosak! A
kls HTML kd is a pufferbe kerl, trlskor az is elveszik!), a Flush() pedig elkldi azt, ami
addig a pufferbe kerlt, majd csak azutn trli a tartalmt. Az oldal feldolgozst brmikor
megszakthatjuk a Response.End() meghvsval. Ha az oldal vgrehajtsa befejezdik,
termszetesen a puffer teljes tartalma az gyflhez kerl. Ha nyom nlkl szeretnnk befejezni a
tnykedsnket, az End() meghvsa eltt hasznljuk a Response.Clear() metdust.
Tartalom s karakterkszlet
A HTTP vlasz sokfle tartalmat hordozhat magban. Egyltaln nem egyrtelm pldul, hogy
egy HTML dokumentum milyen karakterkszlettel rdott. St, mg az sem biztos, hogy a vlasz
egy HTML oldal. Response.Charset = az oldalban hasznlt karakterkszlet, kdtbla. Ha
normlis magyar betket is hasznlni szeretnnk, lltsuk ISO-8859-2"-re. Termszetesen
ugyanezt HTML-bl, a <META> elem segtsgvel is megtehetjk, az albbi kt plda teht
egyenrang (habr a fejlcben belltott karakterkszlet ltalban fellbrlja a HTML-ben
meghatrozottat ez a bngszn mlik):
<%
Response.Charset = "ISO-8859-2"
%>
<HTML><HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-2">
</HEAD>
...
Response.ContentType = a vlasz MIME tpusa (a tartalom tpusa). HTML (s .asp) oldal esetn
az rtke text/html", ha nem lltjuk be, ez az alaprtelmezs is. Ennek a jellemznek az rtkt
akkor rdemes mdostani, ha a visszakldtt tartalom nem HTML, hanem mondjuk egy
kpfjl,mint albb:
<%
Set oStream = Server.CreateObject("ADODB.Stream")
oStream.Type = 1 ' adTypeBinary
oStream.Open
oStream.LoadFromFile(Server.MapPath("ms.jpg"))
Response.ContentType = "image/jpeg"
Response.BinaryWrite( oStream.Read )
%>
A fent hasznlt Response.BinaryWrite() metdus hasonl a .Write()-hoz, a klnbsg csak annyi,
hogy ez binrisan, minden megkts s konverzi nlkl rja a kimenetre az adatokat. A Server
objektum MapPath() metdusrl ksbb lesz sz, a lnyege az, hogy egy relatv fjlnvbl
ellltja a fjl fizikai elrsi tjt a webkiszolgln. Egy nlunk mg elhanyagolt jellemz
maradt utoljra: a Response.Pics jellemz rtke jelezheti, hogy egy adott oldal milyen
mrtkben s mennyisgben tartalmaz erszakra, szexre, meztelensgre s csnya nyelvre utal
jeleket. Ha ez az gynevezett PICS-Label (ami egybknt nem ms, mint egy specilis HTTP
fejlc) utazik az oldallal, a szrk kpesek lennnek kivlogatni a gyerekszobba nem val
tartalmat Ez az IIS belltsoknl egybknt webhelyenknt, knyvtranknt, vagy akr
fjlonknt is bellthat.ASP-ben, a fenti belltst kdbl a kvetkez mdon rhetjk el:
<%
Response.Pics( "PICS-1.0 ""http://www.rsac.org/ratingsv01.html"" l by ""[mICK]"" on
""2001. 01.08T21:26+0100"" exp ""2002.01.08T12:00 +0100"" r (v 3 s 0 n 0 l 0))" )%>
Gyorsttrak a cache
Mivel ugyanarra a tartalomra sokan, sokszor kvncsiak, s nem szksges a dolgokat jra s jra
ltrehozni s letlteni az eredeti szrmazsi helykrl, ezrt hasznlnak cacheeket. Gyorsttrat
alkalmaz a bngsznk, sajt gyorsttrbl dolgozik az Internet-szolgltat, gynevezett
reverse-cache segti a webkiszolglkat a krsek gyors kiszolglsban. ltalnossgban
elmondhatjuk, hogy aki tud, tartalkolja a dolgokat, htha ksbb mg szksg lehet r. Ezzel
ltalban nincs is baj, de lehetnek dolgok, amelyeket felesleges elmenteni, mert a nevk, esetleg
mretk hiba vltozatlan, tartalmuk gyakran eltr. Kell-e jobb plda erre, mint a dinamikusan
ltrehozott weboldalak? Szerencsre a gyorsttrak tbbsge tvirnythat a tartalom nmaga
hordozhat olyan jeleket, amiket felismerve a gyorsttr nem prblkozik a trolsval. Ilyen
jelek (termszetesen HTTP fejlcek) ltrehozsban segt neknk a Response objektum albbi
nhny szolgltatsa: Response.CacheControl = Az oldal trolsnak szablyai. Ha rtke
private, akkor proxy kiszolglk nem, csak s kizrlag privt, bngszbeli gyorsttrak
trolhatjk az adatokat. Ez az alaprtelmezs is. Ha a jellemz rtke public, akkor az oldalt
brmelyik proxy kiszolgl trolhatja. Ha azt szeretnnk, hogy egyltaln senki ne trolja az
oldalunkat, a property-nek adjuk ezt az rtket: no-cache. Ha trolunk is valamit, idnknt
rdemes frissteni. Minden trolt tartalomnak van egy lejrati ideje, amit mi magunk llthatunk
be a Response.Expires s Response.ExpiresAbsolute jellemzk segtsgvel. Az elbbi az adott
pillanattl szmtott lejrati idt jelenti (percben), mg az utbbinak konkrt idpontot adhatunk
meg, pl.:
<% Response.ExpiresAbsolute= #May 31,2001 13:30:15# %>
Az oldal trolst elkerlhetjk gy is, ha a lejrati idt -1-re lltjuk:
<% Response.Expires = -1 %>
Rgebbi, a HTTP 1.1 szabvnnyal nem kompatbilis kiszolglk nem rtelmezik a CacheControl
rtkt, ezrt nha specilis HTTP fejlcre van szksg:
<% Response.AddHeader "Pragma", "no-cache" %>
A legbiztonsgosabb termszetesen az, ha mindhrom mdszert (CacheControl, Expires, Pragma)
kombinljuk. Ha nem akarunk ASP-t hasznlni, ezt a szoksos mdon, <META> elemek
segtsgvel tisztn HTML-bl is megtehetjk:
<META HTTP-EQUIV="CacheControl" CONTENT="no-cache">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">
Cookie
A cookie kis adatcsomag, amit a kiszolgl krsre a bngsz az gyfl szmtgpn trol, s
szksg esetn visszakldi azt. Alapjban vve kt klnbz tpus cookie ltezik: az els tpus
csak addig l, amg a bngszvel egy kiszolglnl tartzkodunk. A bngsz bezrsval az
ilyen cookie tartalma elveszik. Ezeket a cookie-kat elssorban tmeneti clra hasznljuk (pldul
az ASP Session fenntartsra). A msik fajta, felhasznli szemmel gyakrabban megfigyelt
cookie annyiban klnbzik az elztl, hogy a bngsz bezrsakor nem veszik el, hanem a
szmtgp lemezre kerl. Az ilyen cookie-knak rvnyessgi idejk van. Amg ez az
rvnyessgi id le nem jr, addig a bngsz megrzi az rtkket, s tartalmukat minden egyes
ltogatskor visszakldi a kiszolglnak. A kt cookie-fajtt csak a lejrati id klnbzteti meg
egymstl. Lssuk teht, hogyan kldhetnk egyszer, tmeneti clra hasznlhat cookie-t a
bngsznek:
<%
Response.Cookies("nev") = "ertek"
%>
Ha a felhasznl legkzelebb felnk jr, ezt az adatot gy olvashatjuk ki:
<%
s = Request.Cookies("nev")
%>
Egy cookie nem csak egy szveget tartalmazhat, hanem tbbet is, egyfajta tblzatot, almezket:
<%
Response.Cookies("nev")("mezo1") = "ertek1"
Response.Cookies("nev")("mezo2") = "ertek2"
%>
A .HasKeys metdus segtsgvel eldnthetjk, hogy egy cookie egyszer szveg, vagy almezk
gyjtemnye, s ettl fggen kezelhetjk is:
<%
If Request.Cookies("nev").HasKeys Then
For Each mezo In Request.Cookies("nev")
Response.Write( Request.Cookies("nev")(mezo))
Next
Else
Response.Write( Request.Cookies("nev") )
End If
%>
A .HasKeys elrhet a Response objektumon keresztl is. Erre azrt van szksg, mert ha egy
szveges tpus cookieban almezket hozunk ltre, elveszik a szveges rtk s fordtva, ha
almezkkel rendelkez cookie-nak szveges rtket adnnk, elvesznnek az almezk s azok
rtkei. A cookie rvnyessgt a Response objektum segtsgvel korltozhatjuk idben s
trben:
<%
Response.Cookies("nev").Expires = "01-Jan-2003"
Response.Cookies("nev").Domain = "erise.hu"
Response.Cookies("nev").Path = "/dir1/dir2"
%>
Az .Expires jellemz rtke hatrozza meg, hogy az cookie meddig marad letben. Ha nem adjuk
meg, a bngsz lezrsakor elveszik. A .Domain jellemz segtsgvel bellthatjuk, hogy a
bngsz milyen domainek elrse esetn kldje vissza a cookie-t. A .Path pedig kiszolgln
belli rszletezst jelent: ha kt azonos nev cookie ltezik, ugyanarra a domain-re, akkor annak
az rtkt fogjuk visszakapni, ahol a .Path rtke kzelebb van a valsghoz. Ha teht az oldal a
/dir1/dir2 knyvtrak mlyn tallhat, a kt cookie .Path rtke pedig a /dir1 s a /dir1/dir2,
akkor az utbbit fogjuk viszontltni. Ha azt szeretnnk, hogy egy cookie az adott pillanattl
szmtott
egy vig legyen rvnyes, hasznljuk a DateAdd() s a Now fggvnyt:
<%
Response.Cookies("egyevigjo").Expires = DateAdd( "yyyy", 1, Now)
%>
A Request kollekcik
A Request objektum lehetv teszi, hogy a klnbz kollekcikban tallhat adatokat a forrs
megadsa (pl. Request.Form(nev)) nlkl, kzvetlenl a Request(nev) hvssal rjk el.
Ilyenkor az IIS az sszes kollekcin vgigfut, s visszaadja az adott nev elem els elfordulst.
A sorrend a kvetkez:
QueryString
Form
Cookies
ClientCertificate
ServerVariables
Nha hasznos lehet, de ltalban nem j, ha ezt a kzvetlen hivatkozst hasznljuk: egyrszt,
feleslegesen terheljk vele a kiszolglt, msrszt pedig, nem lehetnk biztosak abban, hogy az
adat onnan jtt, ahonnan mi vrtuk. Kpzeljk el, hogy egy krdv nv mezjt szeretnnk
beolvasni, ehelyett azt kapjuk, amit a felhasznl kzzel begpelt az URL vgre!
Jl lthat, hogy az eddig trgyalt objektumok, a Request s a Response mindig egy aktulis
HTTP krst s az arra adott vlaszt jelkpezik. A kvetkez krs esetn mindkt objektumbl
j keletkezik. A kvetkezkben az alkalmazs (Application) s a munkamenet (Session)
objektumokrl lesz sz. Ezek az objektumok mr nem tnnek el ilyen egyknnyen az IIS
memrijbl, hiszen feladatuk pontosan az, hogy tbb krst is tfog mveleteket, kzponti
adattrolst tegyenek lehetv.
Az ASP munkamenet
Az ASP munkamenet (Session) clja teljesen hasonl, csakhogy ez az Application-nel ellenttben
nem felhasznlk kztti, hanem egy adott felhasznl mveletei fltti globlis objektum. Ha
gy tetszik, szmos Request s Response fltt uralkod valami, ami megmarad egszen addig,
amig a felhasznl el nem hagyja a webhelyet, vagy be nem csukja a bngszjt. Termszetesen
Session objektumbl mr nem csak egy van: ahny felhasznl, annyi Session. Az IIS egy kis
cookiet kld minden felhasznlnak, akit azutn felismer mindaddig, amig a cookie megmarad
(mrpedig az csak addig marad meg, amig a bngszt be nem zrjuk). Nzzk csak meg, mit
mond az IIS egy teljesen tlagos krsre:
GET /default.asp HTTP/1.1
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Mon, 12 Feb 2001 22:21:53 GMT
Content-Length: 2354
Content-Type: text/html
Set-Cookie:ASPSESSIONIDGQGQGVDQ=IBGLAICAJDOELPGDLNDPODPM;path=/Cache-
control: private
A Session objektum
A Session.SessionID jellemz visszaadja a Session azonostjt. Ez az azonost sokszor j
szolglatot tehet, hiszen segtsgvel azonostani lehet a visszatr felhasznlt. (Mieltt valaki
flrerten: visszatr alatt most azt rtjk, aki a Session idkorlt lejrta eltt visszatr, vagy
azalatt barangol oldalainkon). A Session.LCID s a Session.CodePage jellemzk a szoksos
locale s karaktertbla-azonostk; az objektum negyedik, s egyben utols jellemzje pedig a
Session.TimeOut, amit tlltva egy adott munkamenet erejig fellbrlhatjuk az alaprtelmezett
20 perces idkorltot. Sokkal rdekesebb ennl az, amire a Session objektumot eredetileg
kitalltk: rhatunk bele s olvashatunk belle, gyakorlatilag brmit; a belert rtk pedig
termszetesen megmarad mindaddig, amg az objektum letben van. Lssuk, hogyan trolhatunk
el egy rtket, hogy azutn ksbb felhasznlhassuk:
Session("counter") = 1
Session("counter") = Session("counter") + 1
x = Session("counter")
A Session.Contents egy kollekci, aminek segtsgvel visszanyerhetjk mindazt, amit sikerlt az
objektumba belaptolnunk (anlkl, hogy tudnnk a nevt), valahogy gy:
For Each oItem In Session.Contents
Response.Write(Session(" & oItem & ") = " & Session(oItem) & "<br>" )
Next
Ebbl a kollekcibl persze trlni is lehet. Az albbi plda els kt sora egy-egy elemet (pl. a
counter nevt, vagy ppen a msodikat), mg a harmadik a teljes tartalmat trli:
Session.Contents.Remove("counter")
Session.Contents.Remove(2)
Session.Contents.RemoveAll()
A tartalom teht ilyenkor elveszik, de az objektum megmarad. Azrt fontos ezt megemlteni, mert
a Session objektumot nmagt is lehet trlni:
Session.Abandon()
A Session.Abandon() hvs utn (termszetesen miutn az adott oldalt mr vgleg kikldtk) a
Session objektum trldik a memribl. A felhasznl legkzelebbi jelentkezsekor j, res
objektum jn majd ltre. Termszetesen nem csak szmot s szveget trolhatunk a Session-ben,
hanem akr komplett objektumokat is. Valahogy gy:
<%
Set oStream = Server.CreateObject("ADODB.Stream")
oStream.Type = 1 ' adTypeBinary
oStream.Open
oStream.LoadFromFile( Server.MapPath("ms.jpg") )
Set Session("mypic") = oStream
%>
A kiolvass kd,a mi kiolvassa kpet s elkldi a bngsznek:
<%
If IsObject( Session("mypic") ) Then
Set oStream = Session("mypic")
Response.ContentType = "image/jpeg"
Response.BinaryWrite( oStream.Read )
Else
%>
<HTML><HEAD></HEAD>
<BODY>A kp nem tallhat.</BODY>
</HTML>
<%
End If
%>
A kd elejn tallhat ellenrzs azrt kell, mert ha a Session(mypic) nem tartalmazza mg az
objektumot, akkor az rtkads azonnal hibt jelezne. Az IsObject() fggvny rtke akkor igaz,
ha a neki paramterknt tadott vltoz tnyleg egy objektum ha nem az, a kp helyett egy
egyszer HTML hibazenetet kldnk vissza. Figyeljk meg, hogy az objektumok kezelsnl
a ms tpus vltozkkal ellenttben hasznlnunk kell a Set utastst:
Set oStream = Server.CreateObject("ADODB.Stream")
Set Session("mypic") = oStream
Set oMyObj = Session("mypic")
A global.asa fjl
A global.asa fjl tulajdonkppen az Application objektum lersnl kellene, hogy elkerljn. A
fjl azonban tartalmazhat a Session objektumra vonatkoz rszeket is, ezrt a trgyalstl nem
tekinthetnk el. A global.asa fjl egy specilis llomny, amit az ASP alkalmazs
gykrknyvtrban lehet elhelyezni (az alaprtelmezett ASP alkalmazs gykrknyvtra
pldul termszetesen az \inetpub\wwwroot). A fjl arra val, hogy ebben helyezhessk el a
globlis objektumokat ltrehoz s esemnyeket kezel kdrszleteket, gyismint:
Az Application objektum esemnyeit (ltrehozst, megsemmistst) kezel rutinok
(Application_OnStart s Application_OnEnd)
A Session objektumok ltrehozst s megsemmistst kezel eljrsok (Session_OnStart s
Session_OnEnd)
Globlis objektumok ltrehozsa az <OBJECT> elem segtsgvel
Tpusknyvtrak (type libraries) betltse
A Session_OnStart szubrutin rtelemszeren az adott Session ltrejttekor, a Session_OnEnd
pedig az objektum megsemmislse eltt fut le. Ezeket a rutinokat a global.asa fjlba
<SCRIPT></SCRIPT> elemek kz kell megrnunk, pldul:
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Session_OnStart
Session("starttime") = Now
Set Session("oFSO") = Server.CreateObject("Scripting.FileSystemObject")
End Sub
Sub Session_OnEnd
Set Session("oFSO") = Nothing
End Sub
</SCRIPT>
A fenti pldban a Session ltrejttekor belerjuk a pontos idt, s ltrehozunk egy
FileSystemObject objektumot, amit a tovbbiak sorn majd knyelmesen hasznlhatunk, a
Session_OnEnd szubrutinban pedig felszabadtjuk az FileSystemObject objektum ltal lefoglalt
memriaterletet. Objektumokat globlisan is ltrehozhatunk, az <OBJECT> elem segtsgvel,
pldul:
<OBJECT RUNAT=Server SCOPE=Session ID="oGlobFSO"
PROGID="Scripting.FileSystemObject">
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
...
</SCRIPT>
Az gy ltrehozott objektumokra azutn alkalmazsszerte a .asp oldalakban kzvetlen nevkkel
hivatkozhatunk:
<%
If oGlobFSO.FileExists(strFileName) Then
...
End If
%>
Az <OBJECT> elem SCOPE paramtere hatrozza meg, hogy az objektum hny pldnyban
jjjn ltre. A paramter rtke esetnkben termszetesen session, ami azt jelenti, hogy minden
egyes Session ltrejttekor jabb FileSystemObject keletkezik. A StaticObjects kollekci
Egyetlen kollekci maradt a vgre: a Session.StaticObjects kollekci a global.asa-ban session
scope-pal ltrehozott objektumokat tartalmazza. A kollekci tartalmt a szoksos mdon rhetjk
el:
For Each oItem In Session.StaticObjects
Response.Write( "Session(" & oItem & ") = " & Session(oItem) & "<br>" )
Next
Az ASP alkalmazs
Egy ASP alkalmazs tulajdonkppen nem ms, mint egy adott knyvtrban s az sszes
alknyvtrban tallhat .asp kdok halmaza. Csakhogy a valsgban ennl kicsit bonyolultabb a
helyzet, hiszen ha csak errl lenne sz, nem lett volna szksg az alkalmazsok ltrehozsra.
Mint tudjuk, a HTTP eredetileg llapotmentes vilg: jn egy krs, mi kiszolgljuk, azutn jn a
kvetkez, s a kiszolglnak vglis fogalma sincs arrl, hogy melyik krst ppen ki kldte.
Lehet, hogy ugyanaz a felhasznl, lehet, hogy a vilg kt vgrl kt olvas jelentkezett. Mgis,
milyen j lenne, ha lenne egy globlis valami, amiben adatokat, st, akr ksz objektumokat
trolhatunk, s brmikor szksg van r, csak fel kell nylnunk rte, s hopp, mris a
rendelkezsnkre ll! Nos, pontosan erre val az Application objektum. Segtsgvel a
felhasznlk, krsek kztt adatokat oszthatunk meg egyszeren, anlkl, hogy pldul lemezre
kellene rnunk azokat. Az Application objektumba rt informci mindaddig megmarad, amg az
adott alkalmazst (gyakorlatilag az IIS-t) jra nem indtjuk. Amint az brn is lthat, az ASP
alkalmazs egy globlis objektum a felhasznlk krsei s az azokra adott vlaszok fltt.
Fontos, hogy Application objektum minden ASP alkalmazsban csak egy van.
Egy Applicationhoz vlaszthat futtatsi jogosultsgok:
None: Csak statikus mkds engedlyezett. Scriptek s programok nem futtathatk. Ezt
hasznljuk akkor, ha nem hasznlunk aktv komponenseket
Scripts only: Scriptfjlok vgrehajtsa engedlyezett, de klnll programok tovbbra sem
futtathatk. Ez az alaprtelmezett s ajnlott bellts
Scripts and Executables: A legveszlyesebb, CGI-kompatibilits miatt megtartott opci.
Ilyenkor a scriptek mellett a knyvtrakban tallhat programok is lefuthatnak.
Az alkalmazs vdelme
A meghatrozs tulajdonkppen hibs, ugyanis nem a webalkalmazsunkat, hanem magt az IIS-t
vdjk a sajt a tbbi webalkalmazstl). Hogy mirt kell ez a vdekezs? A webalkalmazsok
sajt tjaikat jrjk. Az esetek tbbsgben (pldul .dll fjlokban megrt) kls komponenseket
hasznlnak, hibtlan program pedig, mint tudjuk, nincsen. A .dll-ek kzismert tulajdonsga, hogy
a szlprocessz cmtartomnyba tltdnek be, s ha a .dll kszl elhallozni, a szlprocesszt is
magval rntja. gy lehet egyetlen .dll segtsgvel a nullval egyenlv tenni a webkiszolglt.
Pontosan az ilyen esetek elkerlsre talltk ki az alkalmazsok vdelme (Application
Protection) opcit. Egy (.dll-eket tltget) webalkalmazs (kvzi maga a .dll) hrom mdon
tltdhet be:
(Low): az IIS processzbe. Ez gyors, de veszlyes mkdst eredmnyez, hiszen ha a .dll
kipukkan, megy vele az IIS is.
(Medium Pooled): egy, az IIS processztl elvlasztva fut processzbe. A processz neve
dllhost.exe, megleshetjk a Task Managerben. Minden Medium szint webalkalmazst
ugyanaz a dllhost.exe futtat, teht ha a tbb Medium szint alkalmazsbl egy elhasal,
magval rntja a tbbit is az IIS viszont talpon marad. Ez az alaprtelmezs, mert
viszonylag biztonsgos, s nem ignyel sok erforrst.
(High Isolated) A High szintre helyezett webalkalmazsok mindegyike sajt dllhost.exe-t
kap, amibe annyira s annyiszor rghat bele, ahnyszor csak akar, nmagn kvl senkinek
sem rthat vele. Akit rdekel, kiprblhatja: nyisson meg egy Task Manager-t, lltsa a fut
processzeket nv szerint sorba, s megltja, hogy n darab dllhost.exe fut. Majd lltson egy
webalkalmazst High szintre, s nyisson meg egy oldalt belle: a fut dllhost.exe-k szma
n+1- re n (az Unload hatsra pedig rtelemszeren eggyel cskken). Ez a
legbiztonsgosabb megolds, de a gyakori kontextusvlts miatt sok erforrst ignyel, ezrt
a Microsoft nem ajnlja, hogy egy kiszolglra 2-3-nl tbb ilyen szint alkalmazs kerljn.
Az Application objektum
Az Application objektum teht nem ms, mint egy kzs trolhely, amit az adott webalkalmazs
minden scriptje elr. Az Application objektumban adatokat, objektumokat trolhatunk el, hogy
majd ksbb kiolvassuk onnan (csakgy, mint a Session objektumnl):
Application("counter") = 12
Set Application("myObject") = oMyObject
Set oMyObject2 = Application("myObject")
Amint az a fenti pldban is lthat, az Application objektumban is trolhatunk ms
objektumokat. Nem szabad elfelejtkezni azonban kt nagyon fontos dologrl:
Az objektumokat Set rtkads segtsgvel kell az Application objektumba betlteni, s a
kiolvassuk is a Set parancs segtsgvel trtnik.
Nem minden objektum alkalmas arra, hogy az Application objektumba tltsk! Az IIS
ugyanis tbbszl alkalmazs, egyidben tbb felhasznlt szolgl ki. Az Application
objektumba csak olyan objektumokat tlthetnk be, amelyek tbbszl (FreeThreaded)
vgrehajtsi mdban kpesek mkdni s gynevezett Both threading-modellt alkalmaznak.
Az albbi plda az Application objektumot hasznlja egy primitv szmll ltrehozshoz:
<%
Application.Lock
Application("count") = Application("count") + 1
Application.Unlock
Response.Write("dv! Te vagy az IIS jraindtsa ta a(z) " & Application("counter") &
ltogat.")
%>
A plda a valsgban azrt hasznlhatatlan, mert a webalkalmazs jraindulsnak pillanatban
reboot vagy unload esetn az Application objektum tartalma, ezzel pedig a szmll rtke is
elveszik. Az els s a harmadik sorban lthat Application.Lock() s Application.Unlock()
metdus hasznlatra azrt van szksg, mert az Application globlis objektum, s elfordulhat,
hogy egyszerre tbb felhasznl szeretn rni ugyanazokat az adatokat. Az tkzsek elkerlse
vgett minden rsmvelet eltt az objektumot zrolni kell, majd a lehet legrvidebb idn bell
az Unlock() metdus segtsgvel fel kell oldani, ugyanis mg az Application objektum zrolva
van, senki ms nem frhet hozz, mint az, aki eredetileg zrolta azt. Ha mi nem oldannk fel a
zrolst, az IIS az oldal vgrehajtsa utn, de legksbb a scriptfuttats idtllpsekor
felszabadtja azt. Termszetesen az Application objektum tartalmt is elrhetjk kollekcikon
keresztl, erre szolgl az Application.Contents kollekci:
For Each oItem In Application.Contents
Response.Write(Application(" & oItem & ") = " &Application(oItem) & "<br>" )
Next
Ebbl a kollekcibl is pontosan ugyangy lehet trlni elemeket, mint a Session-bl:
Application.Contents.Remove("counter")
Application.Contents.Remove(2)
Application.Contents.RemoveAll()
Az els sor a "counter" rtkt, a msodik sor az Application objektumon belli msodik
vltozt, mg a legutols sor az Application objektum teljes tartalmt trlte. Az
Application.StaticObjects kollekci a global.asa fjlban az <OBJECT> elem segtsgvel,
Application scope-ban ltrehozott vltozkat tartalmazza. A kollekci pontosan gy
hasznlhat, mint az Application.Contents:
For Each oItem In Application.StaticObjects
Response.Write(Application(" & oItem & ") = " &Application(oItem) & "<br>" )
Next
Az egyetlen klnbsg az, hogy ebbl a kollekcibl nem trlhetnk elemeket (azok elvesznek
maguktl a webalkalmazs jraindtsakor).
Objektumok s tpusknyvtrak
Az objektumok ltrehozsnak mdjt a Session lersnl mr megismertk:
<OBJECT RUNAT=Server SCOPE=Application ID="oGFSO"
PROGID="Scripting.FileSystemObject">
A klnbsg csak annyi, hogy a scope (futsi, ltrehozsi krnyezet) most nem Session, hanem
Application lesz. Ezutn az oGFSO objektumot a webalkalmazs minden scriptjben kzvetlen
hivatkozssal elrhetjk, s az megjelenik az Application.StaticObjects kollekciban is. Nagyon
kell gyelni arra, hogy az Application objektumban csak Both, free threaded objektumokat
troljunk (ha <OBJECT> segtsgvel szeretnnk rossz objektumot ltrehozni, az IIS hibt jelez,
a dinamikus ltrehozsnl viszont nem, ott csak ksbb, a fura mkds sorn derlhet fny a
problmra). A COM objektumok ltalban tpusknyvtrakat is tartalmaznak. Ezekbl a
tpusknyvtrakbl lehet kiolvasni az objektum metdusainak, jellemzinek a listjt, de sokszor
mindenfle konstansokat is. Ha pldul egy fjlt meg szeretnnk nyitni olvassra a
FileSystemObject segtsgvel, a kvetkezt kell rnunk:
Set oFSO = Server.CreateObject("Scripting.FileSystemObject")
Set oFile = oFSO.OpenTextFile(file.txt", 1)
Ehhez tudnunk kell, hogy az OpenTextFile metdus msodik paramternek 1 rtke az olvasst
jelenti (ForReading). Ha azonban a global.asa tetejn megadjuk a kvetkez defincit:
<!--METADATA TYPE="TypeLib" FILE="scrrun.dll"-->
(az scrrun.dll tartalmazza tbbek kztt a FileSystemObject objektumot), akkor gy is rhatjuk::
Set oFSO = Server.CreateObject("Scripting.FileSystemObject")
Set oFile = oFSO.OpenTextFile("file.txt",ForReading)
A szmrtk helyett teht hasznlhatk a tpusknyvtrban definilt konstansok, amelyek sokszor
(nagyon sokszor) megknnytik az ember munkjt.
A Server objektum
A Server objektum is egy s oszthatatlan, s fleg knyelmi szolgltatsai miatt hasznos.
Gondoltunk-e mr pldul arra, hogy ezt rjuk ki a felhasznl bngszjbe: Vzszintes vonal:
<HR>. Ha ezt elkldjk a bngszbe, megjelenik a felirat, majd maga a vzszintes vonal,
hiszen a bngsz rtelmezi a kdban tallhat HTML tagot. Ha a HTML elemet magt
szeretnnk megjelenteni, a < jelet < a >-t pedig > entity-vel kell helyettestennk, teht
valahogy gy: Vzszintes vonal: <HR>. Ezen kvl mg sok ms elemet is kdolni kell,
nem beszlve a specilis karakterekrl. Szerencsre itt van a Server.HTMLEncode() metdus,
ami elvgzi ezt a kdolst:
Response.Write( Server.HTMLEncode("Nesze <HR>") )
A HTMLEncode() azrt is nagyon fontos, mert okos hasznlatval elkerlhetjk az gynevezett
Cross Site Scripting hibt. Ezt a fontos biztonsgi hibt az okozza, hogy egyes weboldalak (akr
hibazenet formjban is) vlogats nlkl, s kdolatlanul visszakldenek bizonyos, rszkre
elzleg tadott szvegrszeket.
A msik hasznos kdol metdus a Server.URLEncode(). Mint azt taln mindenki tudja, az
URL-ekben nem szerepelhet akrmilyen karakter. Ami nem megszokott, azt kdolni kell,
ltalban %xx formban, ahol xx a karakter hexadecimlis kdja. (Mg a szkzt is helyettestik,
+ jellel). Ha URL-eket ptnk fel az ASP oldalainkban, mindig hasznljuk ezt a metdust is.
A Server.MapPath() nagyon gyakran hasznlt metdus. Arra val, hogy a virtulis knyvtr- s
fjlneveket (pl. http://localhost/asp4/default.asp) vals fjlnevekk alaktsa (pl.
C:\inetpub\wwwroot\asp4\default.asp). Ha a MapPath()-nek tadott virtulis nv / vagy \
karakterrel kezddik, akkor a virtulis gykrknyvtrtl, ellenkez esetben pedig a hvs
helytl relatv fjlnevekkel dolgozik (nem lesz ugyanaz az eredmnye teht a default.asp s a
/default.asp kdolsnak kivve ha ppen a gykrknyvtrban llunk). Termszetesen
hasznlhatk a . s .. karakterek, azaz mozoghatunk a virtulis knyvtrak ltal alkotott
trben (a . az aktulis, a .. pedig a virtulis szlknyvtrra mutat). A Server.MapPath()
metdust nem hasznlhatjuk a global.asa Application_OnEnd esemnynek kezelse kzben,
egybknt pedig legynk vatosak, mert a global.asa-ban meghvott MapPath() nem a global.asa,
hanem a felhasznl ltal megnyitni kvnt fjl alapjn dolgozik.
A Server.ScriptTimeOut belltsval a scriptek idtllpsnek hatrt nvelhetjk meg (ez az
rtk nem lehet alacsonyabb, mint a tulajdonsglapokon belltott alaprtelmezs), illetve
krdezhetjk le.
A Server.Transfer() s a Server.Execute() kt, az IIS5-ben j szolgltats. A Server.Transfer()
metdus egyszeren tadja a vezrlst az alkalmazsban tallhat msik .asp kdnak. Minden
tvett adat megmarad, tbbek kztt a Request objektum teljes tartalma is. A Server.Transfer()
kivlthatja a Response Redirect() hasznlatt, mert ehhez nincs szksg a bngsz
kzremkdsre (s gy felesleges hlzati forgalomra). Termszetesen ez a megolds csak
akkor mkdik, ha webkiszolgln bell szeretnnk tirnytani a felhasznlt. A
Server.Execute() szubrutinszeren vgrehajtja az adott oldalt, majd a vgrehajts befejezsre utn
visszatr az eredetihez (mintha csak beszrtuk volna a kdot). Ennek elnye az <!-- include -->
kittellel szemben az, hogy itt akr dinamikusan is generlhatjuk a futtatand oldal nevt.
A Server.GetLastError() visszaadja az utols ASP hibnak adatait tartalmaz ASPError
objektumot.
Vgl, de egyltaln nem utolssorban: a Server.CreateObject() metdus ltrehoz egy adott
objektumot. Ezt mr nagyon sokat hasznltuk, anlkl, hogy tudtuk volna, pontosan mit jelent.
Ha a ltrehozott objektum tartalmaz OnStartPage metdust, azt is meghvja. A
Server.CreateObject() mellett objektumok ltrehozsra hasznlhatnnk egyszeren a
CreateObject() hvst is. Ez utbbi nem az IIS, hanem a scriptmotor szolgltatsa, ezrt
hasznlata az ASP oldalakban nhny kivteltl eltekintve nem ajnlott. Az objektum addig
marad letben, amg azt nem trljk, illetve az ASP oldal vgrehajtsa vget nem r. Ha az
objektumot a Session vagy Application objektumba tltttk, akkor az objektum lete csak az
adott Session vagy Application objektum megsznsekor r vget. Egy ltrehozott objektumot
gy trlhetnk, ha a vltoznak ms rtket adunk (akr szveget is, de elterjedt s szp
megolds a Nothing):
Ltrehozzuk:
Set oFSO = Server.CreateObject("Scripting.FileSystemObject")
Megszntetjk:
Set oFSO = Nothing
Naplzs az esemnynaplba
Ezeltt bemutattuk a Response.AppendToLog() metdust, amelynek segtsgvel rni lehet az IIS
szveges napljba. Az ilyen bejegyzsek feldolgozsa viszonylag nehzkes, radsul ha mg
emlksznk vannak olyan naplformtumok is, amikor ez a mdszer nem vezet eredmnyre.
Szerencsre a Windows Scripting Host-nak ksznheten a feladatot sokkal elegnsabban is
megoldhatjuk. A Windows Scripting Host (s vele egytt termszetesen a teljes WSH
objektummodell) mr az Option Pack 4-gyel bekerl(hetet)t a Windows NT 4.0-ba, s azta
termszetesen a Windows 2000 scriptprogramozsnak lelkt kpezi. A WSH objektummodelljt
szerencsre ASP oldalakbl is elrhetjk A WScript.Shell objektum LogEvent() metdusa
lehetv teszi, hogy belekontrkodjunk a Windows NT/2000 esemnynapljba. (Windows 9x
esetn a bejegyzsek a Windows knyvtrban, a wsh.log fjlban jnnek ltre). A LogEvent()
metdus hrom paramtert vr, amibl az els kettt ktelez megadni, a harmadiknak pedig
csak Windows NT/2000-n van rtelme:
A bejegyzs tpusa (0: Success, 1: Error, 2: Warning, 4: Information, 8: Audit Success, 16:
Audit Error)
A bejegyzs szvege
Opcionlisan a Windows NT/2000 szmtgp neve, ahol a bejegyzst ltre kell hozni
(termszetesen csak a megfelel jogosultsgok meglte esetn)
<%
Set oShell = Server.CreateObject("WScript.Shell")
oShell.LogEvent 0, "Hello from ASP!"
oShell.LogEvent 1, "ERROR from ASP!"
oShell.LogEvent 2, "Warning from ASP!"
oShell.LogEvent 4, "Info from ASP!"
oShell.LogEvent 8, "Audit Success from ASP!"
oShell.LogEvent 16, "Audit Error from ASP!"
Set oShell = Nothing
%>
A fenti pldban a Server.CreateObject() metdus segtsgvel ltrehoztunk egy Shell
objektumot, elksztettnk nhny bejegyzst, majd j kiscserksz mdjra kitakartottunk
magunk utn (az objektumvltoz rtkt Nothing-ra lltva felszabadtjuk az objektum ltal
lefoglalt erforrsokat). A generlt naplbejegyzsek (az audit log is) az esemnynapl
Application Log-jba kerlnek, a Source mezben a WSH felirat szerepel. Ha a bejegyzst
megnyitjuk, a lers mezben lthatjuk az ltalunk megadott szveget.
rvztr tkrfrgp
A fenti mondat tartalmazza az sszes specilis magyar bett:
<html>
<head></head>
<body>
rvztr tkrfrgp - RVZTR TKRFRGP
</body>
</html>
Ha ezt az oldalt megjelentjk, a bngsz a kdtbla megadsa hjn megprblja felismerni a
hasznlt vltozatot. Ha gy dnt, hogy nyugat-eurpai kdolst vlaszt, jnnek a kalapos
kezetek. (Az ppen hasznlt kdtblt az Encoding menben lthatjuk kivlasztva. Ha ezt kzzel
mdostjuk, a kdols helyrell.) A tallgatsok elkerlse rdekben a bngszt kifejezetten
utasthatjuk egy adott kdtbla hasznlatra:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
</head>
<body>
rvztr tkrfrgp - RVZTR TKRFRGP
</body>
</html>
A lnyeg az gynevezett Content-Type fejlcben van, ahol nemcsak az oldal HTML mibenltt
hatrozzuk meg, hanem a hasznlt kdtblt is. ASP-ben hasznlhatjuk a mr emltett
Response.Charset tulajdonsgot. Ha azt hasznljuk, ugyanezt a hatst rjk el, mikzben az ASP
oldalon bell elkerlhetjk a META elem hasznlatt :
<% Response.Charset = "iso-8859-2" %>
<html>
<head></head>
<body>
rvztr tkrfrgp - RVZTR TKRFRGP
</body>
</html>
Kdtblk
A klnfle kdtblk hasznlata azonban nem oldott meg minden gondot. Nem nagyon
hasznlhatunk egy dokumentumon bell tbb kdtblt (a HTML codepage fejlc az egsz
dokumentumra vonatkozik). Ennl is nagyobb gond az, hogy a legtbb tvol-keleti nyelv
tbbezer klnbz karaktert tartalmaz, ezt pedig nehezen lehet lerni egy 8 bites azonostval.
Ezeken a terleteken termszetesen 16 bites kdtblk alakultak ki, ahol egy jelet kt bjt hatroz
meg. Persze ilyen kdtblbl is tbb fajta ltezik, ezrt kzenfekv volt, hogy a kdtblk
kztti koszt szablyozni kell. Tbb vezet szmtstechnikai, informatikai cg, nyelvszek,
knyvtrosok szervezetei, s mg sokan msok ezrt megalaptottk a Unicode Consortiumot. A
szervezet clja az volt, hogy olyan szablyrendszert dolgozzanak ki, amivel vgre egysgesen le
lehet rni a vilgon beszlt (s mr vagy mg nem hasznlt) sszes nyelv minden karaktert,
grafikai szimblumokat, nyelvi elemeket. A Unicode szerint is minden karaktert kt bjt azonost,
gy 65535 klnbz jel lersra van lehetsg. A tblzat mg napjainkban is frissl, st, van
olyan terlete is, ahova mi magunk definilhatunk karaktereket (a 0xE000-tl 0xF8FF-ig). Ha
van kznl egy Windows 2000, eudcedit.exe! A Unicode azonban nem kdolsi szabvny. A
karakterek ktbjtos rtkt tbbflekppen is felhasznlhatjuk a dokumentumokban. Tbbfle
kdolsi md terjedt el, termszetesen mindegyik alapja maga a Unicode tblzat. Az egyik
mdszer szerint a dokumentum minden egyes karaktert kt bjton brzoljk, ezzel
termszetesen megduplzva a mrett. Az alternatv kdolsi mdok kzl az UTF-7 s az UTF-
8 terjedt el, ezek kzl az UTF-8 lett a gyakoribb.
Az UTF-8 kdols
Kdols, s nem kdtbla, hiszen itt mr sz sincs tblrl. Kdtblaknt maga a Unicode
funkcionl. Lssuk, mit tud az UTF-8. Ebben a kdban egy karakter kdjnak hossza 1 s 3 bjt
kztt mozog. Az ASCII karaktereket, teht az els 127 jelet hagyomnyosan, egy bjton
kezeljk. Ennek ksznhet, hogy az UTF-8 dokumentumok, ha nem tartalmaznak tl sok extra
karaktert, emberi szemmel mg jl olvashatk. A 128 feletti rtkek mr nem frnek el egy
bjton, ezrt azok esetn mr hosszabb lerra van szksg. Mirt nem fr bele az els bjtba 255
karakter? Ht azrt, mert akkor nem tudnnk megklnbztetni a 0x6161-es kdot a 0x61 0x61-
tl. Ezrt aztn, ha egy UTF-8 bjt rtke:
0x00-0x7F: az egybjtos ASCII karakter kdja
0x80-0xBF: tbb-bjtos rtk tovbbi bjtjai
0xC2-0xDF: ktbjtos rtk els bjtja
0xE0-0xEF: hrombjtos rtk els bjtja
Teht minl messzebb van a Unicode tblban egy karakter, annl hosszabban kell lerni (de
legfeljebb hrom bjton). Ha egy karakter kdja
0x0001-0x007F, akkor 1 bjt (0x01-0x7F)
0x0080-0x07FF, akkor 2 bjt (0xC280-0xDFBF)
0x0800 felett, akkor 3 bjt (0xE0A080-0xEFBFBF)
A tvol-keleten teht az UTF-8 kdols kicsit pocskol, hiszen ott a legtbb hasznlt karakter az
utols tartomnyba esik. A vilg nagy rszn viszont, ahol az rs alapjt valahol mgiscsak a
latin betk kpezik, az UTF-8 sok helyet megsprol. A kdtblk hasznlathoz mindssze egy
dolgunk van: a Control Panel / Regional Settings dialgus General ablaknak aljn piplgassuk
be a megclzott terleteket, s nmi teleptgets utn birtokunkba vehetjk a teljes Unicode
univerzumot.
Lokalizls
Lokalizls alatt nem csak az adott orszg vagy nyelv betkszletnek hasznlatt rtjk, hanem
sok minden mst is. Nhny plda, a teljessg ignye nlkl: dtumformtum, hnapok, napok
nevei, 12/24 rs idszmts, AM/PM helyi elnevezse, a dtum s id elemeit elvlaszt
karakterek, az elemek sorrendje, a fizeteszkz jele s rsnak mdja, a szmok rsnak mdja,
a szmjegyek csoportostsa, a csoportostsra szolgl jel, a tizedesjel, a ht els napja, a
hasznlt naptr, a sorbarendezs alapja, satbbi. Minderre fel kell kszlnnk, amikor lokalizlt
alkalmazst ksztnk, s nincs ez mskpp az ASP alkalmazsok esetn sem. A Windows teljes
mrtkben tmogatja ezeket a lokalizcis megoldsokat, ezrt tulajdonkppen nincsen nehz
dolgunk. Maga a Windows is a Regional Settings lokalizcis belltsai alapjn mkdik, gy
jelennek meg a dtumok, idpontok, szmok, de mg a numerikus billentyzet . gombjnak
jelentse is (magyar bellts esetn ugyanis helyesen nem tizedespontot, hanem
tizedesvesszt r). A GetLocale() fggvny pldul meghvsa utn visszaadja a szmtgpen
hasznlt alaprtelmezett bellts kdjt, a SetLocale() segtsgvel pedig bellthatunk egy ms
rtket. Ha az adott nyelv tmogatsa nincs teleptve, a SetLocale() meghvsa hibt okoz. A
FormatCurrency(), FormatDateTime(), FormatNumber(), FormatPercent() fggvnyek pedig az
ppen rvnyes belltsnak megfelelen ksztik el a fizeteszkz, dtum s id, szm s
szzalkrtkeket (szveges formban, persze).
Ha a catch blokkban, a hiba kezelse sorn zskutcba jutunk, s feladjuk a harcot, a munkt tovbb
passzolhatjuk az eggyel magasabb szinten tallhat hibakezelnek a throw() fggvnnyel. Paramterknt
adjuk neki a catch()-ben tvett vltozt, valahogy gy:
catch(e) {
Response.Write("Error: " + e);
Response.Write("<br>Error Number: " +
A (e.number & 0xFFFF) );
Response.Write("<br>Description: " + e.description);
throw(e);
}
A msodik throw() hvs segtsgvel a hibt tovbb passzoltuk az IIS-nek, kzdjn vele . A
kzdelem eredmnye a belltsoknak megfelel IIS hibazenet lesz, mintha csak nem is lett
volna a trycatch blokk.
VBScipt rviden
Adatpusok
A VBScript egyetlen adattpust definil s ez a Variant. A Variant tpus egy specilis adattpus,
amely klnfle informcik trolsra szolgl. A Variant tpusnak attl fggen, hogy milyen
tpus adatokat trol a kvetkez altpusai lehetnak.
Altpus Lers
Empty Variant tpus nincs inicializlva. rtke 0 ha szmot jelent, s 0 hosszsg
szveg ha szveg vltoz
Null Variant nem tartalmaz adatot
Boolean rtke vagy True vagy False.
Byte rtke 0-255-ig terjed egsz szm
Integer rtke -32,768-32,767 kztti egsz szm.
Currency rtke -922,337,203,685,477.5808- 922,337,203,685,477.5807 kztt
Long rtke -2,147,483,648-2,147,483,647 egsz
Single Egyszeres pontossg lebegpontos szm -3.402823E38-tl -1.401298E-45-ig
negatv rtkek esetn; s 1.401298E-45-tl 3.402823E38-ig pozitv rtkrk
esetn
Double Dupla pontossg lebegpontos szm -1.79769313486232E308-tl -
4.94065645841247E-324-ig negatv szmok esetn s 4.94065645841247E-
324-tl 1.79769313486232E308-ig pozitv szmok esetn
Date (Time) Egy szm, ami 100 Janur 1-tl , 9999. December 31-ig terjed idpontot jell.
String Szveg ami maximum 2 millird karakter hossz lehet
Object Objektum tartalma van
Error Egy hiba szmot tartalmaz
Konstans definils
VBScriptben a Const kulcsszval lehet konstansokat definilni. Pldul:
Const MyString = "This is my string."
Const MyAge = 49
Const CutoffDate = #6-1-97#
Dtumok definilsnl a # karaktert kell hasznlni, mit az utols plda mutatja.
VBScript opertorok:
aritmetikai
Lers Szimblum
Hatvnyozs ^
Negls -
Szorzs *
Oszts /
Egsz oszts \
Modulus Mod
sszeads +
Kivons -
Szveg sszefzs &
sszehasonlt
Lers Szimblum
Egyenl =
Nem egyenl <>
Kisebb <
Nagyobb >
Kisebb egyenl <=
Nagyobb egyenl >=
Objektum egyezsg Is
Logikai
Lers Szimblum
Logikai tagads Not
Logikai s And
Logikai vagy Or
Logikai kizr vagy Xor
Logikai ekvivalencia Eqv
Logikai implikci Imp
VBScript vltozk:
Vltoz deklarls:
A vltozk deklarlsa VBScripben a kvetkez mdon trtnik:
Dim Names(9) ' Declare an array with 10 elements.
Dim Names() ' Declare a dynamic array.
Dim MyVar, MyNum ' Declare two variables.
Private MyNumber ' Private Variant variable.
Private MyArray(9) ' Private array variable.
' Multiple Private declarations of Variant variables.
Private MyNumber, MyVar, YourNumber
Public MyNumber ' Public Variant variable.
Public MyArray(9) ' Public array variable.
' Multiple Public declarations of Variant variables.
Public MyNumber, MyVar, YourNumber
A msodik sor bemutatta, hogyan lehet egyszerre tbb vltozt deklarlni. Egyszeren vesszvel
elvlasztva fel kell sorolni a vltozk neveit.
Public kulcsszval deklarlt vltoz az sszes eljrsban s az sszes scriptben lthat lesz
Dim kulcsszval deklarlt vltoz scroipt szinten lthat az sszes eljrsbl, ljrs szinten
csak a deklarl eljrsbl lthat
Private kulcszval deklarlt vltoz csak abbl scriptbl lthat amelyikben definilva
voltak
Elgazsok
Plda:
If myDate < Now Then myDate = Now
If value = 0 Then
AlertLabel.ForeColor = vbRed
AlertLabel.Font.Bold = True
AlertLabel.Font.Italic = True
End If
If value = 0 Then
AlertLabel.ForeColor = vbRed
AlertLabel.Font.Bold = True
AlertLabel.Font.Italic = True
Else
AlertLabel.Forecolor = vbBlack
AlertLabel.Font.Bold = False
AlertLabel.Font.Italic = False
End If
If value = 0 Then
MsgBox value
ElseIf value = 1 Then
MsgBox value
ElseIf value = 2 then
Msgbox value
Else
Msgbox "Value out of range!"
End If
Select Case Document.Form1.CardType.Options(SelectedIndex).Text
Case "MasterCard"
DisplayMCLogo
ValidateMCAccount
Case "Visa"
DisplayVisaLogo
ValidateVisaAccount
Case "American Express"
DisplayAMEXCOLogo
ValidateAMEXCOAccount
Case Else
DisplayUnknownImage
PromptAgain
End Select
Ciklusok:
FOR ciklus:
Egyenknt lptet:
Dim x
For x = 1 To 50
MyProc
Next
Step-ben megadott rtk szerint lptet, ha ez az rtk negatv akkor visszafel szmll a ciklus:
Dim j, total
For j = 2 To 10 Step 2
total = total + j
Next
Dim d 'Create a variable
Set d = CreateObject("Scripting.Dictionary")
d.Add "0", "Athens" 'Add some keys and items
d.Add "1", "Belgrade"
d.Add "2", "Cairo"
For Each I in d
Document.frmForm.Elements(I).Value = D.Item(I)
Next
CGI
A CGI (Common Gateway Interface, ltalnos tjr fellet) nevben is benne van, hogy -
mindenfle tvhittel ellenttben - nem egy programnyelvrl van sz, hanem egy felletrl, amely
sszekti programunkat a HTTP szerverrel, ezen keresztl a felhasznlval. Belthat, hogy CGI
programok rshoz akrmelyik programnyelv felhasznlhat, egyetlen megkts, hogy az adott
opercis rendszer tmogassa azt, s emellett clszer viszonylag gyorsnak lennie. Az gy
elksztett alkalmazsaink a WWW-n -World Wide Web- keresztl vlnak elrhetv, gy
gyakorlatilag brhonnan hasznlhatk, ahol hozzfrhet a Vilghl. A technika lnyege a
dinamikus adatok megjelentse, trolsa. Fontos rla tudni, hogy az ilyen programok a szerver
oldalon hajtdnak vgre, teht nem vetdhet fel olyan problma, hogy a kliens program -a
felhasznl bngszje- nem tmogatja ezeket. A honlapokba val integrlsra tbbfle md is
van, a leggyakrabban csak egy egyszer hivatkozst tesznk r, pldul egy link elhelyezsvel -
ugyangy, mintha az egy HTML dokumentum lenne-, de szintn mindennapos az rlapok
feldolgozsnl val alkalmazs. Ezekben az esetekben a programunk feladata az adatok
feldolgozsa, s/vagy trolsa, valamint tovbbtsa mellett egy megfelel HTML lap ellltsa
lesz. Tudni kell azonban, hogy a CGI fellet alkalmas brmilyen formtum kimenet
ellltsra, gy akr grafikus kimenetet is kszthetnk, teht ilyen programokat kpknt is
beilleszthetnk HTML lapokba. Ebbl kikvetkeztethet, hogy a kimenet generlsakor nem
csak magt a tartalmat, hanem egy vlasz-fejlcet is el kell kszteni. Ez ltalban egy "Content-
type: [mime tpus]" sorbl ll, mellyel meghatrozhatjuk a kimenet tartalmnak tpust (MIME,
Multipurpose Internet Mail Extension). Egy msik hasonl fejlc a Location, mely egy msik
fjlra, vagy URL-re irnytja t a szrfprogramot. Fontos mg tudni, hogy a fejlcet el kell
vlasztani a tbbi adattl, ezt kt jsor karakterrel tehetjk meg (\n). A tpus megadsa egy f, s
egy altpussal trtnik. Nhny gyakran hasznltak kzl:
Perl
Induls
Kezdetnek mindjrt megnzhetjk a minimlis Perl programot, ami a "Hello World!!!" szveg
kirshoz kell:
#!/usr/local/bin/perl
print "Hello World!!!\n";
A Perl program egy egyszer szvegfile, s kveti a shell scriptek gyakorlatt a "#" karaktert
hasznlva a megjegyzsek jellsre. Itt ez az els sorban egy specilis jelentssel is br, hiszen
az els sorba rt "!" kezdet megjegyzs a script interpretert hatrozza meg. Ha ez nem lenne ott,
akkor a perl <programnv> paranccsal lehetne lefuttatni. Lthat, hogy a kirats egy egyszer
print utastssal megadhat, s az utastst mindg egy ";" zrja be. A szvegek egy C
programhoz hasonlan itt sem tartalmaznak implicit sorvge jelet - ezt a megszokott mdon
neknk kell kirni. (Sor beolvassakor viszont nem vgja le a sorvge jelet, gy azt is a
programoznak kell kezelnie.)
Adatstruktrk
Hrom alapvet adatstruktra tallhat a nyelvben: skalr, skalrok tmbje s az asszocitv tmb.
Ezeket - mint azt ksbbiekben ltni fogjuk - mutatkkal is lehet kombinlni, gy lnyegben
mindenfle adatstruktrt megalkothatunk. A norml tmbk indexe - ltalban - 0-val kezddik.
Az asszociatv tmbket szvegekkel kell indexelni. A vltoz nevnek els karaktere hatrozza
meg annak tpust:
$ skalrokat,
@ szmmal indexelt s a
% asszociatv tmbket jell.
Ez az els karakter a vltoznak a kifejezsben betlttt szerept kell, hogy takarja.
Pldk:
$days # egyszer skalr
$days[3] # days nev tmb negyedik eleme
@days # az egsz tmb ($days[0], .. , $days[$#days])
$days{'Feb'} # days nev asszociatv tmb egy eleme
%days # az egsz asszociatv tmb (kulcs, rtk prok)
$#days # days tmb utols indexe
Az alprogramokat mg a & jellel is megjellhetjk. Erre akkor lehet szksg, ha az alprogramot
deklarcija eltt szeretnnk hasznlni. Fggvnyre a deklarcija utn mr a & szimblum
nlkl is hivatkozhatunk (ez - a nyelv elz verzijtl eltren - minden fggvnyre
alkalmazhat). A vltozk nevei egybknt a tpusuknak megfelel kln szimblumtblba
kerlnek, teht hasznlhatunk azonos nev tmbt, asszociatv tmbt s skalrt. (Ekkor $ize[0]
az @ize tmb rsze, nem pedig az $ize vltozt helyettesti.) A vltozk nevei betvel kell hogy
kezddjenek, s tetszleges alfanumerikus karakterrel, illetve alhzsjellel folytathat. A
vltoz neve nem kell, hogy megadott legyen, akr egy kifejezs is llhat helyette, melynek
aktulis rtke lesz a valdi nv! Vannak specilis vltoznevek alapvet paramterek jellsre.
Ezek az Elre definilt vltozk rszben megtallhatak.
Krnyezet
A kifejezs tpusa a kifejezs krnyezettl is fgghet! Pldul az int(<STDIN>) eredmnye egy
egsz szm lesz, amit a bemenet egy sorbl llt el az int fggvny, de a sort(<STDIN>)
eredmnye egy lista lesz, amit a bemenet sszes sornak beolvassa utn a sort fggvny
rendezssel llt el!
Skalrok
Skalr vltozk sokfle rtket trolhatnak: szm, szveg, binris adat vagy mutat. A tartalom a
hasznlat sorn mindg szksges formra alakul, azaz kirhatunk egy szmot szvegknt egy
vltozba, majd ezt a vltozt megszorozhatjuk kettvel. Az aritmetikai mveleteknl a szmok
binris formra konvertldnak, gy ezek pontossgt a processzor korltozza. Vannak persze
kiegszt modulok tetszleges pontossg szmok kezelsre is. Felttelek vizsglatnl csak az
res szveg, illetve a 0 rtk jelent hamisat. A skalr vltozknak alapveten kt llapota lehet:
definilt, vagy definilatlan. Ezeket a defined, illetve undefined fggvnyekkel krdezhetjk le.
Egy vltoz addig definilatlan, amg valaki nem ad neki rtket, vagy nem definilja explicit
mdon. Definilatlan vltoznak - a krnyezettl fggen - 0 vagy res szveg rtke van.
Pldk:
$i = 2; # egsz
$f = 2.3; # racionlis
$szam = 1_000_000_000; # ez egy nagy egsz
$hexa = 0xffeedd; # hexadecimlis szm
$szoveg = "Ez egy szoveg"; # egy szveg
print "Valami\n"; # egy szveg megjelentse
print <<VEGE; # hosszabb szveg megjelentse
Valami # "Itt a dokumentum" stlusu
VEGE # adatbevitellel (VEGE a zrszimblum)
$szoveg = <<VEGE; # $szoveg = "ez is szoveg\n"
ez is szovega # ez is megy
VEGE
fv(<<EGY, <<KETTO); # st ez is!
elso parameter
EGY
masodik parameter
KETTO
Tmbk
A Perl-ben hasznlt tmbket inkbb indexelt listknak kne nevezni a kiterjeszthetsgk miatt.
Ha brmelyik tpusban egy eddig nem ltez elemnek adunk rtket az automatikusan
definildik. A tmbket persze nem csak elemenknt lehet feltlteni:
@tomb = ('elso', 2, $harom); # hromelem tmb
%szinek = ( # asszociatv tmb
'piros' => 0x00f,
'kk' => 0x0f0,
'zld' => 0xf00,
);
s az utbbival ekvivalens alak:
%szinek = (
'piros' , 0x00f,
'kk' , 0x0f0,
'zld' , 0xf00,
); #egyszer felsorols, prosval
rtkadsokban (rsz)tmbket is rtkl adhatunk. Ezekben az esetekben a balrtk listja az
els elemtl kezdve addig tltdik fel, amg van j elem a jobb oldalon. Az rtkads akkor s
csak akkor rvnyes, ha a baloldalon leglis balrtkek szerepelnek.
($a,$b,$c)=(1,2,3) #a vltozk sorban rtket kapnak
($a,$b,@maradek)=@valami #ez is helyes
Tmb balrtkknt hasznlata csak utols elemnek rdemes, mert egy korbbi tmb az sszes
jobboldalt magba olvassa. Ez j a loklis paramterek tvtelnl. A $[ vltoz mutatja, hogy a
tmbk melyik indexen kezddnek ( ez a C-ben 0 ). Ennek rtke mdosthat ,ezrt a kvetkez
kt rtkads ekvivalens:
@tomb=() #ress teszi a tmbt
$#tomb=$[-1; #a tmb hosszt -1-re lltja
Skalr krnyezetben a tmb felhasznlsa a tmb aktulis hosszt adja vissza. rtkadsnl a
rsztmbk automatikusan elemenknt bemsoldnak, gy a keletkez tmb homogn lesz.
@tomb=(@lista1,@lista2,&alprg)
Egy asszociatv tmb skalr krnyezetben visszaadja, hogy van-e benne kulcs-rtk pr. Ez
csupn arra j, hogy a hash-el algoritmus hatkonysgt vizsgljuk.
sszetett utasts
Itt kell megemlteni a BLOKK fogalmt, amely { s } jelekkel kzbezrt utastssorozat. (Itt
fontosak a { s } jelek, mg egyetlen utastsnl is!) Ez alapjn a lehetsges formk:
if (EXPR) BLOKK
# BLOKK vgrehajtdik ha az EXPR igaz
if (EXPR) BLOKK1 else BLOKK2
# ha EXPR igaz akkor BLOKK1, egybknt BLOKK2
# lesz vgrehajtva
if (EXPR) BLOKK elsif (EXPR) BLOKK ... else BLOKK
Az if utasts szintaxisa itt egyrtelm lesz, mivel a BLOKK nem llhat egyetlen utastsbl.
CIMKE while (EXPR) BLOKK
CIMKE while (EXPR) BLOKK continue BLOKK
A while ciklus trzsben vgrehajtott next utasts hatsra a vezrls a continue BLOKK-ra
kerl, majd jra elindul a ciklusmag.
CIMKE for (EXPR1; EXPR2; EXPR3) BLOKK
Ez a szoksos C-beli ciklus formja. A kvetkez kt forma ekvivalens:
for($i = 1; $i < 10; $i++) { $i = 1;
... while($i < 10) {
} ...
} continue {
$i++;
}
CIMKE foreach vltoz (TOMB) BLOKK
Ez a shell-ekben meglv ciklus egy vltozata. Itt a vltoz sorban felveszi a TOMB elemeit
rtkl, s gy indul el a ciklusmag.
CIMKE BLOKK continue BLOKK
Ez a vgtelen ciklus volt...
A ciklusokban hasznlhat a next, a last s a redo utasts, melyek a ciklusbeli utastsok
vgrehajtst vezrlik. A fent emltett next hatsra a futs a ciklus elejre kerl, s a felttel
jratesztelsvel folytatdik a mkds. A redo ehhez hasonl, csak itt a felttel tesztelse nlkl
kerl a vgrehajts a ciklus els utastsra. A last pedig a ciklusbl kiugrik, s az utna
kvetkez els utastson folyik tovbb a program vgrehajtsa. A hrom utasts hasznlatban
rdekessg, hogy mindegyiket cmkzni is lehet s ekkor az ugrsok az adott cmkvel elltott
ciklusra vonatkoznak. Mivel a blokk egy egyszer lefut ciklusnak tekinthet, ezrt ezek az
utastsok blokkban is hasznlhatak. A switch utastsra nincs kln forma, de van r egypr
lehetsges megolds, pldul:
SWITCH: {
/^abc/ && do { $abc = 1; last SWITCH; };
/^def/ && do { $def = 1; last SWITCH; };
/^xyz/ && do { $xyz = 1; last SWITCH; };
$nothing = 1;
}
A /^abc/ alak felttelek mintaillesztsre szolglnak. Ha egy minta illeszkedik a $_ vltoz
tartalmhoz, akkor a hozz tartoz felttel msodik tagja is kirtkelsre kerl, azaz a do blokk is
vgrehajtdik.
Opertorok s precedencijuk
A C nyelvben rvnyes szablyok rvnyesek, s mg van egypr - shell script-ekbl ismers - j opertor.
Opertor kirtkels irnya lers
lista (,) balrl jobbra kifejezsek listja
-> balrl jobbra hivatkozs
++,-- nem asszociatv nvels, cskkents
** jobbrl balra hatvnyozs
!,~,\ s unris +,- jobbrl balra nem, binris nem, cmopertor,
+, -
=~,!~ balrl jobbra szveg illeszkeds, nem
illeszkeds
*,/,%,x balrl jobbra szorzs, oszts, modulus,
ismtls
+, -, . balrl jobbra sszeads, kivons,
konkatenci
<<,>> balrl jobbra balra, illetve jobbra shift
unris opertorok nem asszociativ pl. file tesztels -f
<,>,<=,>=,lt,gt,le,ge nem asszociatv szm illetve szveg
sszehasonltsa
==,!=,<=>,eq,ne,cmp nem asszociatv szm illetve szveg
sszehasonltsa
& balrl jobbra binris AND
|,^ balrl jobbra binris OR s XOR
&& balrl jobbra logikai AND
|| balrl jobbra logikai OR
.. nem asszociatv tartomny
?: jobbrl balra feltteles rtkads
=, +=, -=, *= ... jobbrl balra rtkads opertorai
, => balrl jobbra vessz s kulcs opertor
lista opertorok nem asszociatv lista manipulcik
Not balrl jobbra logikai NEM
And balrl jobbra logikai S
or, xor balrl jobbra logikai VAGY-ok
Itt csak az ismeretlennek tn opertorokat fogom kiemelni:
cmopertor
olyan mint a C nyelv & opertora; visszaadja az operandus objektum cmt (alprogramokra is
megy!)
ismtls
egy szveget meg lehet ismtelni nhnyszor, pl.: "ha"x3 == "hahaha"
konkatenc
szvegek sszefzse, pl.: "ha"."ha" == "haha"
file tesztels
ezek a shell programokban megszokott file tesztel opertorok, pl.: -f "hello.c" akkor igaz, ha a
hello.c file ltezik
szveg sszehasonlts
Erre a lt,gt,le,ge,eq,ne opertorok szolglnak. Ha szvegeket az == opertorokkal hasonltgatjuk,
akkor azok memriabeli cmei kerlnek sszehasonltsra, nem tartalmai! cmp rtke -1, 0, vagy
1 lehet a szvegektl fggen.
szm sszehasonlts
Szoksos opertorokon kvl a <=> szerepel itt. Ennek -1 az rtke, ha az els szm nagyobb, 1,
ha a msodik, s 0, ha egyenl a kt szm. Ez az opertor - az elbb emltett cmp opertorhoz
hasonlan - fleg rendezseknl hasznlhat jl.
I/O
Az alapvet s legfontosabb I/O opertor a < s a >. Ha egy file lerjt ilyen jelek kz rakjuk,
akkor egy sort olvashatunk belle. A beolvasott sor automatikusan a $_ vltozhoz rendeldik, ha
nem adunk meg mst. Egy egyszer cat (UNIX cat parancs) gy is lerhat:
while(<STDIN>)
{
print $_; # print; is lehetne, hiszen az $_ az
# alapertelemezett argumentum
}
Megjegyezend mg, hogy a C nyelv hrom operatora nem szerepel a nyelvben, ezek a
kvetkezk:
& - cm-opertor, helyette a \ hasznlhat,
- dereferencia-opertor, erre valk a $,@,%,& opertorok
(TYPE) - tpus-knyszerts
Mintailleszts
Hasznlat
A mintaillesztst tbb dologra is lehet hasznlni a =~ vagy a !~ opertorokkal:
Szvegrszek felismersre: egy szvegben a grep programhoz hasonlan kereshetnk
szvegeket.
Pl.: $sor =~ /keresettszo/;
Szvegekben a sed-hez hasonlan lecserlhetnk egyes rszeket.
Pl.:$sor =~ s/eredeti/ujszo/;
Szvegekbl kikereshetnk minket rdekl rszeket, s azokat szelektven ki is nyerhetjk (mint
az awk-ban). Pl.:($erdekes_szo) = /\s+(\w+)$/;
Mdostk
A // utn ltalban rhatunk valamilyen karaktert, ami a keresst egy kicsit mdostja:
i kis- s nagybetket nem klnbzteti meg
m tbbsoros szvegben keres
s a szveget egyetlen sorknt kezeli
x kibvtett keressi md
Az i mdost hasznlatval gy a /perl/i kifejezs a PeRL szvegre is illeszkedni fog.
Az x mdost tulajdonkppen arra j, hogy egy kicsit lazbb szintaxszissal rhassuk le a keres
kifejezseket. Ezzel mr lehetsg van tbbsoros, st megjegyzsekkel tzdelt kifejezs rsra
is!
Az alapok
\ a kvetkez karakter specilis
^ a sor elejhez illeszkedik
. egy tetszleges karakterhez illeszkedik (kivve az jsort)
$ sor vghez illeszkedik
| alternatvk jellse
() csoportosts
[] karakter-osztly kijellse
A . csak akkor fog az jsor karakterhez illeszkedni, ha erre az s mdostval kln megkrjk,
pl.:
$szoveg = <<VEGE;
Tobbsoros szoveg, amelyben a PERL
perl szavakat kell majd megtalalni.
VEGE
print "illeszkedik/s\n" if $szoveg =~ /PERL.perl/s; # igaz
print "illeszkedik/\n" if $szoveg =~ /PERL.perl/; # hamis
A sor eleje s vge inkbb rekord elejt s vgt jelenti, hiszen a nyelvben meg lehet hatrozni,
hogy mi vlassza el a sorokat ($*). Alapesetben ez persze az jsor karakter, de ezt meg lehet
vltoztatni...
Karaktersorozatok
Egy egyszer kifejezs ismtldst a kvetkezkkel lehet jellni:
* 0 vagy tbb
+ 1 vagy tbb
? 0 vagy 1
{n} pontosan n-szer
{n,} n-szer vagy tbbszr
{n,m} n <= ismtldsek szma <= m
Specilis karakterek
\t tabultorjel
\n jsor
\r return
\f form feed
\v vertical tab
\a cseng
\e escape
\033 oktlis szmrendszerben megadott karakter
\x1b karakter hexadecimlisan
\c[ kontrol karakter
\l kisbet
\u nagybet
\L kisbet \E-ig
\U nagybet \E-ig
\E ...
\Q metakarakterek normlisak \E-ig
\w "sz" karakter (alfanumerikus s _)
\W nem-sz karakter
\s whitespace
\S nem whitespace
\d szmjegy
\D nem szmjegy
\b szhatrhoz illeszkedik
\B nem szhatr
\A string elejhez illeszkedik
\Z string vge
\G oda illeszkedik, ahol az elz illeszts vgetrt
Csoportosts
Ha egy szvegbl rszeket ki akarunk nyerni, akkor a () karaktereket kell hasznlnunk. Ha
ezekkel bezrunk egy karaktersorozatot a regulris kifejezsben, akkor az ahhoz illeszked
karakterekre a kiejezsen kvl is hivatkozhatunk. Ha egy csere krnyezetben hasznljuk, akkor
az gy kapott karaktersorozatokra a $1, $2, $3 ... vltozkkal lehet hivatkozni:
s/^([^ ]*) *([^ ]*)/$2 $1/; # els kt sz felcserlse
if(`date` =~ /(..):(..):(..)/) { # id kirsa
print "ora: $1, perc: $2, masodperc: $3\n";
}
Ha lista krnyezetben hasznljuk az illesztst, akkor a kivlasztott rtkeket kzvetlenl is
megkaphatjuk:
($ora, $perc, $masodperc) = (`date` =~ /(..):(..):(..)/);
Opertorok tlapolsa
A Perl opertorainak nagyrsze tlapolhat. Ehhez a %OVERLOAD tmbt kell hasznlni, mely
az tlapolt opertorokhoz tartoz fggvnyeket trolja.
package Valami;
%OVERLOAD = (
'+' => \&myadd,
'-' => \&mysub;
# stb.
);
...
package main;
$a = new Valami 57;
$b = $a + 5;
Elkpzelhet az az eset is, hogy nincsen definilt opertor az adott tpus vltozhoz. Ennek
kezelsre szolgl az %OVERLOAD tmbnek "fallback" nev eleme. A "fallback" rtktl
fggen hrom eset lehetsges:
definilatlan
Ekkor a Perl elszr elindtja a MAGIC AUTOGENERATION nev eljrst, mely egy
fggvnyt prbl generlni az adott opertorhoz. Ha ez nem megy, akkor a felhasznl ltal
definilt "nomethod"-ot hvja, ami ezekre az esetekre lett ltrehozva. Ha ez sem mkdik, akkor
exception lp fel.
TRUE
Minden az elz esetnek megfelelen zajlik, csak exception nem lp fel, hanem minden gy
folytatdik, mintha nem is lett volna tlapols.
FALSE
A definilatlan esettl abban tr el, hogy az autogenerlst nem prblja meg.
Beptett fggvnyek
Ez a rsz iszony nagy, s csom olyan informcit tartalmaz, amit mr amgy is ismer az ember
(legalbbis a C programokban hasznlta mr ket). Itt csak nhny specilis dolgot fogok
ismertetni, ami Perl jellegzetessg.
Ha valaki ismeri a szoksos C fggvnyeket, akkor azokat btran hasznlhatja, bizosan megvan.
Ha nem gy viselkedik, ahogy vrta, akkor rdemes ignybe venni a POSIX modult:
use POSIX;
Ezek utn mr bitosan meglesz az sszes POSIX fggvny.
Ha valakinek mg ez sem elg, akkor ignybeveheti a klnbz modulokat. Mr a nyelvvel
egytt lehet tallni adatbziskezel kiterjesztsektl kezdve a terminlkezel fggvnyekig sok
mindent. Ezeken kvl az Internetben legalbb szz j modul knl kiterjesztseket klnfle
nyelvek s knyvtrak fel (pl.: SQL adatbzikezels, X11 grafikus fellet, Prolog...).
nhny fggvny...
bless REF,PACKAGE
A REF referencit egy PACKAGE modulban lert objektumknt fogja kezelni. Lnyegben ez az
tja egy j objektum ltrehozsnak.
caller
Megmonja, hogy ki hvta az aktulis kdrszletet...
($package, $filename, $line) = caller;
chop
Levgja a '\n' jelet a sor vgrl. Ez sorok olvassa utn hasznos.
while(<>) {
chop; # $_ vgrl vg
...
}
chop($cwd = `pwd`); # aktulis knyvtr
defined EXPR
Megmondja, hogy egy EXPR vltoz definilt-e.
delete EXPR
Egy elem trlse egy asszociatv tmbbl, pl.: delete $tomb{"eleme"};
die LIST
Ez lnyegben a C knyvtri exit() fggvny, csak a LIST tartalmt mg kirja mieltt kilp a
programbl.
do BLOCK
Vgrehajtja a BLOCK-ot majd az utols utasts rtkt adja vissza. Ha ciklusmdostval
hasznljuk, akkor a ciklusmag mg a tesztels eltt biztos lefut.
do EXPR
Az EXPR-t, mint Perl forrsnevet hasznlja, s vgrehajtja a benne lv utastsokat.Minden
hvsnl jra kielemzi a fjlnevet, ezrt nem rdemes pldul ciklusban hasznlni.
dump LABEL
Egy core dump! Ha a core dump eredmnyekppen kapott file-t futtatjuk, akkor az a LABEL
cimknl fog elindulni. Ez a mdja egy Perl prgram "fordtsnak".
each ASSOC_ARRAY
Egy asszociatv tmb elemeit iterlja:
while(($key,$value) = each %ENV)
{
print "$key=$value\n";
}
pack MINTA,LIST
A LIST tartalmt a MINTA szerint binrisan sszepakolja. Fleg kls eljrsok hvsa eltt kell
megtenni.
print FILEHANDLE LIST
Kirs ltalnos utastsa. A FILEHANDLE elhagyhat, ekkor a standard kimenetre r ki. A
FILEHANDLE s a LIST kztt nem lehet vessz!
return
Alprogrambl rtk visszaadsa. Ha ez nem szerepel, akkor az alprogram utols utastsnak
rtke lesz visszaadva.
shift LIST
A LIST tmbt elmozdtja egy elemmel lefele. Az els elemmel tr vissza, s az trldik is
abbl.
sort LIST, vagy sort SUBNAME LIST
LIST rendezse lexikografikusan, vagy a SUBNAME-ben definilt alprogramnak megfelelen. A
SUBNAME alprogramnak egy rvnyes sszehasonltsnak kell lenni.
study SCALAR
Az adott vltoz tartalmt tanulmnyozza egy kicsit, hogy ksbb tbb mintaillesztst
hatkonyabban vgezhessnk el rajta. Ez tnyleg csak akkor j, ha tbb mintaillesztst
hasznlunk ugyanarra a vltozra!
tie VARIABLE,PACKAGENAME,LIST
Az adott vltozt hozzrendeli a PACKAGENAME-ben lert struktrhoz. Ezzel lehet egy
egyszer asszociatv tmbhz hozzrendelni egy adatbzist, ahol a tmb indexei lnyegben
keressi kulcsok lesznek.A PACKAGENAME modulban a vltoz tpustl fggen klnbz
fggvnyeket kell megrni:
1) asszociatv tmb
a) TIEHASH objectname, LIST
b) DESTROY this
c) FETCH this, key
2) STORE this, key, value
(a) DELETE this, key
b) EXISTS this, key
c) FIRSTKEY this, key
d) NEXTKEY this, key
3) tmb
a) TIEARRAY objectname, LIST
b) DESTROY this
c) FETCH this, key
4) STORE this, key, value
(1) skalr
b) TIESCALAR objectname, LIST
c) DESTROY this
d) FETCH this
e) STORE this, value
undef EXPR
EXPR vltoz megszntetse
untie VARIABLE
Egy tie kapcsolat megszntetse.
unapck
pack fggvny ellenkezje
use MODULE, LIST
MODULE modul LIST-ben felsorolt nevei lthatv vlnak az aktulis package-ban. Ha a LIST
elmarad, akkor a MODULE ltal exportlt vltozk vlnak lthatv. A no kulcssz a use
ellentettje, azaz a lthatsgot megsznteti.
wantarray
Igaz lesz az rtke, ha a vgrehajts alatt ll alprogram visszatrsi rtkt egy listhoz akarjuk
rendelni. Ezzel a fggvnyhvssal az alprogram lnyegben meg tudja nzni, hogy milyen
krnyezetben hvtk meg t, s ettl fggen akr ms-ms tpus visszatrsi rtke is lehet!
warn LIST
Mint a die, csak nem lp ki a programbl.
Alprogramok rsa
Alprogramok deklarlsa:
sub NEV; # a NEV ismertt ttele
sub NEV BLOCK # deklarls s definci
Egy alprogramot nem kell elre deklarlni ahhoz, hogy hasznlhassuk. Az alprogramoknl a
paramterlistt sem kell deklarlni, mert ez vltozhat. A hvott alprogram a paramtereket a @_
listn keresztl kapja meg. Az alprogram utols utastsnak az rtke lesz a visszatrsi rtk,
hacsak nincs egy return utastsban ms megadva.
sub max {
my $max = pop(@_);
foreach $elem (@_) {
$max = $elem if $max < $elem;
}
$max;
}
Alprogram hvsa:
&NEV; # az aktulis @_-t adja tovbb
&NEV(LISTA); # Ha &-t runk, akkor () ktelez
NEV(LISTA); # & elhagyhat ha van () vagy mr deklarlt
NEV LISTA; # () elhagyhat, ha a NEV mr deklarlt
Alprogram hvsa akkor megy ilyen egyszeren ha az az t tartalmaz modulban lthat. Ha ettl
eltr modulban lett deklarlva, akkor modulhivatkozssal, vagy valamilyen objektum-orientlt
technikval kell meghvni a kvnt eljrst (ld. ksbb).
$m = &max(1,2,3); # a hats ugyan az
$m = max 1 2 3;
Modulok
package
A Perl nyelv lehetsget ad klnbz lthatsgi krk hasznlatra. Ezeket a lthatsgi
krket moduloknak nevezhetjk, amelyet a package kulcssz vezet be. A package hatsa az
adott blokk vgig, vagy a kvetkez package-ig tart. Alap esetben egy egyszer programban
minden a main modulba kerl be. Ha lerjuk a package szt, akkor az ez utn kvetkez
deklarcik mr az j modulba fognak tartozni. A modul neveihez a :: hivatkozs opertorral
frhetnk hozz (ez rgen egy ' jel volt, de az egyszerbb olvashatsg rdekben, meg a C++
programozk kedvrt ez megvltozott).
$elso = 1; # ez a $main::elso
package MODUL; # uj modul kezdete
$masodik = 1; # $MODUL::masodik
$elso = 1; # $MODUL::elso
$main::elso = 2;# $main::elso
A fmodul neveihez mg a $::elso hivatkozssal is hozzfrhetnk.
Szimblumtbla
A modulok szimblumtbli futs kzben elrhetek, st mdosthatak!!! A modulhoz a modul
nevvel megegyez szimblumtbla tartozik, ami lnyegben egy asszociatv tmb: %main::,
avagy %MODULE::. Az itt lv bejegyzsekhez a *nev alakban is hozzfrhetnk.
local(*main::alma) = *main::korte;
local($main::{'alma'}) = $main::{'korte'};
Ez a plda egy j lnv ltrehozst mutatja. Ezek utn minden korte-re alma-knt is
hivatkozhatunk. Az egyetlen klnbsg az, hogy az els fordtsi idben rtkeldik ki.
Konstruktor, destruktor
Ha a modulban BEGIN, illetve END kulcsszval jelzett blokkot definilunk, akkor azok a
package hasznlata eltt, illetve utn lefutnak.
package hibakezeles;
BEGIN {
open(HIBAK,">./hibak");
}
END {
close(HIBAK);
}
sub kezeles {
local ($szoveg) = @_;
print HIBAK $szoveg, "\n";
}
A programban elindtott BEGIN blokkokhoz kpest fordtott sorrendben fognak lefutni az END
blokkok. Egy modulban lv nevekhez a use kulcsszval frhetnk hozz:
use MODUL;
use hibakezeles kezeles;
A use hasznlata ekvivalens a kvetkezvel:
BEGIN { require MODUL; import MODUL; }
Modulokat implementl file-okat az @INC ltal meghatrozott knyvtrakban keresi a rendszer.
A .pm, .pl s .ph kiterjesztseket nem kell kirni a filenevek utn.
Bonyolultabb struktrk
A gondok mindg a mutatkkal kezddnek, de ez itt mg lnevekkel is kombinldik... Perl 4-ben
kicsit nehzkes volt a bonyolult adatstruktrk kezelse, de most mr vannak referencik, gy mr
mindazt a borzalmat el lehet kvetni, amit egy C programban csak el tudunk kpzelni. St mg
tbbet is, mert egy C programban nem lehetett a vltozneveket menet kzben manipullni.
Referenck ltrehozsa
Legegyszerbb a \ opertor hasznlata. Ezzel egy jabb hivatkozst kszithetnk egy vltozra
(egy mr biztosan van a szimblumtblban):
$scalarref = \$scalar;
$arrayref = \@ARGV;
$hashref = \%ENV;
$coderef = \&handler;
Nvtelen dolgokra is lehet hivatkozni:
$arrayref = [1, 2, ['a', 'b', 'c']];
$hashref = {
'dm' => 'va',
'Clyde' => 'Bonnie',
};
$coderef = sub { print "Nem nyert!\n"; };
Referencik hasznlata
Nagyon egyszer egy referancit hasznlni: a programban egy vltoz neve helyre brhova
berhatunk egy megfelel tpus referencit tartalmaz vtozt. Az egyszer esetek, amikor egy
egyszer struktrt szeretnnk hasznlni:
$ketto = $$scalarref;
print "A program neve:",$$arrayref[0],"\n";
print "HOME=",$$hashref{'HOME'};
&$coderef(1,2,3);
Persze lehet mutatni mutatra is:
$refrefref = \\\"valami";
print $$$$refrefref;
Brmilyen hely, ahol egy referencit kapnnk meg, helyettesthet egy blokkal, amely rtke a
referencia lesz:
$ketto = ${$scalarref};
print "A program neve:",${$arrayref}[0],"\n";
print "HOME=",${$hashref}{'HOME'};
&{$coderef}(1,2,3);
No persze a blokk lehet bonyolultabb is:
&{ $inditas{$index} }(1,2,3); # megfelel eljrs indul
$$hashref{"KEY"} = "VALUE"; # 1. eset
${$hashref}{"KEY"} = "VALUE"; # 2. eset
${$hashref{"KEY"}} = "VALUE"; # 3. eset
${$hashref->{"KEY"}} = "VALUE"; # 4. eset
Itt az 1. s 2., illetve a 3. s 4. eset egyenrtk.
A fenti esetek egyszerstsre szolgl a -> opertor:
print "A program neve:",$arrayref->[0],"\n";
print "HOME=",$hashref->{'HOME'};
Ennek balrtke brmilyen kifejezs lehet, amely egy referencit ad vissza. Ez az opertor el is
hagyhat {} vagy [] zrjelek kztt (de tnyleg csak kzttk!):
$array[$x]->{"valami"}->[0] = "janur";
$array[$x]{"valami"}[0] = "janur";
Ezzel el is jutottunk a tbbdimenzis C-beli tmbkhz:
$tomb[42][4][2] += 42;
Szimblikus hivatkozsok
Ha a fent emltett hivatkozsokban egy blokk nem egy vltoz referencijval, hanem egy string-
gel tr vissza, a nyelv akkor sem esik ktsgbe. Szorgalmasan elkezdi bngszni a
szimblumtblt, htha tall egy ilyen bejegyzst:
$nev = "ize";
$$nev = 1; # $ize
${$nev} = 2; # $ize
${$nev x 2} = 3;# $izeize
$nev->[0] = 4; # $ize[0]
&$nev(); # &ize()
$modulom = "MAS"
${"${modulom}::$nev"} = 5; # $MAS::ize
Ha ez a szabadsg nem tetszik neknk, akkor megkthetjk keznket a use strict; hasznlatval.
OOP
Objektum
Az objektum brmilyen referencia lehet, ami meg van ldva azzal a tudssal, hogy hol jtt ltre:
package ValamiUj;
sub new { bless {} } # 1. verzi
sub new { # kicsit bonyolultabban...
my $self = {};
bless $self;
$self->initialize();
return $self;
}
A referencia ltalban egy asszociatv tmb szokott lenni, amely aztn az objektum sajt kis
szimblum tbljaknt szolgl. Az objektumokat jra meg lehet ldani. Ekkor az objektum az j
osztlyba kerl, az eredeti osztlyt "elfelejti", hisz egy objektum egyszerre csak egy osztlyhoz
tartozhat. Ezek utn az j osztlynak kell gondoskodnia az eredeti adattagokkal kapcsolatos
teendkrl. ld.Destruktorok
Osztly
Az osztly egy package. Nincs semmi klns jells arra, hogy ez egy osztly, st mg az
inicializl eljrst sem kell new-nak hvni. Egy osztlyban csak a metdusok rklsre van
tmogats az @ISA tmbbn keresztl. Ez egy modul neveket tartalmaz tmb. Ha egy metdust
nem tallhat meg az aktulis package-ban, akkor az ebben a tmbben felsorolt modulok lesznek
bejrva a hinyz alprogramrt. Ez egy mlysgi keress lesz. Ha itt sem tall semmit, s van egy
AUTOLOAD nev fggvny, akkor megprblja ezzel elszedetni a hinyz eljrst. Ha ez a
lehetsg sem jrt sikerrel, akkor egy UNIVERSAL-nak nevezett modulban fog keresglni a
rendszer. Az @ISA tmb szpsge az, hogy menet kzben is lehet mdostani, azaz menet
kzben megvltoztathatjuk egy osztly leszrmazsi fjt! Nyilvnvalan az adattagok rklsre
is szksg van egy objektum-orientlt nyelvben, ez a Perlben az @ISA tmb segtsgvel
megvalsthat.
package A;
sub new {
my $type = shift;
my $self = {};
$self->{'a'} = 42;
bless $self, $type;
}
package B;
@ISA = qw( A ); # A a B sosztlya
sub new {
my $type = shift;
my $self = A->new;
$self->{'b'} = 11;
bless $self, $type;
}
package main;
$c = B->new;
print "a = ", $c->{'a'}, "\n";
print "b = ", $c->{'b'}, "\n";
Metdus
Semmi klns jells nincsen rjuk, kivve a destruktorokat. Alapveten ktfajta metdus van:
statikus metdus
Ez els paramterben az osztly nevt kapja meg:
package ValamiUj;
sub holvagyok {
my ($neve) = @_;
print "holvagyok: $neve\n";
}
Ez a kvetkezkppen hvhat:
ValamiUj->holvagyok();
"rendes" metdus
Ez az els paramterben egy referencit vr.
package ValamiUj;
sub new {
my $self = {};
bless $self;
$self->{elso} = 1; # ez {"elso"}-vel egyenrtk
$self->{ize} = 42;
return $self;
}
sub kiir {
my $self = shift;
my @keys = @_ ? @_ : sort(keys(%$self));
foreach $key (@keys) {
print "\t$key => $self->{$key}\n";
}
}
s ennek hvsa:
use ValamiUj;
$obj = ValamiUj::new();
$obj->kiir(); # C++ stlus
kiir obj "elso"; # "print" stlus
Destruktor
Destruktor is definilhat az osztlyhoz, ha a modulban megadunk egy DESTROY nev eljrst.
Ez akkor lesz meghvva, amikor az utols hivatkozs is megsznik az adott objektumra, vagy a
program futsa befejezdik.
Nincs rekurzv destruktor-meghvs, vagyis az jraldott objektum eredeti osztlyra vonatkoz
destruktort explicit meg kell hvni. Az objektumban trolt adattagokra azonban a destruktor
meghvsa megtrtnik.
PHP
Ebben a fejezetben a PHP programozsi nyelvet, ezt az utbbi idben egyre jobban elterjedt,
szerveroldali szkript nyelvet prblom meg bemutatni. A PHP a dinamikus, interaktv
weboldalak ltrehozsnak egyik legegyszerbb s leghatkonyabb eszkze. Hasznlatval
elenysz mennyisg kdolssal egyszer s hatkony szkripteket illeszthetnk web oldalunkba,
amik a legalapvetbb feladatoktl a legsszetettebb alkalmazsokig gyakorlatilag brmilyen
feladat elvgzsre kpesek. A PHP azonban egy jelents ponton eltr az eddig ismert szkript
nyelvektl. Szerveroldali szkript nyelv ez is, vagyis a szerveren fut le, azonban a kd maga a
HTML-kdba beillesztve tallhat meg. A PHP rtelmez felismer a HTML-oldalba illesztett
PHP kdot, rtelmezzi, lefuttatja s eredmnyt visszaadja a bngszn keresztl. A knnyebb
rthetsg kedvrt tekintsnk egy pldt:
<html>
<head><title>Els PHP pldnk</title></head>
<body>
<hr>
<?php
echo "Hello PHP!";
?>
<hr>
</body>
</html>
A kiemelt rsz maga a PHP szkript. Nem tl bonyolult, de ahhoz elg, hogy rrezznk, mirl is
van sz. Ha a fenti HTML-kd keresztlfut a PHP rtelmezn, akkor az szreveszi a <?php
tagrl, hogy a kvetkezkben nem hagyomnyos HTML-kdrl van sz, hanem PHP
programrszletrl. A programot az rtelmez vgrehajtja s az echo utastsnak megfelelen a
"Hello Moon" feliratot rja ki. Illetve nem pontosan kiirja, hanem a HTML-kdban a szkript
helyre a kimenetet beilleszti. A HTML s a szkript egyttes eredmnye az albbi kd lesz:
<html>
<head><title>Els PHP pldnk</title></head>
<body>
<hr>
Hello PHP!
<hr>
</body>
</html>
Alapok
A PHP szerveroldali begyazott nyelv. A parancsok - tulajdonkppen maguk a programok - a
szerveren futnak le oly mdon, hogy a megfelel kiterjeszts llomnyt a PHP parancsrtelmez
tfsli, rtelmezi a PHP parancsokat s utastsokat, azokat megfelel mdon vgrehajtja, s az
esetleges kimeneteket (a pldban ltott mdon) beilleszti a HTML-oldalba. Ez nagyon kellemes
dolog, hiszen a felhasznl mr a programunk ltal generlt tartalmat ltja, s nem magt a PHP
programot. Ugyanakkor egyszerbb feladatokat egy pr soros beillesztett programocska is el tud
ltni, a viszonylag sokkal bonyolultabb CGI programok helyett.
A PHP rendkvl sokoldal nyelv, gyakorlatilag minden olyan eszkz rendelkezsre ll, ami egy
hatkony nyelvhez szksges, br a CGI programok ksztshez kell sszes alapvet
kpessggel, de ezen tlmenen mg nagyon sok minden tud. Nzzk meg a PHP legfontosabb
lehetsgeit:
Vltozk rugalmas hasznlata. A vltozk tpusa nincs mereven rgztve, azt a program futsa
kzben a PHP a vltoz krnyezettl fggen llaptja meg. Ugyanakkor szles lehetsgeink
nylnak a vltozk egymsba trtn konvertlsra, mindezt termszetesen automatikusan.
Figyelemre mlt a tmbk rugalmas hasznlata.
Kvlrl tvehet vltozk. HTML-formokbl meghvott PHP oldalak, a formokban felhasznlt
vltozkat egyszeren, nevkkel trtn hivatkozssal vehetik t.
Hatkony filekezels. Seregnyi filekezel, fileinformcis s knyvtrkezel fggvny teszil
lehetv a fileokkal vgzend munkt.
Kpek ksztse s manipulcija. A PHP olvassa a GIF, JPEG s PNG llomnyokat, ezeket
kpes manipullni. A manipullt vagy az jknt ellltott grafikus llomnyokat JPEG s a PNG
formtumban kpes kirni, de lehetsges olyan PHP programok ksztse, amik a statikus
grafikus llomnyokhoz hasonlan hasznlhatk, tartalmukat azonban dinamikusan lltjk el.
Filefeltlts kezelse. Lehetsges a felhasznl gprl fileok feltltst kezdemnyezni a PHP
programot futtat szerverre.
Tvoli fileok elrse. Lehetsgnk van HTTP cmek megnyitsra, gyakorlatilag a helyi fileok
megnyitsval azonos mdon.
Regulris kifejezsek hasznlata. A Perl nyelvben hasznlatos regurlis kifejezsek hasznlhatk
a PHP programokban a stringekben trtn keressekhez, karaktercserkhez, karakterrszletek
msolshoz. Br kezdk rszre a regulris kifejezsek hasznlata eleinte okozhat
bonyodalmakat, rdemes ksbb elmerlni bennk, mert igen hasznos eszkzk.
Adatbzisok elrse. A PHP egyik legfontosabb tulajdonsga az adatbzisrendszerek igen szles
krnek hasznlhatsga. A teljessg ignye nlkl itt van nhny a tmogatott adatbzisok
kzl: MySQL, mSQL, dBase, Oracle, Sybase, PostgreSQL, Ingres.
Vltozk PHP-ban
A PHP nyelvben a vltozkat a nevk el tett '$' jel jelli. Az albbi alapvet vltoztpusokat
klnbztetjk meg: egsz szmok, stringek s lebegpontos vltozk. A vltozk
legegyszerbben valamilyen rtkadssal kaphatnak rtket, valahogy gy:
$a = 10;
$b = 'Ez most egy string';
$pi = 3.1415;
Termszetesen a vltozkkal az sszes ismert s az adott vltozra rtelmezhet mvelet
elvgezhet, azonban lteznek klnlegesebb opertorok is, illetve a vltozk rtkeadsnl van
mg nhny rdekessg:
$c = ($a = 10);
Az rtkadsnak nmagban is rtke van, vagyis a fenti esetben $c vltoz ugyanazt az rtket
kapja, amit $a kapott meg. Ennek gy a fenti esetben nem sok rtelme van, de ksbb ltni fogjuk,
hogy sok esetben hasznos lehet ez a fajta rtkads.
$c += 10;
A kifejezs megegyezik ezzel: $c = $c + 10; de hasonlan mkdik a kivons szorzs, oszts s a
stringek sszefzse esetn.
++$c;
Az inkrementl (nvel) opertor a vltoz rtkt nveli meg eggyel. Hasonlkppen mkdik
cskkentsre --$c; formban. Ezt az opertort leginkbb ciklusokban hasznljuk gyakran
valamely vltoz rtknek lptetsre. A ++$c; kifejezst felrhatnnk gy is $c++; azonban ez
nem egszen ugyanaz. Amennyiben a vltoz eltt van a nvels opertora brmely egyb
rtkadst megelz a nvels, egybknt nem. Ha $c rtke 10, akkor a $a = (++$c); rtkadst
kveten $c rtke 11 lesz s $a rtke is. Ugyanakkor, a $a = ($c++); rtkads hatsra $a
felveszi $c rtkt, ami 10, majd $c rtke megnvekedik, gy 11 lesz.
Kln szt rdemes ejteni a stringek sszefzsrl:
$a = 'alma';
$b = ' a fa alatt';
$c = $a.$b;
$c rtke 'alma a fa alatt' lesz. A pont opertor szolgl a stringek sszefzsre, ne hasznljuk az
sszeads opertort ilyen esetekben. Viszont hasznlhat a $c .= $a kifejezs a szmokhoz
hasonlan, amikor is a kifejezs jobb oldaln lv rtket a kifejezs bal oldaln llhoz fzi
hozz.
Mint mr elbb utaltam r, a vltozk tpusa a PHP-ben nincsen rgztve, azok a krlmnyekhez
kpest megvltozhatnak. Termszetesen van r md, hogy a vltozk tpust pontosan belltsuk
- erre szolglhat a settype() fggvny - de az rtkadsnl is pontosan definilhatjuk a vltoz
tpust, ha $c = (real) 10; formban teszzk azt. Az rtkadsnl hasznlhat tpusok az albbiak
lehetnek:
(int) vagy (integer) - egsz szmok meghatrozsra
(real), (double), (float) - lebegpontos szmok meghatrozsra
(string) - szveges vltozk meghatrozsra
(array) - tmbk meghatrozsra
(object) - objektumok meghatrozsra
A vltozk tpusnak rugalmassgra az albbi plda mutathat r:
$a = '10 krte';
$b = 20;
$c = $a + $b;
A pldban szerepl $c rtke 30 lesz, mert $a-t a PHP szmknt rtelmezi, gondolvn azt
akartuk. A vltozk tpusnak automatikus konverzija eleinte kicsit furcsa lehet olyanoknak,
akik a vltoztpusokat szigoran meghatroz nyelvekhez szoktak, de rvid id utn magtl
rtetden hasznlhatjuk ezt az igen hasznos lehetsget.
Sokszor hasznos lehetsge a PHP-nek a vltoz vltozk hasznlata. Ilyen esetben a vltoz
nevt, dinamikusan, egy msik vltoz rtkbl eredeztetjk. Ha $gyumolcs vltoz rtke
"krte", s $nev rtke "gyumolcs", akkor a $$nev vltoz rtke meg fog egyezni a $gyumolcs
vltoz rtkvel.
A PHP nyelvben egy egsz sor fggvny s utasts kapcsolatos a vltozkkal. Ezek a PHP
referencikban megtallhatk, azonban itt kiemelek nhny fontosabbat.
Empty() - logikai fggvny, mely igaz rtkkel tr vissza, ha a vltoz rtke nulla, res string,
vagy a vltoz nincsen belltva. Ezek szerint, ha $a=10, akkor empty($a) rtke hamis lesz,
ellenben ha $b rtke 0 vagy $b-nek mg nem adtunk egyltaln rtket, akkor empty($b) rtke
igaz lesz.
Gettype() - visszadja egy vltoz tpust.
Print_r() - ember szmra olvashat informcit ad egy vltoz rtkrl. Rendkvl hasznos
fggvny olyan esetben, amikor a vltozink rtkt a tesztels sorn nyomon akarjuk kvetni, de
tmbkrl is nagyon jl ttekinthet kpet ad. Ksbb lthat mg plda a print_r() fggvny
hasznlatra.
Az egyszer skalris vltozkat kveten nzzk meg a tmbket.
Tmbk a PHP-ban
A tmbk, azok klnbz lehetsgei s az azok kr felsorakoztatott fggvnyek a PHP
programozs egyik legerteljesebb eszkzrendszert alkotjk, ugyanakkor rendkvl egyszeren
s knnyedn hasznlhatk. A tmb vltozk halmaza, melyeket a tmbn bell sorban
trolhatunk s a teljes adathalmazt egyszerre is kezelhetjk, ugyanakkor a tmb elemeihez kln-
kln is hozzfrhetnk. Fontos tulajdonsga a tmbknek, hogy egy tmbn bell az elemek
tpusa klnbz lehet. Egy tmb elemeit legegyszerbben explicit mdon, elemenknt tlthetjk
fel:
$tomb[1] = "dBase";
$tomb[2] = "FoxPro";
$tomb[4] = "Clipper";
$tomb[5] = 42;
Lthat, hogy a tmb elemeinek megadsakor nem szksges a sorrendisget szigoran betartani.
Egy tmb elemeihez a fentieknl egyszerbben is, a tmbindex hasznlata nlkl is lehet
elemeket adni:
$tomb[] = "Basic";
$tomb[] = "FoxPro";
ly mdon a tmb vghez kapcsoldnak az j elemek, az index rtke pedig az legutols
indexelemnl eggyel magasabb lesz. Hasonlan mkdik az array_push() fggvny, azzal a
klnbsggel, hogy egy utastson bell tbb rtket is hozzfzhetnk a tmbhz:
array_push($tomb, "Cobol", "Fortran");
Szp lassan dagad tmbnk a fenti utastsokat kveten mr gy nz ki:
Array
(
[1] => dBase
[2] => FoxPro
[4] => Clipper
[5] => 42
[6] => Basic
[7] => FoxPro
[8] => Cobol
[9] => Fortran
)
Termszetesen a tmbk rtkeinek megadshoz hasonlan frhetnk hozz a tmbelemekhez,
azonban a fent emltett array_push() fggvny prja, az array_pop() fggvny is
rendelkezsnkre ll, mely azonban nemcsak egyszeren a tmb utols elemt adja vissza
rtkl, hanem a tmb elemeinek szmt is cskkenti az utols elemmel:
$nyelv1 = $tomb[1];
// $nyelv1 rtke "dBase"
$nyelv2 = $tomb[4];
// $nyelv2 rtke "FoxPro"
$nyelv9 = array_pop($tomb);
// $nyelv9 rtke "Fortran" s a tmb nyolc elem lesz
Bonyoltsuk egy kicsit a dolgokat. Ezidig a tmbnk egy dimenzis volt, azonban a PHP
nyelvben a tmbk kett vagy akr tbb dimenzisak is lehetnek. Az rtkads legegyszerbb
mdja ilyen esetben is az explicit rtkads:
$auto[1][1] = "Maserati";
$auto[1][2] = "olasz";
$auto[2][1] = "Renault";
$auto[2][2] = "francia";
$auto[3][1] = "Mercedes";
$auto[3][2] = "nmet";
a tmb valahogyan gy fog kinzni:
Array
(
[1] => Array
(
[1] => Maserati
[2] => olasz
)
[2] => Array
(
[1] => Renault
[2] => francia
)
[3] => Array
(
[1] => Mercedes
[2] => nmet
)
)
Ilyen s ehhez hasonl tmbk ltrehozsra, azonban sokkal tmrebb s olvashatbb mdszer
az array() fggvny hasznlata. Ez a fggvny a paramterknt megadott rtkeket tmb
formban adja vissza. gy a fenti rtkadssal pontosan megegyez eredmnyt ad a kvetkez:
$auto[1] = array( "Maserati" , "olasz" );
$auto[2] = array( "Renault" , "francia" );
$auto[3] = array( "Mercedes" , "nmet" );
Ahogyan azonban a tmbelemek tpusaira vonatkozan nincsenek tl szigor megktsei a PHP
nyelvnek, ugyangy nem kezeli szigoran a tbbdimenzis tmbk elemszmait sem a PHP. Az
albbi rtkads teljesen helyes eredmnyt ad:
$auto[1] = array( "Maserati" , "olasz" );
$auto[2] = array( "Renault" , "francia" , "406", "206" );
$auto[3] = array( "Mercedes" , "nmet" , "E320",
"Vito" , "Sprinter kisteheraut" );
Termszetesen az array_pop() s az array_push() fggvnyek az array() fggvnnyel tvzve
tbb dimenzis tmbk esetn is hasznlhatk.
array_push( $auto, array("Citroen" , "francia" , "ZX" , "Xsara");
A fenti esetekben a tmb elemei azok sorszmaival voltak azonostva. A PHP ismeri az
asszociatv tmbk fogalmt is. Az asszociatv tmbk rendkvl hasznos s sokoldal elemei a
PHP nyelvnek. A PERL nyelvben hasznlt hash tpus tmbkhz hasonlan mkdnek. A
tmbelemekre val hivatkozs ilyen esetben nem sorszmmal, hanem egy indexelem (kulcs)
segtsgvel trtnik, egyszeren gy, hogy a sorszm helyre, az indexelemet helyezzk.
$tomb["els"] = "Kis Gedeon";
$tomb["msodik"] = "Nagy Elemr";
Fggetlenl attl, hogy a tmb elemeinek milyen sorrendben adtunk rtket, az elemeket az
indexkulcs segtsgvel rhetjk el, s ez nem fgg attl, ha a tmbhz hozzfznk, vagy attl
elvesznk egy elemet. j elem brmikor hozzfzhet a tmbhz:
$tomb["harmadik"] = "Kukonya Berk";
Az asszociatv tmbk lehetnek egydimenzisak, mint a fenti pldban, de lehetnek tbb
dimenzisak is. A fenti pldt kibvthetjk tbb dimenziss:
$tomb["els"]["neve"] = "Kis Gedeon";
$tomb["els"]["kora"] = 27;
$tomb["msodik"]["neve"] = "Nagy Elemr";
$tomb["msodik"]["kora"] = 22;
Ha a "Nagy Elemr" rtk elemet a $tomb["msodik"]["neve"] hivatkozssal tudjuk elrni, de
ha $sorszam rtke "msodik" akkor akr $tomb[$sorszam]["neve"] hivatkozssal is elrhetjk a
keresett elemet.
A norml s az asszociatv tmbk ltrehozsra egyarnt hasznlhat az array() fggvny, amit
leginkbb tmbk kezd rtkfeltltse sorn hasznlhatunk, egy rtkadssal kikszblve
tbbet. A fenti pldkkal megegyezek az albbi rtkadsok:
$tomb = array ( "els" => "Kis Gedeon",
"msodik" => "Nagy Elemr");
$tomb = array ("els" => array ("neve" => "Kis Gedeon",
"kora" => 27),
"msodik" => array ("neve" => "Nagy Elemr",
"kora" => 22) );
Mint az albbi plda is mutatja, az rtkads esetn az index rtkt nemcsak konkrtan, hanem
vltozval is megadhatjuk, gy mr meglehetsen rugalmasan tthetjk fel tmbjeinket
adatainkkal. A kvetkez plda megmutatja a print_r() fggvny hasznlatt is, amit tetszleges
vltoz rtknek kiratshoz hasznlhatunk, de mivel tmbvltoz esetben a komplett
tmbstruktrt is megjelenti leginkbb tesztelsi clokra hasznlhat nagyon jl.
<?php
$nick1 = "X";
$nick2 = "Z";
$tomb = array (
$nick1 => array("nev" => "X Y",
"email" => "xy@valami.hu"),
$nick2 => array("nev" => "Z",
"email" => "z@bme.hu")
);
echo("<PRE><b>");
print_r($tomb);
echo("<HR>");
print_r($tomb["X"]["nev"]);
echo("</b></PRE>");
?>
A program kimenete a kvetkez lesz:
Array
(
[X] => Array
(
[nev] => X Y
[email] => xy@valami.hu
)
[Y] => Array
(
[nev] => Z
[email] => z@bme.hu
)
)
Asszociatv tmbk esetben azonban figyelemmel kell lenni arra, hogy ilyen tmb elemeit
kizrlag a meghatrozott indexrtkkel rhetjk el, a tmb sorszmval nem. Ennek rendkvl
egyszer az oka. Az egyszer sorszmozott tmb is asszociatv tmb, ahol a tmbindex maga a
sorszm. St egy tmbn bell keverhetjk is a sorszmozott s az indexelt elemeket, de azrt ezt
kerljk, csak gondot okozunk magunknak. A norml s az asszociatv tpus tmbk a PHP
programozs sorn rendkvl vltozatosan s hatkonyan hasznlhatk, fleg akkor, ha tudjuk
azt, hogy a PHP a tmbk elemeire, az elemszmokra s a tmbelemek tpusaira vonatkozan
rendkvl szabad kezet ad neknk:
tbbdimenzis tmbn bell az egyik index lehet asszociatv, a msik norml
tbbdimenzis tmb esetben a tmbelem tmbknek nem kell felttlenl azonos
elemszmaknak lenni, vagyis $tomb[1] lehet t elem, mg $tomb[2] lehet akr 8 elem is.
egydimenzis tmbk esetben a tmbelemek lehetnek klnbz tpus adatok, de mg
tbbdimenzis tmbk esetben sem kell a tmbelem tmbk adatszerkezetnek megegyeznie.
Vagyis elg nagy szabadsggal hasznlhatjuk a tmbvltozkat, mgis rdemes szem eltt
tartani, hogy ha lehet jrjunk el kvetkezetesen a vltozk rtkadsval s azok hasznlatval.
Vltozk hatskre
A vltoz hatskre az a krnyezet, amelyben a vltoz definilt. A legtbb esetben minden PHP
vltoznak egyetlen hatskre van. Ez az egyetlen hatskr kiterjed az include s a require
segtsgvel hasznlt fjlokra is. Pldul:
$a = 1;
include "b.inc";
Itt az $a vltoz elrhet lesz az beillesztett b.inc szkriptben is. A felhasznli fggvnyekkel a
loklis fggvnyhatskr kerl bevezetsre. Alaprtelmezs szerint minden, fggvnyen bell
hasznlt vltoz ebbe a loklis fggvnyhatskrbe tartozik, pldul:
$a = 1; /* globlis hatskr */
function Test ()
{
echo $a; /* egy helyi vltozt vr */
}
Test();
Ez a szkript nem fog semmilyen kimenetet sem eredmnyezni, mivel az echo kifejezs az $a
vltoznak egy helyi - fggvnyen belli - vltozatra utal, s ebben a hatskrben ehhez nem
rendeltek rtket. Ez valamelyest klnbzik a C nyelv filozfijtl, ahol a globlis vltozk
automatikusan elrhetk brmely fggvnybl, feltve ha a fggvnyben jra nem definiltad azt
a vltozt. Ez problmk forrsa lehet, ha az ember vletlenl megvltoztat egy globlis vltozt.
A PHP-ben a globlis vltozkat global kulcsszval kell deklarlni a fggvnyekben, pldul:
$a = 1;
$b = 2;
function Osszead()
{
global $a, $b;
$b = $a + $b;
}
Ossszead();
echo $b;
A fenti szkript kirja, hogy "3". $a s $b global-knt val deklarlsval minden utals ezekre a
vltozkra a globlis vltozt fogja rinteni. Nincs megktve, hny globlis vltozt kezelhet egy
fggvny. Globlis vltozk elrsnek msik mdja a PHP ltal definilt specilis $GLOBALS
tmb hasznlata. Az elbbi pldval egyenrtk megolds:
$a = 1;
$b = 2;
function Osszead()
{
$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
}
Osszead();
echo $b;
A $GLOBALS asszociatv tmb, ahol a globlis vltoz neve jelenti a kulcsot, s a vltoz rtke
a tmbelem rtke.
A vltozk hatskrnek msik fontos lehetsge a static (statikus) vltoz. A statikus vltoz
csak loklis hatskrben l - egy fggvnyen bell, de kt fggvnyhvs kzt nem veszti el az
rtkt, a vltoz hatskrbl val kilps esetn is megmarad az rtke:
function Test()
{
$a = 0;
echo $a;
$a++;
}
Ez nagyon haszontalan fggvny, mivel nem csinl mst, mint minden meghvsakor $a-t 0-ra
lltja, aztn kirja a 0-t. Az $a++ teljesen felesleges, mert amint vge a fggvny futsnak az $a
vltoz megsznik. Ahhoz, hogy ebbl rtelmes szmllfggvny legyen - megmaradjon a
szmll rtke -, az $a vltozt statikusnak kell deklarlni:
Function Test()
{
static $a = 0;
echo $a;
$a++;
}
Most mr valahnyszor meghvdik a Test() fggvny, kirja $a rtkt, majd azt megnveli
eggyel.
Fejezet. Konstansok
A konstans egy egyszer rtk azonostja (neve). Mint ahogy az elnevezse is mutatja, a
program futsa sorn nem vltozik meg az rtke (a mgikus __FILE__ s __LINE__ konstansok
az egyedli kivtelek ez all). A konstansok alapesetben rzkenyek a kis- s nagybets
irsmdra. Megllapods szerint ltalban csupa nagybets neveket adunk a konstansoknak.
Konstansok
A konstansok neveire a PHP ms jelzivel azonos szablyok vonatkoznak. Egy rvnyes
konstans nv betvel vagy alhzssal kezddik, amit tetszleges szm bet, szm vagy
alhzs kvet. A konstansok brhonnan elrhetek. Konstanst a define() fggvnnyel lehet
ltrehozni. Definilsa utn ksbb nem lehet trlni vagy megvltoztatni az rtkt. Csak
skalris adat (boolean, integer, double vagy string tpus) lehet egy konstans tartalma. A konstans
rtkre a nevnek megadsval lehet hivatkozni. A vltozkkal ellenttben nem szabad $ jelet
tenned a konstans neve el. Hasznlhat mg a constant() fggvnyt is, ha pldul a konstans
nevt egy vltoz adja. A get_defined_constants() fggvnnyel lehet a definilt konstansok
listjt megkapni.
Megjegyzs: A konstansok s a (globlis) vltozk klnbz nvtrben vannak. Ez azt jelenti,
hogy a TRUE s a $TRUE kt klnbz dolgot jelent. Ha egy definilatlan konstanst prblsz
meg hasznlni, a PHP a konstans nevt veszi karaktersorozatknt rtkl. Ilyen esetekben egy
notice szint hiba keletkezik. A defined() fggvny segtsgvel vizsglhat a konstans ltezse.
<?php
define("KONSTANS", "Hell vilg!");
echo KONSTANS; // kirja, hogy "Hell vilg!"
echo Konstans; // kirja, hogy "Konstans" s hibt eredmnyez
?>
Kommentek
A PHP tmogatja a 'C', 'C++' s Unix shell-szer kommenteket. Pldul:
<?php
echo "Ez egy teszt"; // Ez egy egysoros c++ szer komment
/* Ez egy tbbsoros komment
Mg egy sor komment */
echo "Ez egy msik teszt";
echo "Ez az utols teszt"; # Ez egy shell-szer komment
?>
Az "egysoros" kommentek valjban csak a sor vgig, vagy az aktulis PHP kd vgig
tartanak, attl fggen, hogy melyik jn elbb.
<h1>Ez egy <?php# echo "egyszer";?> plda.</h1>
<p>A fenti fejlc kirja 'Ez egy egyszer plda'.
Opertorok
Opertorok precedencija
Az opertorok precedencija azt hatrozza meg, hogy milyen "szorosan" kt ssze kt kifejezst.
Pldul az 1 + 5 * 3 kifejezsben, a kifejezs rtke 16, s nem 18, mert a szorzs opertornak, a
("*")-nak nagyobb precedencija van, mint az sszeadsnak ("+"). Zrjelek segtsgvel
tetszleges precedencit lehet fellltani egy kifejezsen bell, ha szksges. Pldul a (1 + 5) * 3
eredmnye 18 lesz.
Az albbi tblzat az opertorokat precedencijuk szerint nvekv sorrendben tartalmazza.
Tblzat 10-1. Opertorok precedencija
asszociativits opertorok
balrl jobbra ,
balrl jobbra or
balrl jobbra xor
balrl jobbra and
jobbrl balra print
balrl jobbra = += -= *= /= .= %= &= |= ^= ~= <<= >>=
balrl jobbra ?:
balrl jobbra ||
balrl jobbra &&
balrl jobbra |
balrl jobbra ^
balrl jobbra &
nem kthet == != === !==
nem kthet < <= > >=
balrl jobbra << >>
balrl jobbra +-.
balrl jobbra */%
jobbrl balra ! ~ ++ -- (int) (float) (string) (array) (object) @
jobbrl balra []
nem kthet new
Aritmetikai opertorok
Tblzat 10-2. Aritmetikai opertorok
Plda Nv Eredmny
$a + $b sszeads $a s $b sszege
$a - $b Kivons $a s $b klnbsge
$a * $b Szorzs $a s $b szorzata
$a / $b Oszts $a s $b hnyadosa
$a % $b Modulus $a / $b maradka
Az oszts opertor ("/") egsz rtkkel tr vissza (egy egsz oszts eredmnyekppen) ha a kt
operandusa egsz (vagy string, ami egssz konvertldott) s a hnyados is egsz. Ha
valamelyik operandus lebegpontos szm, vagy az oszts eredmnye nem egsz, egy
lebegpontos szm a visszatrsi rtk.
Hozzrendel opertorok
Az alapvet hozzrendel opertor az "=". Elsre azt hihetnnk, hogy ez az "egyenl valamivel"
jele. Valjban azt jelenti, hogy a bal oldali operandus [ami az egyenlsgjel bal oldaln ll] a
jobb oldali kifejezst kapja rtkl.
A hozzrendel kifejezs rtke a bal oldalhoz rendelt rtk. Vagyis a "$a = 3" rtke 3. Ez
lehetsget ad nhny trkks dologra:
$a = ($b = 4) + 5; // $a most 9, s $b 4
Az alapvet hozzrendel opertoron fell vannak n. "kombinlt" opertorok is az sszes
ktoperandus aritmetikai s sztring opertorok szmra, amelyek lehetv teszik, hogy
hasznljunk egy vltozt egy kifejezsben, majd rgtn be is lltsuk a vltozt a kifejezs
rtkre. Pldul:
$a = 3;
$a += 5; // $a-t 8-ra lltja, mintha $a = $a + 5;-t rtunk volna
$b = "X ";
$b .= "Y"; // $b "X Y" lesz, egyenrtk prja: $b = $b . "Y";
A hozzrendels az eredeti vltozt az jba msolja rtk szerint, gy az egyiken elvgzett
vltoztatsok a msikat nem rintik. Ezt fontos tudni, pldul egy sokszor vgrehajtott ciklus
belsejben nagy tmbk msolsakor. A PHP 4 tmogatja a $var =&$othervar; szintaxis
referencia szerinti rtk hozzrendelst is, de ez PHP 3-ban nem mkdik. A 'referencia szerinti
rtkhozzrendels' azt jelenti, hogy mindkt vltoz ugyanarra az adatra fog mutatni, s nem
trtnik meg a vltoz rtknek lemsolsa.
Bitorientlt opertorok
A bitorientlt opertorok teszik lehetv, hogy egsz tpus szmokon bell bizonyos biteket
belltsunk, vagy lefedjnk (maszkols). Ha viszont az opertron mindkt oldaln sztring tpus
vltoz ll, akkor a bitorientlt opertorok a sztringek karakterein dolgoznak gy, hogy a
karakterek ASCII kdjain vgzik el a mveletet, s az eredmnyl add szmot ASCII kddal
megadott karakternek rtelmezi.
<?php
echo 12 ^ 9; // '5' -t r ki
echo "12" ^ "9"; // kirja a visszaperjel karaktert (ASCII #8), mert
// ('1' (ASCII #49)) ^ ('9' (ASCII #57)) = (ASCII #8)
echo "hallo" ^ "hello"; // eredmny: #0 #4 #0 #0 #0
// 'a' ^ 'e' = #4
?>
Tblzat 10-3. Bitorientlt opertorok
Plda Nv Eredmny
$a & Ott lesz '1' az eredmnyben, ahol $a s $b mindegyikben az a bit '1'-es.
s
$b Minden ms biten '0'.
Ott lesz '1' az eredmnyben, ahol $a s $b kzl legalbb az egyik azon a bitje
$a | $b Vagy
'1'-es. Minden ms biten '0'.
Ott lesz '1' az eredmnyben, ahol $a s $b kzl csakis pontosan az egyikben
$a ^ Kizr '1' llt. Minden ms biten '0'. [Ms kzeltsben ott lesz '1' az eredmnyben,
$b vagy ahol klnbz bitek lltak $a-ban s $b-ben; megint ms kzeltsben $a
azon bitjei invertldnak, amely helyeken $b-ben '1' ll]
~ $a Nem $a sszes bitjt invertlja
$a << Eltols $a bitjeit $b szm bittel balra tolja (minden bitnyi eltols 2-vel val szorzst
$b balra jelent [amg el nem fogynak a bitek, utols helyen eljelbit van ?!])
$a >> Eltols $a bitjeit $b szm bittel jobbra tolja (minden bitnyi eltols 2-vel val egsz-
$b jobbra osztst jelent. [Vigyzz, negatv szmot inkbb ne tolj jobbra!])
sszehasonlt opertorok
Az sszehasonlt opertorok, mint nevk is sugallja, kt rtk sszehasonltsra szolglnak.
Tblzat 10-4. sszehasonlt opertorok
Plda Nv Eredmny
$a == $b Egyenl Igaz (TRUE), ha $a s $b rtke egyenl
Igaz (TRUE), ha $a s $b rtke egyenl, s azonos tpusak (csak
$a === $b Azonos
PHP 4)
$a != $b Nem egyenl Igaz (TRUE), ha $a s $b rtkei klnbzk
$a <> $b Nem egyenl Igaz (TRUE), ha $a s $b rtkei klnbzk
Igaz (TRUE), ha $a s $b rtkei vagy tpusai klnbzk (csak
$a !== $b Nem azonos
PHP 4)
$a < $b Kisebb mint Igaz (TRUE), ha $a szigoran kisebb, mint $b
$a > $b Nagyobb mint Igaz (TRUE), ha $a szigoran nagyobb, mint $b
Kisebb, vagy
$a <= $b Igaz (TRUE), ha $a kisebb, vagy egyenl, mint $b
egyenl
Nagyobb, vagy
$a >= $b Igaz (TRUE), ha $a nagyobb, vagy egyenl, mint $b
egyenl
A feltteles "?:" (ternlis) opertor gyangy mkdik, mint C-ben s sok ms nyelvben.
(kif1) ? (kif2) : (kif3);
A kifejezs kif2-t rtkeli ki, ha kif1 igaznak bizonyul (TRUE), s kif3-at, ha kif1 hamis
(FALSE).
Hibakezel opertorok
A PHP egy hibakezel opertort tmogat, az at jelet (@ - kukac). PHP kifejezs el rva a
kifejezs ltal esetlegesen generlt hibazenete(ke)t figyelmen kvl hagyja a rendszer.
Ha a track_errors szolgltats be van kapcsolva, brmilyen a kifejezs ltal generlt hibazenet a
$php_errormsg globlis vltozba kerl trolsra. Ez a vltoz minden hiba esetn fellrdik,
ezrt hasznlhat informcik kinyerse rdekben a kifejezst kveten ezt minl hamarabb
ellenrizni kell.
<?php
/* Szndkos llomny megnyitsi hiba */
$file = @file ('nem_letezo_allomany') or
die ("Nem lehet megnyitni, a hiba: '$php_errormsg'");
// brmilyen kifejezsre mkdik, nem csak fggvnyekre
$ertek = @$tomb[$kulcs];
// nem ad notice szint hibt, ha a $kulcs kulcs nem ltezik
?>
Megjegyzs: A @ opertor csak kifejezsekre mkdik. Egyszer klszablyknt
alkalmazand, ha valaminek az rtelmezett az rtke, akkor az el a @ opertor is oda
tehet. Ekkppen pldul hasznlhat vltozk, fggvnyek s include() hvsok,
llandk neve eltt s sok ms esetben. Nem hasznlhat azonban fggvny s osztly
defincik vagy nyelvi szerkezetek (mint pldul if s foreach utastsok) eltt.
Vgrehajt opertorok
A PHP-ban ltezik egy program-vgrehajt opertor: a visszaidzjel (``). Ezek nem szimpla
idzjelek! A PHP megprblja a sztring tartalmt parancssorbl futtatand utastsknt
vgrehajtani, amelynek a kimenete lesz az opertor rtke. Ez nem egyszeren a kimenetre kerl,
hanem hozzrendelhet egy vltozhoz.
$output = `ls -al`;
echo "<pre>$output</pre>";
Nvel/cskkent opertorok
A PHP tmogatja a C-szer n. el- s utnvekmnyes ill. cskkent opertorokat.
Tblzat 10-5. Nvel/cskkent opertorok
Plda Nv Hats
++$a elnvekmnyes Nveli $a-t eggyel, majd visszaadja $a rtkt
$a++ utnvekmnyes Visszaadja $a rtkt, majd nveli $a-t eggyel
--$a elcskkent Cskkenti $a-t eggyel, majd visszaadja $a rtkt
$a-- utcskkent Visszaadja $a rtkt, majd cskkenti $a-t eggyel
Itt egy egyszer pldaprogram:
<?php
echo "<h3>Utnvekmnyes</h3>";
$a = 5;
echo "5-nek kell lennie: " . $a++ . "<br>\n";
echo "6-nak kell lennie: " . $a . "<br>\n";
echo "<h3>Elnvekmnyes</h3>";
$a = 5;
echo "6-nak kell lennie: " . ++$a . "<br>\n";
echo "6-nak kell lennie: " . $a . "<br>\n";
echo "<h3>Elcskkent</h3>";
$a = 5;
echo "5-nek kell lennie: " . $a-- . "<br>\n";
echo "4-nek kell lennie: " . $a . "<br>\n";
echo "<h3>Utcskkent</h3>";
$a = 5;
echo "4-nek kell lennie: " . --$a . "<br>\n";
echo "4-nek kell lennie: " . $a . "<br>\n";
?>
Logikai opertorok
Tblzat 10-6. Logikai opertorok
Plda Nv Eredmny
$a and $b s Pontosan akkor igaz (TRUE), ha mind $a mind $b igazak (TRUE).
$a or $b Vagy Pontosan akkor igaz (TRUE), ha $a s $b kztt van igaz (TRUE).
Kizr Pontosan akkor igaz (TRUE), ha $a s $b kzl pontosan egy igaz
$a xor $b
vagy (TRUE).
! $a Tagads Pontosan akkor igaz (TRUE), ha $a nem igaz (TRUE).
$a && $b s Pontosan akkor igaz (TRUE), ha mind $a mind $b igaz (TRUE).
$a || $b Vagy Pontosan akkor igaz (TRUE), ha $a s $b kztt van igaz (TRUE).
String opertorok
Kt string opertor van. Az egyik az sszefzs opertor ('.'), amely bal s jobb oldali
operandusnak sszefzttjvel tr vissza. A msodik az sszefz-hozzrendel opertor ('.='),
amely hozzfzi a jobb oldalon szerepl szveges rtket a bal oldali operandus vghez.
$a = "Para ";
$b = $a . "Zita"; // most $b rtke "Para Zita"
$a = "Drdarz ";
$a .= "Vilmos"; // most $a rtke "Drdarz Vilmos"
Vezrlsi szerkezetek
Az sszes PHP szkript utastsok sorozatbl ll. Az utasts lehet hozzrendel utasts,
fggvnyhvs, ciklus, feltteles utasts, vagy res utasts. Az utastsok ltalban
pontosvesszvel vgzdnek. Ezenkvl az utastsokat csoportostani lehet; utastsblokkba
foglalhatk kapcsos zrjelek segtsgvel. Az utastsblokkok maguk is utastsok. A klnfle
utaststpusokat ebben a fejezetben trgyaljuk.
if
Az if szerkezet az egyik legfontosabb szerkezete a legtbb nyelvnek - gy a PHP-nek is. A PHP a
C-ben megismerthez hasonl if szerkezettel br:
if (kifejezs)
utasts
Amint a kifejezsekrl szl fejezetben szerepel, a kifejezs logikai rtke rtkeldik ki. Ha
kifejezs TRUE, akkor a PHP vgrehajtja az utastst; ha FALSE, akkkor figyelmen kvl hagyja.
Arrl, hogy mely rtkek tekinthetk FALSE-nak, a Logikai rtkk alakts c. fejezetben
olvashatsz.
Az albbi plda kirja, hogy a nagyobb, mint b, ha $a nagyobb, mint $b:
if ($a > $b)
print "a nagyobb, mint b";
Gyakran sok utastst kell felttelhez ktve vgrehajtani. Termszetesen nem kell minden
utastshoz kln if-et rni. Az utastsokat utastsblokkba lehet sszefogni. Az albbi kd
pldul kirja, hogy a nagyobb, mint b ha $a nagyobb, mint $b, s utna hozzrendeli $a rtkt
$b-hez:
if ($a > $b) {
print "a nagyobb, mint b";
$b = $a;
}
A feltteles utastsok vg nlkl tovbbi if utastsokba gyazhatk, amely a program klnbz
rszeinek feltteles vgrehajtst igen hatkonny teszi.
else
Gyakori, hogy egy bizonyos felttel teljeslse esetn valamilyen utastst kell vgrehajtani, s
valamilyen msik utastst, ha nem teljesl a felttel. Erre val az else. Az else kibvti az if
utastst, hogy akkor hajtson vgre utastst, amikor az if kifejezs FALSE-knt rtkeldik ki.
Az albbi kd pldul kirja, hogy a nagyobb, mint b ha $a $b-nl nagyobb, egybknt az a NEM
nagyobb, mint b zenetet rja ki:
if ($a > $b) {
print "a nagyobb, mint b";
} else {
print "a NEM nagyobb, mint b";
}
Az else utasts csak akkor hajtdik vgre, ha az if kifejezs s az sszes elseif kifejezs is
FALSE rtk. Az elseif -rl most olvashatsz.
elseif
Az elseif, amint azt a neve is sugallja, az if s az else kombincija. Az else-hez hasonlan az if
utastst terjeszti ki, hogy klnbz utastsokat hajtson vgre abban az esetben, ha az eredeti if
kifejezs rtke FALSE lenne. Azonban az else-sel ellenttben csak akkor hajtra vgre az
alternatv kdrszt, ha az elseif kifejezs TRUE. Az albbi kd pldul - $a rtktl fggen -
dvzli Men Mant, s Vz Eleket, vagy kirja, hogy ismeretlen:
if ($a == "Men Man") {
print "Szervusz Men Man! Rg lttalak!";
} elseif ($a == 'Vz Elek') { #szimpla idzjel is hasznlhat
print "dv Vz Elek!";
} else {
print "Szervusz, idegen. Ht tged mi szl hozott ide?";
}
Egy if kifejezst tbb elseif kvethet. Az els olyan elseif kifejezs hajtdik vgre (ha van),
amely rtke TRUE. A PHP-ban az 'else if' is (klnrva) hasznlhat s ugyangy fog
viselkedni, mint az 'elseif' (egyberva). A szintaktikai jelents 'kicsit' eltr (ha ismered a C-t, nos
ez pont gy mkdik) de vglis ugyanaz lesz a vgeredmny.
Az elseif g csak akkor hajtdik vgre, ha az t megelz if kifejezs, s az sszes kztes elseif
kifejezsek FALSE rtkek, de az adott elseif kifejezse TRUE.
while
A while ciklusok a PHP legegyszerbb ciklusai. ppen gy viselkednek, mint a C nyelvbeli
megfelelik. A while ltalnos szintaxisa:
while (kifejezs) utasts
A while utasts jelentse egyszer. Azt mondja a PHP-nek, hogy mindaddig ismtelje az
utasts(ok) vgrehajtst, amg a while kifejezs TRUE. Itercinak nevezzk azt, amikor a PHP
egyszer vgrehajtja az utastst/utastsblokkot egy ciklus rszeknt. A kifejezs rtke a ciklus
kezdetekor rtkeldik ki, teht mg ha az utastsblokk belsejben hamiss is vlik a felttel, a
blokk vgrehajtsa akkor sem ll meg, csak az iterci vgn [feltve ha kzben megint meg nem
vltozik a felttel]. Amikor a while kifejezs rtke mr az els vizsglatkor FALSE, akkor az
utasts(blokk) egyszer sem kerl vgrehajtsra.
Az if szerkezethez hasonlan tbb utastst csoportostani lehet a while ciklusban kapcsos
zrjelekkel, vagy az alternatv szintaxis hasznlatval:
while (kifejezs): utasts ... endwhile;
Az albbi pldk ugyanazt csinljk - 1-tl 10-ig kirjk a szmokat:
/* 1. varici */
$i = 1;
while ($i <= 10) {
print $i++; /* a kirt rtk $i, csak
utna nvelnk
(post-inkrementci) */
}
/* 2. varici */
$i = 1;
while ($i <= 10):
print $i;
$i++;
endwhile;
do..while
A do..while ciklusok nagyon hasonlak a while ciklusokhoz, a klnbsg mindssze annyi, hogy
a kifejezs igaz volta itt az iterci vgn rtkeldik ki, s nem az elejn. A f klnbsg a
hagyomnyos while ciklushoz kpest, hogy a do..while ciklus els itercija garantltan lefut (a
kifejezs igazsgrtkt csak az iterci vgn ellenrzi), amely nem garantlt a hagyomnyos
while ciklusnl (itt a kifejezs igazsgrtke az iterci kezdetn kerl kirtkelsre, ha rtke
kezdetben FALSE, akkor a ciklus vgrehajtsa azonnal befejezdik).
Csak egy szintaxisa van a do..while ciklusnak:
$i = 0;
do {
print $i;
} while ($i>0);
A fenti ciklus pontosan egyszer fut le, mert az els iterci utn, amikor a kifejezs igazsgrtke
vizsglatra kerl, kiderl, hogy FALSE ($i nem nagyobb, mint 0) s a ciklus vgrehajtsa
befejezdik.
Halad C programozk mr bizonyra jrtasak a do..while ciklus msfajta hasznlatban. Pldul
utastsblokk kzepn ki lehet lpni a blokkbl, ha az utastsblokkot do..while(0), kz tesszk,
s break utastst hasznlunk. A kvetkez kdrszlet ezt szemllteti:
do {
if ($i < 5) {
print "i nem elg nagy";
break;
}
$i *= $factor;
if ($i < $minimum_limit) {
break;
}
print" i most j";
...i feldolgozsa...
} while(0);
for
A for cilus a legbonyolultabb ciklus a PHP-ben. ppen gy viselkedik, mint a C nyelvbeli prja.
A for ciklus szintaxisa:
for (kif1; kif2; kif3) utasts
A fenti for szerkezettel megegyez az albbi, remlhetleg mr ismers kifejezs:
kif1;
while (kif2) {
utasts;
kif3;
}
Az els kifejezs (kif1) a ciklus kezdetn egyszer kerl vgrehajtsra. Minden iterci elejn kif2
kirtkeldik. Ha rtke TRUE, akkor a ciklus folytatdik, s az utastsra kerl a vezrls. Ha
rtke FALSE, akkor a ciklus vget r. Minden iterci vgn kif3 is vgrehajtsra kerl.
Brmelyik kifejezst el lehet hagyni. Ha kif2 res, az azt jelenti, hogy a ciklus a vgtelensgig fut
[hacsak nem jn a j tndr break utasts kpben...] (A PHP implicit TRUE-nak felttelezi az
res kif2-t, mint a C.) Ez nem annyira haszontalan, mint elsre amennyire elsnek tnik, hiszen
gyakran fejezheted be a ciklust egy feltteles kifejezsbe gyazott break kifejezssel a for felttel
kifejezsnek kirtkelse helyett. Nzd az albbi pldkat, mindegyikk kirja a szmokat 1-tl
10-ig:
/* tma*/
for ($i = 1; $i <= 10; $i++) {
print $i;
}
/* 1. varici */
for ($i = 1;;$i++) {
if ($i > 10) {
break;
}
print $i;
}
/* 2. varici */
$i = 1;
for (;;) {
if ($i > 10) {
break;
}
print $i;
$i++;
}
/* 3. varici */
for ($i = 1; $i <= 10; print $i, $i++);
Termszetesen "a tma" a legbartsgosabb (vagy esetleg a 3. varici). Sok helyen hasznos
azonban, hogy res kifejezs is rhat for ciklusba...
A PHP a for ciklus esetn is megengedi az alternatv szintaxishasznlatt:
for (kif1; kif2; kif3): utasts; ...; endfor;
Ms nyelvekben ltezik az n. foreach szerkezet tmbk vagy hash-ek bejrsra. A PHP 3-ban
nincs ilyen, de a PHP 4-ben implementltk (lsd: foreach). PHP 3-ban a while, a list() s az
each() szerkezeteket hasznlhatod erre a clra.
foreach
A PHP 4-ben (nem a PHP 3-ban!) a Perlhez s ms nyelvekhez hasonlan ltezik az n. foreach
szerkezet is. Ez jl hasznlhat eszkzt ad a tmbkn vgzett itercikhoz. Kt szintaxisa
ltezik, a msodik egy apr, de hasznos kiegsztssel nyjt tbbet az elshz kpest.
foreach(tmb_kifejezs as $ertek) utasts
foreach(tmb_kifejezs as $kulcs => $ertek) utasts
Az els forma vgigmegy a tmb_kifejezs szolgltatta tmbn. Minden alkalommal az aktulis
elem rtke a $ertek vltozba kerl, s a bels tmb mutat nvelsre kerl. (A kvetkez
alkalommal teht a soron kvetkez elemet fogja venni). A msodik forma ugyanezt vgzi el, de
az aktulis elem kulcsa a $kulcs vltozba kerl. Megjegyzs: Amikor a foreach indul, a bels
tmb mutat az els elemre ll. Ez azt jelenti, hogy nem kell meghvni a reset() fggvnyt egy
foreach ciklus eltt.
reset ($tomb);
while (list(, $ertek) = each ($tomb)) {
echo "rtk: $ertek<br>\n";
}
foreach ($tomb as $ertek) {
echo "rtk: $ertek<br>\n";
}
Az albbiak is azonos eredmnyt szolgltatnak:
reset ($tomb);
while (list($kulcs, $ertek) = each ($tomb)) {
echo "Kulcs: $kulcs, rtk: $ertek<br>\n";
}
foreach ($tomb as $kulcs => $ertek) {
echo "Kulcs: $kulcs, rtk: $ertek<br>\n";
}
break
A break azonnal kilp az aktulis for, foreach, while, do..while ciklusbl vagy switch
szerkezetbl. A break elfogad egy elhagyhat szm paramtert, amely megadja, hogy hny
egymsba gyazott struktrbl kell egyszerre 'kiugrani'.
$tomb = array ('egy', 'kett', 'hrom', 'ngy', 'stop', 't');
while (list (, $ertek) = each ($tomb)) {
if ($ertek == 'stop') {
break; /* rhattl volna ide 'break 1;'-et is */
}
echo "$ertek<br>\n";
}
/* Az elhagyhat paramter hasznlata */
$i = 0;
while (++$i) {
switch ($i) {
case 5:
echo "5 esetn<br>\n";
break 1; /* csak a switch-bl lp ki */
case 10:
echo "10 esetn kilps<br>\n";
break 2; /* a switch s a while befejezse */
default:
break;
}
}
continue
A continue ciklusok belsejben hasznlhat arra, hogy tugorjuk az aktulis iterci htralev
rszt, s a vgrehajtst a kvetkez itercival folytassuk. A continue elfogad egy elhagyhat
szm paramtert, amely megadja, hogy hny egymsba gyazott struktrnak a htralv rszt
kell tugrani.
while (list ($kulcs, $ertek) = each ($tomb)) {
if (!($kulcs % 2)) { // a pros indexek kihagysa
continue;
}
valami_paratlan_dolog ($ertek);
}
$i = 0;
while ($i++ < 5) {
echo "Kls while<br>\n";
while (1) {
echo " Kzps while<br>\n";
while (1) {
echo " Bels while<br>\n";
continue 3;
}
echo "Ezt soha nem fogja kirni.<br>\n";
}
echo "Ezt sem...<br>\n";
}
switch
A switch kifejezs hasonl egy sereg IF kifejezshez, ahol a kifejezsekben ugyanaz szerepel.
[Pont olyan, mint a C-ben]. Gyakori, hogy ugyanazt a vltozt (vagy kifejezst) kell
sszehasonltani tbb klnbz rtkkel, s ms-ms kdot vgrehajtani a vltoz (kifejezs)
rtktl fggen. Pontosan erre val a switch. Az albbi kt plda kt klnbz mdon rja ki
ugyanazt, az egyik egy sor if kifejezst hasznl, a msik pedig a switch-et:
if ($i == 0) {
print "i most 0";
}
if ($i == 1) {
print "i most 1";
}
if ($i == 2) {
print "i most 2";
}
switch ($i) {
case 0:
print "i most 0";
break;
case 1:
print "i most 1";
break;
case 2:
print "i most 2";
break;
}
A hibk elkerlse vgett fontos megrteni, hogy hogyan kerl vgrehajtsra a switch szerkezet.
A switch vagyis utastsrl utastsra hajtdik vgre. Nem hajtdik vgre semmilyen utasts,
csak akkor, ha egy olyan case kifejezst tall a PHP, amely egyezik a switch kifejezs rtkvel.
Ezutn a PHP addig folytatja az utastsok vgrehajtst, amg el nem ri a switch blokk vgt,
vagy nem tallkozik egy break utastssal. FONTOS! Ha nem nincs break egy case-hez tartoz
utasts(sorozat) vgn, akkor a PHP vgrehajtja a soron kvetkez case-hez tartoz utastsokat
is! Pldul:
switch ($i) {
case 0:
print "i most 0";
case 1:
print "i most 1";
case 2:
print "i most 2";
}
Itt, ha $i rtke 0, akkor a PHP az sszes kir utastst vgrehajtja! Ha $i rtke 1, akkor a PHP
az utols kt print-et hajtja vgre, s csak ha $i rtke 2, akkor kapod a 'kvnt' eredmnyt (csak
az 'i most 2' rdik ki). Teht nagyon fontos nem elfelejteni a break utastst (br bizonyos
krlmnyek kztt lehet, hogy pont ennek elhagysa a szndkos). A switch kifejezsben a
felttel csak egyszer rtkeldik ki s a kapott eredmny lesz sszehasonltva a case kifejezsek
mindegyikvel. Ha elseif kifejezseket hasznlsz, a kifejezsek jra s jra kirtkeldnek. [s
jra s jra be kell gpelni. Ez nem csak fraszt, de hiba forrsa is lehet.] Ha a kifejezs
bonyolult, vagy egy ciklus belsejben van, a switch a gyorsabb. Egy eset (case) utastslistja
res is lehet, gy a vezrls a kvetkez case-cmkre addik.
switch ($i) {
case 0:
case 1:
case 2:
print "i 3-nl kisebb, de nem negatv";
break;
case 3:
print "i pont 3";
}
Egy klnleges eset a default [alaprtelmezett] cmke. Ez a cmke brmivel egyezik, amivel a
korbbi case elemek nem egyeztek. Ennek kell az utols elemnek lennie. Pldul:
switch ($i) {
case 0:
print "i most 0";
break;
case 1:
print "i most 1";
break;
case 2:
print "i most 2";
break;
default:
print "i se nem 0, se nem 1, se nem 2";
}
A case kifejezs tetszleges kifejezs, aminek egyszer a tpusa, vagyis egsz vagy lebegpontos
szm, vagy string. Tmbk s objektumok itt nem hasznlhatk, csakis egy-egy elemk ill.
vltozjuk egyszer tpusknt.
Az alternatv szintaxis mkdik a switch-ekkel is. Bvebb informcirt lsd: Vezrlsi
szerkezetek alternatv szintaxisa.
switch ($i):
case 0:
print "i most 0";
break;
case 1:
print "i most 1";
break;
case 2:
print "i most 2";
break;
default:
print "i se nem 0, se nem 1, se nem 2";
endswitch;
declare
A declare egy kdblokk szmra adott futtatsi direktvk belltst teszi lehetv. A declare
szintaxisa hasonl a vezrlsi szerkezetekhez:
declare (direktva) utasts
A direktva rsz a declare blokk mkdst szablyozza. Jelenleg csak egy direktva hasznlhat,
a ticks. (Lsd lejjebb a ticks rszleteit) A declare blokk utasts rsze mindig egyszer fut le. Az,
hogy mikpp, s milyen mellkhatsokkal, a direktva rszben megadottaktl fgg.
Tick-ek
A tick egy olyan esemny, amely minden N db alacsony szint utasts vgrehajtsakor
bekvetkezik a declare blokkban. Az N rtket a ticks=N szintaxissal kell megadni a declare
blokk direktva rszben. Az egyes tick-ekre bekvetkez esemny(ek) a register_tick_function()
fggvnnyel llthat(ak) be. Lsd az albbi pldt. Akr tbb esemny is bekvetkezhet egy
tick-re. Plda A PHP kd egy rsznek idmrse
<pre>
<?php
// Ez a fggvny megjegyzi a hvsa idpontjait
function idopontok ($visszaadni = FALSE)
{
static $idopontok;
// Visszaadja a $profile tartalmt, s trli
if ($visszaadni) {
$idok = $idopontok;
unset ($idopontok);
return ($idok);
}
$idopontok[] = microtime();
}
// A tick kezel belltsa
register_tick_function("idopontok");
// Belltjuk az els idpontot a declare eltt
idopontok();
// A kdblokk futtatsa, minden msodik utasts egy tick
declare (ticks = 2) {
for ($x = 1; $x < 50; ++$x) {
echo similar_text (md5($x), md5($x*$x)), "<br>";
}
}
// Az idmr fggvny adatainak kirsa
print_r (idopontok(TRUE));
?>
</pre>
A fenti plda a declare blokkban lv PHP kd sebessgt mri, rgztve minden msodik
alacsonyszint utasts vgrehajtsnak idpontjt. Ez az informci alkalmas lehet arra, hogy
megtalld a lassan fut rszeket a kdodban. Ezt a hatst mskpp is el lehet rni, de tick-eket
hasznlva sokkal knyelmesebb s knnyebben megvalsthat megoldst kapsz. A tick-ek
kivlan alkalmasak hibakeressre, egyszer multitasking megvalstsra, httrben futattott
I/O-ra, s sok ms feladatra.
return
A return() utasts fggvnyen bell hasznlva azonnal befejezi a foly fggvny futst, s a
paramtereknt megadott rtk szolgltatja a fggvny visszatrsi rtkt. A return() az eval()
fggvnnyel futatott kd vagy a szkript futst is lelltja. A globlis rvnyessgi krben
hasznlva a foly szkript futst szaktja meg. Ha ez a szkript az include() vagy a require()
hatsra lett futtatva, akkor a vezrls visszaaddik arra a fjlra, ahol ezek az utastsok
szerepelnek, valamint include() esetn a return() paramtere lesz az include() utasts visszatrsi
rtke. Ha a return() a f szkriptben lett kiadva, akkor befejezdik a szkript futsa. Ha ez a
auto_prepend_file vagy auto_append_file konfigurcis belltsban szerepl fjlok
valamelyikben trtnik (lsd: konfigurcis fjl) akkor, (csak) ezeknek a futsa fejezdik be.
require()
A require() beilleszti s feldolgozza a megadott fjlt. Ennek rszletes mikntjrl, lsd include()!
A require() s az include() megegyezik egymssal a hibakezelst leszmtva. Az include() nem
fatlis hibt, figyelmeztetst generl, a require() viszont fatlis hibt jelez. Msszval, ahol az
ignyelt fjl nemltekor a futst meg kell szaktani, ajnlott a require(). Az include() nem gy
viselkedik, a hibtl fggetlenl a szkript futtatsa folytatdik. Bizonyosodj meg, hogy a
include_path helyesen van belltva! Egyszer require() pldk
<?php
require 'prepend.php';
require $valamifajl;
require ('valamifajl.txt');
?>
Megjegyzs: PHP 4.0.2 eltt, a kvetkezk szerint mkdtt. A require() mindig beolvasta a
kvnt fjlt, mg ha az a require()-t tartalmaz sorra soha nem is kerlt vezrls. A feltteles
szerkezetek nem befolysoltk a mkdst. Mgis, ha a require()-t tartalmaz sorra nem kerlt
vezrls a megadott fjlban lv kd nem futott le. Ehhez hasonlan, a ciklusok sem
befolysoltk a mkdst. Habr a fjlban szerepl kd fggtt az azt krllel ciklustl, a
require() maga csak egyszer trtnt meg.
include()
Az include() beilleszti s feldolgozza a megadott fjlt. Az albbiak igazak a require()-ra is. A
require() s az include() megegyezik egymssal a hibakezelst leszmtva. Az include() nem
fatlis hibt, figyelmeztetst generl, a require() viszont fatlis hibt jelez. Magyarn, ahol az
ignyelt fjl nemltekor a futst meg kell szaktani, ajnlott a require(). Az include() nem gy
viselkedik, a hibtl fggetlenl a szkript futtatsa folytatdik. Bizonyosodj meg, hogy a
include_path helyesen van belltva! A fjl beillesztse sorn a megadott fjl rkli az include()
helyn rvnyes vltoz hatskrt. Brmely vltoz, amely azon a ponton elrhet, elrhet a
beillesztett fjlban is. Egyszer include() plda
valtozok.php
<?php
$szin = 'zld';
$gyumolcs = 'alma';
?>
teszt.php
<?php
echo "Egy $szin $gyumolcs"; // Egy
include 'valtozok.php';
echo "egy $szin $gyumolcs"; // Egy zld alma
?>
Fggvny belsejben a megadott fjlban szerepl kd gy fog viselkedni, mintha az magban a
fggvnyben szerepelt volna. Ez azt jelenti, hogy a fjl rkli a vltozk rvnyessgi krt.
Fggvnyen belli beilleszts:
<?php
function ize()
{
global $szin;
include 'valtozok.php';
echo "Egy $szin $gyumolcs";
}
/* valtozok.php az ize() fggvny hatkrbe esik, *
* gy a $gyumolcs nem elrhet a fggvnyen kvl. *
* A $szin igen, mivel globlisnak lett deklarlva. */
ize(); // Egy zld alma
echo "Egy $szin $gyumolcs"; // Egy zld
?>
Ha egy fjlt beillesztnk az include()-dal vagy require()-ral, akkor a clfjl elejn az elemz kilp
a PHP mdbl HTML mdba, majd visszall PHP mdba a fjl vgn. Ennek okn brmely
beillesztend fjlban lev PHP kdot kzre kell fogni egy rvnyes PHP kezd- s zrjellssel.
Ha az include()-dal hvott fjl HTTP-n keresztl rkezik az "fopen wrapper"-ek hasznlatval, s
a clszerver PHP kdknt feldolgozza a fjlt, akkor tadhatsz vltozkat a hvott fjlnak HTTP
GET lekrsi formban. Ez nem teljesen ugyanaz, mintha a include()-dal hvott fjl rkln a
helyi vltozkat, mivel a szkript valjban a tvoli szerveren fut le, s a futsi eredmny kerl
beptsre a helyi szkriptbe. Include() HTTP-n keresztl
/* Ezek a pldk felttelezik, hogy a szerver be van lltva a .php *
* fjlok feldolgozsra s nincs belltva a .txt fjlok feldolgozsra *
* A 'mkdik' azt jelenti, hogy az $ize s $bigyo vltozk elrhetek *
* a hvott fjlban. */
// Nem mkdik: a file.txt nem kerl feldolgozsra
include ("http://szerver/file.txt?ize=1&bigyo=2");
// Nem mkdik: egy 'file.php?ize=1&bigyo=2' nev fjlt keres a helyi gpen
include ("file.php?ize=1&bigyo=2");
// Mkdik
include ("http://szerver/file.php?ize=1&bigyo=2");
$ize = 1;
$bigyo = 2;
include ("file.txt"); /* Mkdik */
include ("file.php"); /* Mkdik */
Mivel az include() s a require() klnleges nyelvi elem, kapcsos zrjelekkel kell kzrefogni, ha
egy feltteles utastson bell szerepel. Include() feltteles blokkon bell
/*Ez NEM J, s nem a vrt eredmnyt adja */
if ($feltetel)
include($file);
else
include($other);
/* Ez a HELYES */
if ($feltetel) {
include($file);
} else {
include($other);
}
return utastst lehet elhelyezni egy include()-olt fjlban annak rdekben, hogy a kirtkels ott
befejezdjn, s visszaadjon egy rtket a hv szkriptnek. A visszatrsi rtket ugyangy
hasznlhatod, mint egy kznsges fggvnynl. Megjegyzs: PHP 3, a return nem jelenhet meg
fggvny blokkon kvl mshol, amely esetben a fggvnyb ltrtn visszatrst jelli. Az
include() s a return() utasts
return.php
<?php
$var = 'PHP';
return $var;
?>
noreturn.php
<?php
$var = 'PHP';
?>
testreturns.php
<?php
$ize = include 'return.php';
echo $ize; // kirja: 'PHP'
$bigyo = include 'noreturn.php';
echo $bigyo; // kirja: 1
?>
$bigyo rtke 1, mert a beilleszts sikeres volt. Figyeld meg a klnbsget a kt fenti plda
kztt. Az els a return() segtsgvel visszaadott egy rtket, a msodik nem. Ltezik mg
nhny egyb mdja is vltozk beemelsnek a fopen(), file() segtsgvel, vagy include() s
Kimenet szablyz fggvnyek egyttes hasznlatval.
require_once()
Az require_once() beilleszt s feldolgoz fjlokat a program futsa kzben. Ez hasonl az
require() mkdshez, azzal a fontos klnbsggel, hogy ha a mr egyszer beillesztsre kerlt
kdot a PHP nem prblja meg ismt betlteni. A require_once() hasznlatos azokban az
esetekben, amikor ugyanaz a fjl esetleg tbbszr kerlhet beillesztsre a szkript futsa sorn, de
biztostani kell, hogy ez tnylegesen csak egyszer trtnjen meg, gy megelzve a fggvnyek
jradefinilst, vltozk rtknek tlltst, stb.
include_once()
Az include_once() beilleszt s feldolgoz fjlokat a program futsa kzben. Ez hasonl az
include() mkdshez, azzal a fontos klnbsggel, hogy ha a mr egyszer beillesztsre kerlt
kdot a PHP nem prblja meg ismt betlteni. Az include_once() hasznlatos azokban az
esetekben, amikor ugyanaz a fjl esetleg tbbszr kerlhet beillesztsre a szkript futsa sorn, de
biztostani kell, hogy ez tnylegesen csak egyszer trtnjen meg, gy megelzve a fggvnyek
jradefinilst, vltozk rtknek tlltst, stb.
Fggvnyek
Fggvnyargumentumok
Az informci a fggvnyekhez az argumentumlistn keresztl jut el, ami egy vesszvel hatrolt
vltoz s/vagy konstanslista. A PHP tmogatja az rtk szerinti (ez az alaprtelmezett)
referenciaknti paramtertadst is, s az argumentumok kezdrtkt. A vltoz hosszsg
argumentumlistk csak a PHP 4-ben jelentek meg. Lsd a vltoz hosszsg
argumentumlistkat s a func_num_args(), func_get_arg() s a func_get_args() fggvnyeket
rszletesebb lersrt. PHP 3-ban hasonl hats rhet el a fggvnynek tmb tpus vltoz
paramterknt trtn tadsval:
function tombot_kezel($input)
{
echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}
Visszatrsi rtkek
Az elhagyhat return lltst hasznlva adhatnak vissza rtket a fggvnyek. Brmely tpus
visszaadhat, belertve a listkat s az objektumokat is. A fggvny vgrehajtsa azonnal
befejezdik, s a vezrls visszakerl a fggvnyhvs utni pozciba. Tovbbi rszletes
informcikrt lsd: return()!
function negyzete ($num)
{
return $num * $num;
}
echo negyzete (4); // kirja '16'.
Tbb rtket nem tud visszaadni a fggvny, de hasonl hats rhet el ezen tbbszrs rtkek
listba szervezsvel.
function kis_szamok()
{
return array (0, 1, 2);
}
list ($nulla, $egy, $ketto) = kis_szamok();
Ha a fggvnynek referencival kell visszatrnie, akkor az & referencia opertort kell
alkalmaznod a fggvny deklarskor s a a visszatrsi rtk megadsakor is.
function &referenciat_ad_vissza()
{
return &$valtozo;
}
$hivatkozas = &referenciat_ad_vissza();
Fggvnyvltozk
A PHP lehetv teszi a fggvnyvltozk hasznlatt. Ha egy vltoznevet kerek zrjelek
kvetnek, akkor a PHP megkeresi a vltoz rtkvel azonos nev fggvnyt, s megprblja azt
vgrehajtani. Ezt tbbek kztt visszahvand (callback) fggvnyek vagy fggvnytblk
implementlsra hasznlhat.
A fggvnyvltozk nem fognak mkdni az olyan nyelvi elemekkel, mint pldul az echo(),
unset(), isset(), empty() vagy include(). Habr a print() nyelvi elem kivtel. Ez az egyik
legjelentsebb klnbsg a PHP fggvnyek s nyelvi elemek kztt. Fggvnyvltoz plda
<?php
function ize()
{
echo "Az ize()-ben<br>\n";
}
function bigyo($param = '')
{
echo "A bigyo()-ban; az argumentum:'$param'.<br>\n";
}
$func = 'ize';
$func();
$func = 'bigyo';
$func('Stex van Boeven');
?>
class
Az osztly (objektumtpus) vltozk s rajtuk mveletet vgz fggvnyek [metdusok]
egyttese. Osztlyt az albbi szintakszis szerint lehet definilni:
<?php
class Kosar
{
var $dolgok; // A kosrban lev dolgok
extends
Gyakori, hogy szeretnl olyan osztlyokat kialaktani, amelyek egy mr meglv osztlyhoz
hasonl tulajdonsgokkal s metdusokkal rendelkeznek. Tulajdonkppen j gyakorlat egy
ltalnos osztlyt definilni, amit minden projektedben hasznlhatsz, s ezt az osztlyt alaktani
az egyes projektek ignyeinek megfelelen. Ennek a megvalstsa rdekben az osztlyok
lehetnek ms osztlyok kiterjesztsei. A kiterjesztett, vagy szrmaztatott osztly minden
tulajdonggal s metdussal rendelkezik, ami a kiindulsi osztlyban megvolt (ezt nevezzk
rklsnek, br senki sem hal meg a folyamat sorn). Amit hozzadsz a kiindulsi osztlyhoz, azt
nevezzk kiterjesztsnek. Nem lehetsges megcsonktani egy osztlyt, azaz megszntetni egy
metdust, vagy tulajdonsgot. Egy leszrmazott osztly mindig pontosan egy alaposztlytl fgg,
azaz egyidejleg tbbszrs leszrmaztats nem tmogatott. A kiterjeszts kulcsszava az
'extends'.
class Gazdas_Kosar extends Kosar
{
var $tulaj;
::
Az albbiak csak PHP 4-ben rvnyesek. Idnknt hasznos az sosztlyok metdusaira vagy
tulajdonsgaira hivatkozni, vagy olyan osztlymetdusokat meghvni, amelyek nem
pldnyostott objektumokhoz tartoznak. A :: opertor erre hasznlhat.
class A
{
function pelda()
{
echo "n az eredeti A::pelda() metdus vagyok.<br>\n";
}
}
class B extends A
{
function pelda()
{
echo "n a felldefinil B::pelda() metdus vagyok.<br>\n";
A::example();
}
}
// nincs semmilyen objektum az A osztlybl
// ez azonban ki fogja rni:
// n az eredeti A::pelda() metdus vagyok.<br>
A::pelda();
// B egy objektut hozzuk ltre
$b = new B;
// ez ki fogja rni:
// n a felldefinil B::pelda() metdus vagyok.<br>
// n az eredeti A::pelda() metdus vagyok.<br>
$b->pelda();
A fenti plda meghvja az A osztly pelda() metdust, habr nincs konkrt pldnyunk az A
osztlybl, teht ezt nem rhatnnk le az $a->pelda()-hoz hasonlan. Ehelyett a pelda() egy
'osztlymetdusknt' viselkedik, azaz az osztly egy fggvnyeknt, s nem egy pldny
metdusaknt. Osztlymetdusok lteznek, de osztlytulajdonsgok (vltozk) nem. Mivel a
hvs pillanatban semmilyen objektum nem ltezik, egy osztlymetdus nem hasznlhat
objektum vltozkat, s egyltaln nem hasznlhatja a $this specilis referencit. Egy
objektummetdus azonban termszetesen dolgozhat globlis vltozkkal s loklis vltozkkal
is. A fenti plda a B osztlyban felldefinilja a pelda() metdust. Az A osztlytl rklt eredeti
definci eltnik, s tbb nem rhet el, hacsak nem az A osztlyban megvalstott pelda()
fggvnyre hivatkozol kzvetlenl, a :: opertor segtsgvel. Ennek elrshez A::pelda()-t kell
hasznlni (ebben az esetben rhatnl parent::pelda()-t is, ahogy az a kvetkez szakaszban
olvashat). Ebben a krnyezetben van aktulisan hasznlt objektum, s ennek lehetnek objektum
vltozi (tulajdonsgai). Ekkppen ha egy objektummetduson bell hasznlod ezt az opertort,
akkor alkalmazhatod a $this-t, s felhasznlhatod az objektum tulajdonsgait.
parent
Gyakran van szksg arra, hogy a szl tulajdonsgaira vagy metdusaira hivatkozzunk
leszrmazott osztlyokban. Ez klnsen igaz, ha a leszrmazott osztly egy finomtsa, vagy
specializlsa az alaposztlynak. Ahelyett, hogy a szl osztly nevt megadd minden ilyen
meghvskor (mint a hogy a :: opertor pldja mutatta), hasznlhatod a parent specilis nevet,
ami tulajdonkppen a szl osztly nevt jelenti, amit az extends kulcssznl megadtl. Ennek a
specilis nvnek a hasznlatval elkerld a szl osztly nevnek ismtldst. Ha a
megvalsts sorn a leszrmazsi ft meg kell vltoztatni, csak egy helyen, az extends
kulcssznl kell trnod a nevet.
class A
{
function pelda()
{
echo "n A::pelda() vagyok egyszer funkcival.<br>\n";
}
}
class B extends A
{
function pelda()
{
echo "n B::pelda() vagyok tbb funkcival.<br>\n";
parent::pelda();
}
}
$b = new B;
function egyet_mutat()
{
echo $this->egy;
}
}
elso.php:
include("aosztaly.inc");
$a = new A;
$s = serialize($a);
// troljuk az $s-t valahol, ahol masodik.php megtallja
$fp = fopen("tarolas", "w");
fputs($fp, $s);
fclose($fp);
masodik.php:
// ez szksges, hogy a deszerializci rendben menjen
include("aosztaly.inc");
$s = implode("", @file("tarolas"));
$a = unserialize($s);
// most mr hasznlhat az egyet_mutat() metdus
$a->egyet_mutat();
Ha session-ket alkalmazol, s a session_register() fggvnnyel regisztlsz objektumokat, ezek
az objektumok automatikusan szerializldnak minden PHP program futsa utn, s
deszerializldnak minden tovbbi programban. Ez egyszeren azt jelenti, hogy ezek az
objektumok akrmelyik oldalon feltnhetnek, miutn a session rszv vltak. Ersen javasolt,
hogy minden regisztrlt objektum osztly defincijt betltsd minden oldalon, mg akkor is, ha
ppen nem hasznlod azokat. Ha ezt nem teszed meg, s egy objektum gy deszerializldik,
hogy nem ll rendelkezsre az osztly defincja, el fogja veszteni az osztly hozzrendelst, s
az stdClass osztly egy pldnya lesz, metdusok nlkl, gy hasznlhatatlann vlik. Ezrt ha a
fenti pldban az $a a session rszv vlik a session_register("a") meghvsval, akkor be kell
tltened az aosztaly.inc kls llomnyt minden oldalon, nem csak az elso.php s masodik.php
programokban.
Referencik a konstruktorban
Referencik kpzse kontruktorokban problms helyzetekhez vezethet. Ez a lers segt a bajok
elkerlsben.
class Ize
{
function Ize($nev)
{
// egy referencia ltrehozsa a globlis $globalref vltozban
global $globalref;
$globalref[] = &$this;
// a nv belltsa a kapott rtkre
$this->nevBeallitas($nev);
// s kirs
$this->nevKiiras();
}
function nevKiiras()
{
echo "<br>",$this->nev;
}
function nevBeallitas($nev)
{
$this->nev = $nev;
}
}
Nzzk, hogy van-e klnbsg az $obj1 s az $obj2 objektum kztt. Az elbbi a = msol
opertorral kszlt, az utbbi a =& referencia opertorral kszlt.
$obj1 = new Ize('konstruktorban belltott');
$obj1->nevKiiras();
$globalref[0]->nevKiiras();
/* kimenete:
konstruktorban belltott
konstruktorban belltott
konstruktorban belltott */
$obj2 =& new Ize('konstruktorban belltott');
$obj2->nevKiiras();
$globalref[1]->nevKiiras();
/* kimenete:
konstruktorban belltott
konstruktorban belltott
konstruktorban belltott */
Szemmel lthatan nincs semmi klnbsg, de valjban egy nagyon fontos klnbsg van a kt
forma kztt: az $obj1 s $globalref[0] _NEM_ referencik, NEM ugyanaz a kt vltoz. Ez
azrt trtnhet gy, mert a "new" alapveten nem referencival tr vissza, hanem egy msolatot
ad. Nincsenek teljestmnybeli problmk a msolatok visszaadsakor, mivel a PHP 4 s jabb
verzik referencia szmllst alkalmaznak. Legtbbszr ellenben jobb msolatokkal dolgozni
referencik helyett, mivel a referencik kpzse eltart egy kis ideig, de a msolatok kpzse
gyakorlatilag nem ignyel idt. Ha egyik sem egy nagy tmb, vagy objektum, s a vltozsokat
nem szeretnd mindegyik pldnyban egyszerre ltni, akkor msolatok hasznlatval jobban
jrsz.
ZEND2
Referencik
Mik a referencik
A referencik lehetsget adnak PHP-ben azonos vltoz tartalom elrsre klnbz nevek
alatt. Ezek szimblumtbla bejegyzsek, nem olyanok, mint a C nyelv mutati. PHP-ben a
vltozk neve s tartalma kt klnbz dolog, teht ugyanaz a tartalom kaphat klnbz
neveket. A legjobb hasonlat taln a UNIX llomnynevek s llomnyok rendszere. A
vltozneveket knyvtr bejegyzsekknt foghatod fel, a vltozk tartalmt llomnyokknt. A
referencik olyanok, mint UNIXban a hardlinkek.
Referenciaknti paramtertads
A fggvnyeknek vltozkat referenciaknt is t lehet adni, gy a fggvny tudja mdostani a
hv krnyezetben definilt rtket. Ez a kvetkezkppen oldhat meg:
function ize (&$valtozo)
{
$valtozo++;
}
$a = 5;
ize ($a);
// $a itt 6
Figyeld meg, hogy nincs referencia jelzs a fggvnyhvskor, csak a fggvny defincijban.
Ez nmagban elg a megfelel mkdshez. A kvetkezk szerepelhetnek referenciaknti
paramtertadsban:
Vltoz, pldul ize($a)
New utasts, pldul ize(new osztaly())
Egy fggvny ltal visszaadott referencia, pldul:
function &valami()
{
$a = 5;
return $a;
}
ize(valami());
Minden ms kifejezst kerlni kell referencia szerinti paramtertadskor, mivel az eredmny
hatrozatlan lesz. A kvetkez pldkban a referencia szerinti paramtertads hibnak minsl:
function valami() // Figyeld meg, nincs & jel!
{
$a = 5;
return $a;
}
ize(valami());
Refencia visszatrsi-rtk
A refencia visszatrsi-rtk pl. olyan vltozk megtallsakor lehet hasznos, amelyekrl
referencit kell kszteni. Ha referencit kell visszaadni visszatrsi rtkknt, akkor hasznld az
albbi formt:
function &valtozo_kereses ($param)
{
...kd...
return $megtalalt_valtozo;
}
Referencik megszntetse
Amikor megszntetsz egy referencit, csak megszaktod a vltoznv s az rtk kztti
kapcsolatot. Ez nem azt jelenti, hogy a vltz rtkt trld. Pldul:
$a = 1;
$b =& $a;
unset ($a);
nem fogja megszntetni a $b nevet, csak az $a nevet, gy az rtk a $b nven tovbbra is elrhet.
Ismt rdemes a Unix unlink parancsval s az llomnyrendszerrel val hasonlatossgra
gondolni.
global referencik
Amikor egy vltozt a global $valtozo formval globlisknt hasznlsz, tulajdonkppen egy
referencit kpzel a megfelel globlis vltozra,azaz a kvetkez kdnak megfelel trtnik:
$valtozo =& $GLOBALS["valtozo"];
Ez pldul azt is jelenti, hogy a $valtozo trlse nem fogja trlni a globlis vltozt.
$this
Egy objektum metdusban a $this mindig az aktulis pldnyra egy referencia.
Hibakezels
A hibknak s figyelmeztetseknek PHP-ben szmos tpusa van. Ezek:
PHP hiba tpusok
rtk Szimblum Lers Megjegyzs
1 E_ERROR fatlis futs-idej hibk
2 E_WARNING nem fatlis futs-idej hibk
4 E_PARSE fordts-idej feldolgozsi hibk
8 E_NOTICE futs-idej figyelmeztetsek (a notice a warning-nl gyengbb)
16 E_CORE_ERROR fatlis hibk, amik a PHP elindulsakor lpnek fel csak a PHP 4-ben
nem fatlis hibk figyelmeztetsei (warning), amik a PHP
32 E_CORE_WARNING csak a PHP 4-ben
elindulsakor lpnek fel
64 E_COMPILE_ERROR fatlis fordts-idej hibk csak a PHP 4-ben
E_COMPILE_WARNI
128 nem fatlis fordts-idej figyelmeztetsek (warning) csak a PHP 4-ben
NG
256 E_USER_ERROR felhasznl ltal generlt hibazenetek csak a PHP 4-ben
512 E_USER_WARNING felhasznl ltal generlt figyelmeztetsek (warning) csak a PHP 4-ben
1024 E_USER_NOTICE felhasznl ltal generlt figyelmeztetsek (notice) csak a PHP 4-ben
E_ALL az sszes fent felsorolt elem csak a PHP 4-ben
A fenti rtkek (akr a numerikusak, akr a szimbolikusak) arra hasznlhatak, hogy felpts egy
bitmask-ot, ami megadja, hogy mely hibkat kell jeleznie a PHP-nek. Hasznlhatod bitszint
opertorokat, hogy sszelltsd a fenti elemekbl a neked megfelel rtket, vagy letilts egyes
hibkat. Csak a '|', '~', '!', s '&' opertorok hasznlhatak php.ini fjlban, s semmilyen opertor
sem hasznlhat a php3.ini fjlban.
PHP 4-ben az alapbellts error_reporting rtk E_ALL & ~E_NOTICE, ami azt jelenti, hogy
minden hiba s figyelmeztets megjelenik az E_NOTICE-szint kivtelvel. PHP 3-ban az
alapbellts (E_ERROR | E_WARNING | E_PARSE), ugyanezt jelenti. Vedd figyelembe, hogy
ezek a konstansok nem tmogatottak a PHP 3 php3.ini fjljban, ezrt az error_reporting bellts
a numerikus 7 rtk.
Ezek a belltsok az ini fjl error_reporting direktvjval vltoztathatak meg, vagy az Apache
httpd.conf fjlban a php_error_reporting (php3_error_reporting PHP 3 esetn) direktvval vagy
vgl futsidben egy szkriptben az error_reporting() fggvnnyel. Ha a kdod vagy a szervered
frissted PHP 3-rl PHP 4-re, jl teszed, ha ellenrzd ezeket a belltsokat s az
error_reporting() fggvnyhvsokat, klnben akaratlanul kikapcsolod az j hibatpusokat,
klnsen az E_COMPILE_ERROR-t. Ez res dokumentumokhoz vezethet, amik nem
tartalmaznak semmilyen utalst arra, hogy mi trtnt, vagy hogy hol kellene keresni a problmt.
Minden PHP kifejezs rhat a "@" eltaggal, ami kikapcsolja a hibajelentst arra a kifejezsre.
Ha hiba lp fel a kifejezs kirtkelsekor, s a track_errors szolgltats be van kapcsolva, a
hibazenet megtallhat a $php_errormsg globlis vltozban. A @ hibakezel opertor nem
kapcsolja ki a szkriptek feldolgozsa sorn elfordul hibk (parse error) jelentst.
Jelenleg a "@" hibakezel opertor kikapcsolja azon kritikus hibk jelentst is, amik meglltjk
a szkript futst. Ms problmk mellett, ha egy fggvnybl rkez hibazenetek elnyelsre
hasznlod a "@" jelet, meg fog llni a szkript futsa, ha nem ltezik a megadott fggvny, vagy
elrtad a nevt.
Az albbiakban lthatsz egy pldt a PHP hibakezel kpessgeire. Definilunk egy hibakezel
fggvnyt, ami trolja a hibkat egy fjlba (XML formtummal) s email-t kld a fejlesztnek ha
a programban kritikus hiba trtnik. Hibakezels hasznlata egy szkriptben:
<?php
// sajt hibakezelst ptnk
error_reporting(0);
// felhasznl ltal definilt hibakezel fggvny
function sajatHibaKezelo ($hibaszam, $hibauzenet, $filenev, $sorszam,
$valtozok) {
// idblyeg a hibhoz
$ido = date("Y-m-d H:i:s (T)");
// Asszociatv tmb definilsa a hibaszvegeknek.
// Valjban csak a 2,8,256,512 s 1024 elemeket
// vesszk figyelembe
$hibatipus = array (
1 => "Error",
2 => "Warning",
4 => "Parsing Error",
8 => "Notice",
16 => "Core Error",
32 => "Core Warning",
64 => "Compile Error",
128 => "Compile Warning",
256 => "User Error",
512 => "User Warning",
1024=> "User Notice"
);
// azok a hibatpusok, amikre a vltozkat is el kell menteni
$user_hibak = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE);
$hiba = "<errorentry>\n";
$hiba .= "\t<datetime>".$ido."</datetime>\n";
$hiba .= "\t<errornum>".$hibaszam."</errornum>\n";
$hiba .= "\t<errortype>".$hibatipus[$hibaszam]."</errortype>\n";
$hiba .= "\t<errormsg>".$hibauzenet."</errormsg>\n";
$hiba .= "\t<scriptname>".$filenev."</scriptname>\n";
$hiba .= "\t<scriptlinenum>".$sorszam."</scriptlinenum>\n";
if (in_array($hibaszam, $user_hibak))
$hiba .=
"\t<vartrace>".wddx_serialize_value($valtozok,"Variables")."</vartrace>\n";
$hiba .= "</errorentry>\n\n";
// tesztelshez
// echo $hiba;
// a hibanapl elmentse, email klds ha kritikus hiba van
error_log($hiba, 3, "/usr/local/php4/error.log");
if ($hibaszam == E_USER_ERROR)
mail("phpdev@example.com","Kritikus programhiba",$hiba);
}
function tavolsag ($vektor1, $vektor2) {
if (!is_array($vektor1) || !is_array($vektor2)) {
trigger_error("Helytelen parameterek, tomboket varok", E_USER_ERROR);
return NULL;
}
if (count($vektor1) != count($vektor2)) {
trigger_error("A vektorok ugyanolyan dimenziojuak legyenek",
E_USER_ERROR);
return NULL;
}
for ($i=0; $i<count($vektor1); $i++) {
$c1 = $vektor1[$i]; $c2 = $vektor2[$i];
$d = 0.0;
if (!is_numeric($c1)) {
trigger_error("Az elso vektor $i koordinataja nem szam, nullaval
szamolok",
E_USER_WARNING);
$c1 = 0.0;
}
if (!is_numeric($c2)) {
trigger_error("A masodik vektor $i koordinataja nem szam, nullaval
szamolok",
E_USER_WARNING);
$c2 = 0.0;
}
$d += $c2*$c2 - $c1*$c1;
}
return sqrt($d);
}
$regi_hiba_kezelo = set_error_handler("sajatHibaKezelo");
// nem definilt konstans, warning-ot generl
$t = NEM_VAGYOK_DEFINIALVA;
// nhny "vektor" definilsa
$a = array (2,3, "ize");
$b = array (5.5, 4.3, -1.6);
$c = array (1, -3);
// user hiba generlsa
$t1 = tavolsag($c, $b)."\n";
// jabb user hiba generlsa
$t2 = tavolsag($b, "ez nem tmb")."\n";
// warning generlsa
$t3 = tavolsag($a, $b)."\n";
?>