English version
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