
English version
ROPE 2.14 - Runtime Operational template Processing Extension
-
1. Mi is a ROPE?
-
2. Mi a ROPE célja?
-
3. Hogyan működik a ROPE?
- 3.1 Szimbólumok és referenciák
- 3.2 A sablonfile
- 3.3 A globális szimbólumtáblázat
-
4. ROPE tag-ek
- 4.1 <rope:insert sym="symname">
- 4.2 <rope:foreach in="<rope-array>" as="symname" [key="key_symname"]> ... <rope:next>
- 4.3 <rope:include file="filename">
- 4.4 <rope:if sym="symname"> ... [<rope:else>] ... <rope:endif>
- 4.5 <rope:set sym="symname" val="value">
- 4.6 <rope:domacro sym="symname">
- 4.7 <rope:defmacro sym="symname"> ... <rope:endmacro>
- 4.8 <rope:loadmacro sym="symname" file="filename">
-
5. ROPE intag attribútumok
- 5.1 ropeit:isym="symname"
-
6. A ROPE letöltése és "tesztoldal"
- 1. Mi is a ROPE?
-
A ROPE egy Runtime Operational template Processing Extension :) azaz egy futásidőben működő
"sablonvégrehajtó" bővítés PHP programozáshoz.
- 2. Mi a ROPE célja?
-
A ROPE célja, hogy a dinamikus weboldalak statikus részei, vonatkozásai, helyesebben azok
design-olása - és így a programozó és a design-er munkája - rugalmasan és könnyedén
szétválasztható legyen. Használatával elkerülhető, hogy a PHP-rutinok hatalmas HTML
"document here" kinyomtatásokat tartalmazzanak, átláthatalanná téve ezzel magát az érdemi
programkoncepciót, megnehezítve, ellehetetlenítve a design és a program egymástól független rugalmas megváltoztatását.
FONTOS: nem állítom, hogy a ROPE minden helyzetben ideálisabb a hagyományos módszereknél.
Hogy ezt ki merjem jelenteni, ahhoz még nagyon sokat kell élesben használni.
Nekem eddig rengeteget segített, ami érthető, mivel a saját igényeim szerint fejlődött. :))
- 3. Hogyan működik a ROPE?
-
A ROPE igazából egy egyszerű szövegfeldolgozó, ami szövegbehelyettesítést, szövegcserét,
szövegkihagyást végez. Működéséhez a következő elemekre van szüksége:
- 3.1 Szimbólumok és referenciák
-
A ROPE szimbólumokkal és azok értékével dolgozik. Ezekre hivatkozhatunk a <rope: ...> tag-ekben és az intag
attribútumokban. A ROPE a programnyelvekhez hasonlóan megkülönböztet globális és lokális szimbólumokat.
A globális szimbólumokat - amelyek a teljes sablonfájlban láthatóak és érvényesek - a sablont "meghívó" PHP rutinnak kell
definiálnia a globális szimbólumtáblában.
A lokális szimbólumok a sablon "végrehajtásakor", "futásidőben" jönnek létre. (Pl. <rope:set ...>,
<rope:foreach ...>, stb...) Élettartamuk és láthatóságuk az őket definiáló blokkra korlátozódik.
A szimbólumok feloldása szintén a programnyelveknél megszokott módon történik, azaz a ROPE a legbelső blokkból indulva, kifelé
a globális namespace-ig haladva próbálja elvégezni a feloldást. Nem definiált szimbólum - azaz sikertelen feloldás - nem eredményez
hibát, ugyanis ez ütközne a ROPE koncepciójával. (Ld. a ROPE tag-eket)
A ROPE szimbólumkezelése támogatja a referenciák használatát. Ezt szintaktikailag a szimbólum neve elé írt "$" karakter jelzi.
(Pl. ha "foo" szimbólum értéke "bar", akkor a sym="$foo" hivatkozás sym="bar" hivatkozással egyenértékű) A referenciálás lehet
többfokú. (Pl. sym="$$$foo")
A ROPE a támogatja a többdimenziós, tetszőleges mélységben egymásbaágyazott tömbök kezelését. Tömböt egyelőre
csak a "hívó" PHP rutin hozhat létre a globális namespace-ben! (Pl. keresés eredményei, stb) A <rope:set ...>
parancs és egyéb lokális szimbólumot generáló tag-ek (Pl. <rope:foreach ...>) csak elemi szimbólumot definiálhatnak,
de referenciaként ezek attribútumaiban hivatkozhatunk tömbre.
FONTOS: A ROPE minden esetben asszociatív tömbkezeléssel dolgozik, a kulcsokat NEM SZABAD a PHP-nél
megszokott módon idézőjelezni!!! (Az alapkoncepció megőrzése miatt)
Érvényes tömbkifejezés Pl. <rope:set sym="Zaphod" val="$foo[$bar[1][2]][42]">
- 3.2 A sablonfile
-
Egy tetszőleges szövegfile, ami a a kimenet statikus részét, a beágyazott <rope: ...> tag-eket
és a ROPE intag attribútumokat tartalmazza.
Érdemes html file-nak megválasztani, mert a browser-ek a nem definiált tag-eket ignorálják,
így a designer a sablonfile-t normál (statikus) html file-ként szerkesztheti.
- 3.3 A globális szimbólumtáblázat
-
Egy asszociatív tömb, amiben a kulcs a sablonfile-ban használt szimbólumnév, az
érték - meglepő módon - a szimbólumhoz rendelt érték.
-
A ROPE-ot használó PHP rutin a globális szimbólumtábla felépítése után meghívja a
- rope_process( "<sablonfile név>", <globális szimbólumtábla> )
függvényt, amely a sablonfile-t feldolgozva az eredményt a kimentre helyezi,
- vagy a rope_process_buffer( "<sablonfile név>", <globális szimbólumtábla> )
függvényt, amely a sablonfile-t feldolgozva az eredményt egy stringben visszaadja.
Ez utóbbi kiválóan alkalmazható például hírlevelek generálására, stb.
- 4. ROPE tag-ek
-
A ROPE működését a sablonfile "végrehajtásakor" a <rope: ...> tag-ekkel előírt direktívák, utasítások
befolyásolják. Gyakorlatilag ezekkel "programozható" a sablon.
- 4.1 <rope:insert sym="symname">
-
Feloldja a "symname" nevű szimbólumot, értékét behelyezi a tag helyére.
Ha a feloldás sikertelen a tag helyét üresen hagyja.
- 4.2 <rope:foreach in="<rope-array>" as="symname" [key="key_symname"]> ... <rope:next>
-
A ROPE tömbök elemenkénti elérésére használható tag. Segítségével generálhatunk táblázatokat, listákat, felsorolásokat,
bármi - akár többszintű - iterálni valót.
Amennyiben az "in" attribútumban előírt szimbólum tömb, annak elemeit rendre az "as" attribútumban megadott nevű, a
<rope:foreach...> blokkon belül érvényes szimbólumba helyezi, és minden iterációval végrehajta a blokk belsejét.
Az opcionális "key" attribútumban megadott nevű lokális szimbólumban a mindenkori aktuális kulcs (index) is elérhető lesz.
- 4.3 <rope:include file="filename">
-
A file attribútumban előírt "filename" nevű file-t (amennyiben az létezik) megnyitja és a tag helyén beszúrja.
- 4.4 <rope:if sym="symname"> ... [<rope:else>] ... <rope:endif>
-
Ha a "symname" nevű szimbólum definiálva van és értéke
nem nulla, akkor a tag helyére az "if-ág" blokkját illeszti. Egyébként, ha van "else-ág", az else blokkot szúrja be,
ha nincs, a tag helyét üresen hagyja.
- 4.5 <rope:set sym="symname" val="value">
-
Az aktuális namespace-ben a "symname" nevű szimbólumhoz a "value" értéket rendeli, ha még nem létezik, létrehozza.
FONTOS: Tömb definiálására nem alkalmas! (egyelőre) :)
- 4.6 <rope:domacro sym="symname">
-
A tag helyén végrehajtja "symname" nevű makrót, amennyiben az definiálva van. A makrót a lokális, vagy globális namespace-ben
ROPE szimbólumként kell definiálni. A sablon kaphatja a globális szimbólumtáblában a "hívó" PHP rutintól, definiálható a
sablonban a <rope:defmacro sym="symname"> ... <rope:endmacro> tag használatával, vagy betölthető file-ból a
<rope:loadmacro sym="symname" file="filename"> tag segítségével.
- 4.7 <rope:defmacro sym="symname"> ... <rope:endmacro>
-
Az aktuális namespace-ben definiálja a "symname" nevű makrót.
- 4.8 <rope:loadmacro sym="symname" file="filename">
-
A file attribútumban előírt "filename" nevű file-t (ha létezik) betölti és tartalmával "symname" nevű makrót definiál.
A ROPE tag-ek teszőleges módon és mélységben (ennek csak a webkiszolgáló memóriája szabhat
határt :)) ) egymásba ágyazhatóak.
- 5. ROPE intag attribútumok
-
A ROPE megengedi ROPE tag-ek használatát egyéb HTML vagy ROPE tag-en belül, de a HTML szabvány nem
definiálja a tag-ek egymásba ágyazását. Emiatt a tag-ek tag-en belüli használata "elrontja" a
sablonfile statikus képét, ami súlyosan ellenkezik a ROPE alapkoncepciójával, miszerint a
sablonfile önmagában statikus HTML oldalként tervezhető kell, hogy legyen. E probléma
feloldására bevezettem a "ROPE intag attribútumok" használatát. Működésük teljes mértékben
megegyezik a fentebb tárgyalt ROPE tag-ekével, azonban egyéb tag-en belül használhatóak a
HTML tag-ek attribútumaira vonatkozó szintaktikai szabályok figyelembevételével.
- 5.1 ropeit:isym="symname"
-
A <rope:insert sym="symname"> tag-gel
ekvivalens attribútum.
Pl:
<SELECT name="myselect">
<rope:foreach in="results" as="res_array" key="res_cntr">
<option ropeit:isym="res_array[selected]" value="ropeit:isym="$cntr"">
<rope:insert sym="res_array[text]">
</option>
<rope:next>
</SELECT>
Egyelőre csak a "ropeit:isym" ROPE intag attribútum van implementálva, de amint
szükség lesz rá és kitalálom a jól kezelhető szintaktikát, a többit is megoldom. Ez a súlyos időhiány miatt valószínüleg tényleg
csak az elkerülhetetlen szükség esetén fog megtörténni :((
- 6. A ROPE letöltése és "tesztoldal"
-
Licensz:
A ROPE licensze igazán egyszerű, GPL szerű, azaz szabadon használhatod és terjesztheted.
Ha változtatsz rajta a változtatásokat dokumentálnod kell. (lehetnél olyan jó,
és engem is érthesíthetnél róla :))
Ha a ROPE-ot weboldalhoz használod fel, valahol a weboldalon fel kell tüntedned
(akár bolhabetűkkel) a "Powered by ROPE" (http://www.reidea.hu/rope) linket.
Ha nem teszed, akkor sem tehetek semmit. :))
-
Letöltés és tesztek:
Ha BUG-ot lelsz, vagy valami mégsem megy:
Koszorús Róbert
(+36)20 579 929 5
vagy emilezz
Enjoy ROPE!!!
Robi