Template engine
Volt egy topic ahol szóba kerültek a tempalte engine-ek. Ott írtam, hogy én egy sima egyfüggvényes engine-t használok. A céljaimnak megfelel.
A topicban PP felvetette, hogy a megoldásommal, hogyan oldom meg a működési logika és a megjelenítés szétválasztását.
A kérdésen agyalva rájöttem, hogy valójában nálam nincsen külön megjelenítési réteg, csak egy .tpl file, amiben a megadott helyen kicserélek értékeket. Tehát nálam a template csak HTML és CSS kódot tartalmaz.
A Smarty-s példák alapján egyértelművé vált számomra, hogy ott a template-ben van "programkód", ami a template engine saját syntaxisával van leírva. Ez azt jelenti, hogy adott esetben egy menü kiírásához szükséges adatokat megkapja a működési logikától a tpl engine és majd ő megoldja a megjelenítést.
Ezt végiggondolva úgy gondolom, hogy bár a Smarty ilyen működés mellett valóban megjelenítési réteget képez, felesleges művelet zajlik.
Egy menü kiírásához ugye a PHP összeszedi az infókat, majd átadja pl. egy tömb formájában. Ez eddig egy ciklus. A smarty fogja az adatokat és lefuttat egy másik ciklust, ami valójában létrehozza a megjelenítendő kódot.
Sztem ez itt erőforráspazarlás, mert két ciklus oldja meg azt amit eggyel PHP szinten meg lehet oldani.
Ha számításba vesszük azt, hogy nem smarty-t használunk, hanem a .tpl-be PHP kódot teszünk, akkor is ott vagyunk, hogy két ciklus fut le (és a tpl máris kódot tartalmaz).
Tehát megítélésem szerint a template engine-ek ilyen működése erőforrás pazarló. Most azt nem nézem, hogy pl. a smarty képes cache-elni.
Az én egyfüggvényes template megoldásomban a lényeg a PHP és HTML kód szétválasztása volt. Tehát, hogy ne ötmillió echo szerepeljen a kódban, és ha már egyszer külön van a tényleges kódtól, akkor egyszerűsödik az új kinézet kialakítása (kinézetváltás). (Egy menü összeállítása nálam egy függvénnyel van megoldva, ami egy .tpl file-t tölt fel adatokkal, majd ezzel a kész template részlettel tér vissza (kész html kód). A visszatérési értéket pedig hozzácsapom az index.tpl-hez és már kész is az oldal.)
■ A topicban PP felvetette, hogy a megoldásommal, hogyan oldom meg a működési logika és a megjelenítés szétválasztását.
A kérdésen agyalva rájöttem, hogy valójában nálam nincsen külön megjelenítési réteg, csak egy .tpl file, amiben a megadott helyen kicserélek értékeket. Tehát nálam a template csak HTML és CSS kódot tartalmaz.
A Smarty-s példák alapján egyértelművé vált számomra, hogy ott a template-ben van "programkód", ami a template engine saját syntaxisával van leírva. Ez azt jelenti, hogy adott esetben egy menü kiírásához szükséges adatokat megkapja a működési logikától a tpl engine és majd ő megoldja a megjelenítést.
Ezt végiggondolva úgy gondolom, hogy bár a Smarty ilyen működés mellett valóban megjelenítési réteget képez, felesleges művelet zajlik.
Egy menü kiírásához ugye a PHP összeszedi az infókat, majd átadja pl. egy tömb formájában. Ez eddig egy ciklus. A smarty fogja az adatokat és lefuttat egy másik ciklust, ami valójában létrehozza a megjelenítendő kódot.
Sztem ez itt erőforráspazarlás, mert két ciklus oldja meg azt amit eggyel PHP szinten meg lehet oldani.
Ha számításba vesszük azt, hogy nem smarty-t használunk, hanem a .tpl-be PHP kódot teszünk, akkor is ott vagyunk, hogy két ciklus fut le (és a tpl máris kódot tartalmaz).
Tehát megítélésem szerint a template engine-ek ilyen működése erőforrás pazarló. Most azt nem nézem, hogy pl. a smarty képes cache-elni.
Az én egyfüggvényes template megoldásomban a lényeg a PHP és HTML kód szétválasztása volt. Tehát, hogy ne ötmillió echo szerepeljen a kódban, és ha már egyszer külön van a tényleges kódtól, akkor egyszerűsödik az új kinézet kialakítása (kinézetváltás). (Egy menü összeállítása nálam egy függvénnyel van megoldva, ami egy .tpl file-t tölt fel adatokkal, majd ezzel a kész template részlettel tér vissza (kész html kód). A visszatérési értéket pedig hozzácsapom az index.tpl-hez és már kész is az oldal.)
MVC
a lényeg nem azon van, hogy a template-ben ne legyen PHP/egyéb programozási kód. Hanem azon, hogy azok a funkcionalitások, amik ahhoz szükségesek, hogy az oldal végső kimenetét megkapd, azok teljes mértékben külön legyenek választva azoktól, melyek az adatokat összegyyűjtik, és átadják a template engine-nek. Valójában ennek az a lényege, hogy külön képes legyél azonos adatokból felépíteni egy XML-t, egy RSS-t, egy WAP oldalt, egy böngésző által megjelenített oldalt, sőt, akár még azt is szabályozd, hogy milyen CSS-ek kerüljenek bele az oldalba, mert elképzelhető, hogy más CSS szolgál ki egy nyomtatandó tartalmat, mint egy weboldalon megjelenőt. Ergo képes vagy meghatározni a programodban, hogy adott feltételek együttállása esetén milyen megjelenítést kapjon az az adat, amit te összegyűjtöttél.
Ez az egyik lényeges eleme az MVC (Model-View-Controller) szétválasztásnak.
Így már más ...
egyensúly
A programkódot el lehet választani a HTML sablontól, én pl. egy olyan motorban gondolkodom, ami a különálló HTML sablont DOM függvényekkel dolgozza fel.
De maga a PHP kód is elhelyezhető a sablonban: megfelelően használva ugyanolyan átlátható, a validator is megeszi, és kifejezetten erőforrás hatékony.
Kód a sablonban
erőforrások
Erőforrások ...
A komment lényege pontosan az, hogy a szétválasztást tisztán PHP szinten meg lehet oldani, hogy a sablon az tényleg csak sablon legyen, ami nem tartalmaz programkódot.
erőforrás
Sablonban a kód
Lista
XML bigtime...
kényelem...
És ehhez a template-ben:
kákán csomót
Nem az a baj, hogy a smink/template kódot tartalmaz, hanem az, hogy milyen logikát megvalósító kódot tartalmaz. Ha megjelenítésit akkor rendben van, ha működésit akkor nincs rendben.
A Te megoldásoddal hogyan oldod meg, hogy egy listát kiírassál? ott ugye két ul között vannak az li elemek, amiket csak egy ciklussal tudsz oda tenni. Ha nincs egy elem sem, akkor az ul se kell. Ez megjelenítési logika, ezt a sablonba kell beletenni. De lehet nem így csinálja meg a "dizájner" mert neki az tetszik, hogy "* listaelem\n" mert egy email tartalmát állítja össze, vagy egy mobilra optimalizált minimál változatot készít. Ekkor nem kell az ul, meg a vizsgálat sem, de ezt ő nem tudja megcsinálni, mert ő ugye csak a html-t izélhet, vagyis a template-t. Ergo nélküled nem tud dolgozni.
Amennyiben egyedül dolgozol, sose fogod megérteni miért jó szétválasztani a dolgokat ;)
Re
Ok, de miért a sablon tartalmazza a logikát, amikor ezt megtehetem PHP-ben egy create_Menu függvényen belül? A megjelenítés ekkor is el van különítve és a sablon tiszta marad.
Ezt a logikát, ha MVC-ben gondolkodunk, akkor nem a sablonba teszem, hanem a create_List függvénybe. Ha nincsen adat, akkor vagy nem teszek ki semmit vagy kiiratom, hogy nincsen "vmi" (vmi helyett az aktuális lista elemtípust írom ki).
Ezt nem igazán értem. Ha lista, akkor UL és LI és nem variál a designer. Ha másfajta lista kell, akkor meg create_Type01_List, create_Type02_List függvények és kész.
Valóban, egyedül dolgozom. De mint írtam nekem az egész template-ezés azért volt fontos, hogy a kódban csak a program logika legyen és ne legyen egy modulban 5 millió echo, amivel a HTML-t kiíratom (az már csak pozitív mellékhatás, hogy ezáltal könnyű új kinézetet gyártani).
Próba
Hm
Lehet, hogy az egész logika azért nem volt nekem tiszta, mert én a sitebuilder alatt a grafikai tervből HTML és CSS kódot előállító user-t értettem (ha megvan a template (1 db HTML + CSS), akkor a PHP programozó már úgy szabdalja magának ahogyan akarja a saját megjelenítési logikája szerint - legalábbis bennem ez a kép élt).
Viszont még mindig tartom azt, hogy egyszemélyes project esetében számomra átláthatóbb, ha a megjelenítési logikát egy PHP függvényre bízom.
Ezzel úgy gondolom, hogy el lehet érni azt, hogy pl. egy blogmotor esetében olyan ember is tudjon template-et gyártani a blog-hoz aki nem beszélni a template engine nyelvét (vagy pusztán egy skin miatt nem akarja megtanulni az adott site sablon motorjának a syntaxisát). Tehát ha kihagy egy {valami} jelölést (vagy elírja), akkor max. nem jelenik meg pl. a post dátuma, de nem vágja haza a site-ot, ha rosszul ír egy foreach szerkezetet.
Ps.: A topic-ot azért índítottam, mert nem értettem, hogy miért mondja mindenki, hogy már pedig így kell. Sajnos ha az ember autodidakta módon tanul, akkor kellenek az ilyen "veszekedések", hogy megértsen dolgokat (mert sok esetben megtudja, hogy mit hogyan kellene, csak a miért marad el - én meg olyan ember vagyok, hogy mindenben a miért érdekel, érteni akarom, hogy vmit miért úgy csinálok ahogy).
Is is
Ha egyszemélyes projectet csinálsz, akkor is nagyon megéri külön szedni, már csak azért is mert átláthatóbb, egységesebb, később is jobban kiigazodsz rajta, nem beszélve arról mi van ha más kezébe kerül a forrás, esetleg többen fogják (veled v. nélküled) szerkeszteni a későbbiekben.
A template enginek szintaxisáról annyit, hogy pont ezért nem szeretem a Smartyt, mert meg kell tanulni külön. Jobban szeretem az olyan template engine megoldásokat, amik a php-t használják. Apró példa:
És kiemenélném a lényegét az írásnak:
Mindjárt más
Na igen, így már mindjárt más, nekam annó a HTML és a PHP szétválasztás volt a lényeg és ezért jártam rossz úton ...
van ilyen
http://sourceforge.net/project/showfiles.php?group_id=41542
Úgy hívják, hogy php_templates. Ez egy C-ben írt template-kezelő PHP modul. Megfordítja a Smarty logikát, amivel valódi MVC-hűséget ér el. Átteszi a vezérlést a template-fájlból a V modulba. Ugyanis ha jól belegondolsz a template-nek nem szabadna azzal foglalkoznia, hogy _hány_ sort is kaptál a DB-ből. Azzal sem szabadna foglalkoznia, hogy éppen meg kell-e jeleníteni egy adott frag-et. Mert mindez a V modul feladata, és nem a template-fájlé.
Nézz bele a példaprogramba, szerintem érdemes.
Igaz, hogy nagyon régen nem nyúltak hozzá a cucchoz, de szerintem igazán nem is igényli. Én személy szerint egyetlen bugot találtam benne, de azt könnyű kicselezni. Ha úgy parse-olsz fel egy template-t, hogy nincs benne semmilyen változás, akkor nem adja vissza az eredeti, változatlan template-forrást, hanem egy false-szal jelzi, hogy nem volt mit csinálnia. De mondom, ezt egy pici workaround-dal meg lehet oldani.
Én csak javasolni tudom, veszett gyors. Amióta ezt használtam, minden szerver-tulajnak sírok, hogy tegye fel, mert ezt én szeretném. :D Aztán amikor nem sikerül, akkor csinálok egy db. osztályt a template-kezeléshez, és megoldom PHP-val a template-zést. A smarty-t és a hasonló cuccokat már el is felejtettem. Csak ha muszáj.
Ez volt itt a reklám helye. :D
Most akkor mi van?
Hm, ezek szerint, akkor nem is jártam rossz úton?
szerintem(!) nem
Sztem is
Akkor úgy látom, hogy egyezik a véleményünk template kérdésben :-)
nem a PHP, HTML szétválasztása a cél
Ahogy említették is többen, nem a kódot kell szétválasztanod a HTML-től, hanem az üzleti logikát a megjelenítési rétegtől. Ez a cucc pontosan itt hibádzik, de legalábbis maximálisan erre tereli a használót (megnéznék pár konkrét használati esetet).
Üdv,
Felhő
Szerintem is elhibázott a szemléletmód
Szerintem egy nagyon jó forrás magyarul a PHP fejlesztés felsőfokon.
második kiadás
Üdv,
Felhő
még mindig nem érted...
Szóval szerintem a template egyértelműen adat, szerinted meg kód.
Ennyi a különbség.
S amennyiben feltételezed, hogy valóban adat, már értetővé válik, miért is írtam azt, amit.
Ha te kódként értelmezed azt az adatot, amely definiálja az oldal megjelenésének hogyanját, akkor természetesen nem gáz, hogy a V modulhoz simán hozzácsapod a template fájlokat is.
De mondom, szerintem éppen, hogy adatot nevezünk ki kóddá, csak hogy használhassuk a smartyt. Ami szerintem nem oké. :D Meg aztán nagyban függ attól, hogy mire és miként használjuk a template-t.
Az én példámban nem is szabad másként, csak és kizárólag adatként nézni a template-re, ami ellenőrzésre szorulhat, nem tudhatod, mi érkezik benne. Senki sem szeretne ellenőrizhetetlen, ellenőrizetlen kódrészletet a szoftvere kellős közepén, ami mindezek tetejében a megjelenítésért felelős.
Egy átlag vállalati projektben mindegy, miként kezeled a template-t, mert ált. csak egy template készül, az is házon belül, kicsi az esélye az ellenőrizetlen kódnak a template-ben.
Szerintem Te nem érted
vagy mégis? ;)
Üdv,
Felhő
ez így túl általános
A template az üzleti logikához képest tényleg adat, viszont nem úszod meg, hogy a template-ed vezérlési struktúrákat is tartalmazzon. A vezérlési struktúra pedig igencsak kódszagú valami. Amit persze lehet absztrahálni és adatosítani; pont erről szól a smarty.
(BTW 1. Valaki fentebb írta, hogy már a smartynak már a nevétől is undorodik. Kezet fogok vele.)
(BTW 2. Úgy látom, a sablonozó rendszerek használatánál magasabb szintű dolog a keretrendszer-használat, ui. ezek bírják a sablonozók képességeit, ugyanakkor (azokkal szemben) egyértelmű a hasznuk. Ez alatt azt értem, hogy a sablonrendszerek hasznát általában véve vitatják (nincs értelme csak a szigor és a fent említett adatosítási absztrakció kedvéért külön sablonozóréteget használni, pláne ilyen ronda nevűt). Viszont a keretrendszereknek magasabb a tanulási görbéje is. Ez nagy átlagban sokat számít, a fejlesztői közösség nehezebben mozdul rájuk. Ahogy itt néhány hónapja követgetem a weblabor álláshirdetéseit, úgy vettem észre (lehet, hogy tévedek), hogy a smarty terjed. Ebből én azt olvasom ki, hogy a közösség az első szintet (sablonozók) meg-meglépi, de a keretrendszerek (vagy az egy de facto szabvány keretrendszer) ideje még nem jött el.)
nincs defacto PHP framework
Üdv,
Felhő
Kérdések
Azt tudom, csak én úgy vettem észre, mintha mostanában egyre többször fordulna elő az álláshirdetésekben (lehet, rosszul érzem, nemrég óta vagyok itt).
Arra van valamilyen magyarázatod, hogy ezek a cégek miért találják fel újra a kereket?
Én az első és egyetlen cégemnél dolgozom, viszont egy komolyabb projektnél időhiány miatt bevontunk külsősöket félúton. Olyan ígérettel jöttek, hogy saját CMS-ük van, meg kiforrott, kész megoldásaik. Akkora szívás volt, hogy nem igaz. Semmilyen CMS-ük nem volt, holott azt hiszik most is, hogy van, csapnivaló programozók úgy általában, és utólag minden kódsorukat ki kellett dobni (spagettikód), újra kellett írni az egészet. Mikor még ismerkedéskor kérdeztem őket, miért nem meglévő CMS-t használnak, pl. drupalt, miért sajátot, a válasz az volt, hogy "próbáljak csak meg drupallal dolgozni, majd meglátom, miért".
Akkor nem voltam döntési helyzetben, de azóta megpróbáltam drupallal dolgozni, és tényleg rájöttem, miért (saját "CMS"-t (haha) használnak): mert a drupalhoz (meg az új dolgokhoz, meg a tanuláshoz) kevesek. Hú, erről most nagyon sokat tudnék regélni.
Nem akarok általánosítani, de nekem a "saját frameworkök" meg "saját CMS-ek"-ről azóta kb. ez jut eszembe. Persze nem beszélek a nagy cégekről, nincs tapasztalatom.
Framework vagy CMS? Tudom, hogy lényegtelennek hangzik, de erre kíváncsi vagyok.
És visszatérve a smarty álláshirdetésekre: ezek a cégek smartyval együttműködő frameworköt használnak? Minek? A frameworköknek (és CMS-eknek is) saját sablonozó metodikájuk szokott lenni. Akkor ezeknek a cégeknek minek smarty?
S még egy kérdés: minek teszik az álláshirdetésbe a smarty-kritériumot, mikor ennek a tanulási görbéje gyakorlatilag kb. egy nap? A keretrendszerüket meg jól elhallgatják...
válasz, vagy valami olyasmi :)
Üdv,
Felhő
Smarty, CMS-ek, frameworkök...
Az én tájékozódási horizontom előterében a Drupal és a RoR és társai vannak. A Drupalban lehet Smartyt használni, de nem preferált, nem hiszem, hogy egy Drupalra ráálló fejlesztő közösség huzamosabb ideig magával vonszolná a Smartyt. RoR & tsai ügyében elsősorban a CakePHP jön szóba, ahhoz is lehet Smartyt használni, de minek...
Hozzánk nemrég jött egy srác Smarty háttérrel, magának eldolgozgathat vele, de cégen belül nem fog elterjedni, mert én a CakePHP felé vettem az irányt. (A CakePHP-t meg ugródeszkának használom a RoR és/vagy a Django felé.) No és nem meglepő módon saját admin modullal érkezett, amit szívesen "eladna" nekünk (haha). Ezzel nem bántani akarom őt, de ez akkor is kerékújrafeltalálás. Egyrészt már online CRUD-generátorok is vannak az interneten, úgyhogy még letölteni sem kell hozzá semmit, másrészt a keretrendszer épp arra jó, hogy a különálló feladatokat (sablonozás, admin-felület stb.) egy keretbe összefogja.
De sokat számít, amit mondasz, a kutatási költség. Új keretrendszer kiszemelése, tájékozódás, tanulás. Nyilván így alakulnak ki a saját megoldások, hogy mindenkinek folyamatosan termelnie kell, és a szükség hozza ezeket. Ezért aztán a kis tanulási görbéjű dolgok becsúsznak a közhasználatba, mint pl. a Smarty, a nagyobbak helyett pedig a szükség hozta sajátmegoldások.
Nekem szerencsém van ilyen szempontból, mert volt lehetőségem a Cake-kel foglalkozni (de mondjuk ki is követeltem magamnak). De nagy a felelősség, mert éles projekthez van betanulva, nincs kecmec; ezt hívják hazardírozásnak.
Ez előtt meg persze a saját metodológia, saját libek... Smartyt elismertem mindig is, de helyette csakazértis az XSLT-t választottam volna, csak ez meg úgy tűnik, kifejezetten XML-technológián alapuló környezethez testhezálló, és a Cake MVC-modelljében tárgytalan. Ettől függetlenül az XSLT számomra nagyon szimpatikus, és előnye, hogy szabvány.
No pont itt érdemes szétválasztani szerintem a CMS-t és a frameworköt. A drupalos tapasztalatom ui. a következő volt: megismertem egy szimpatikus, okosan felépített, jó supportot adó rendszert és a közösségét, de leálltam vele, mert rájöttem, hogy programozó volnék, és jobban szeretek programozni, mint összekattintgatott rendszereket hackelni; ill. az általad írt probléma merült fel. Megtetszett a Drupal, szeretnék is még vele foglalkozni, de az irány most a RoR-féle társaság. Ezek ui. frameworkök, és úgy látom, hogy az említett veszélytől mentesek.
framework - saját templatekezelő
Mellesleg az alap HTML helper segítségével összepakolni egy oldalt koncepció nekem igencsak nem tetszik. Nyilván komolyabb építőkockák előállítása az hasznos, de egy img taget $html->img() hívással kódból való kipakolását nem igazán érzem hasznosnak.
Üdv,
Felhő
template, framework stb.
Nem vagy rákényszerítve ezekre. Hogy milyen mértékben vonod be a helpereket a projektbe, rajtad
múlik. Mindenesetre az biztos, hogy a helperek koncepciója valamit brilliánsan megragad a
webfejlesztés metodikájából.
(kicsit off, de ilyen részleteknél már a nyelv maga is belejátszik a képbe, és én fenntartom egy
másik topikban tett állításomat -amire jól megkaptam a magamét-, hogy ez az egész MVC-sdi egyszerűen
nem illik a php-ra. Szebben néz ki a rails rubyban, mint php-ban. Pl. rossz nézni ezt a '$this->'
dzsungelt.)
Nem azt mondtam, hogy ütközik, hanem azt, hogy tárgytalan. A probléma, amit
megoldana, meg van oldva.
[quote]hogy a metódusok elotti DocBlock kommentek alapján a Controller osztály automatikusan ellenorzi a bejövo adatokat, és csak akkor hívja meg a metódust, hogy ha az ellenorzés sikeres volt.[quote]
Amennyit ebből értek (vhol 40% és 80% között), az alapján a Cake az ilyesmire pont fel van készítve
és kb. pont így (beforeFilter és a többi Controller callback meg az egész security komponens), azaz
0 overhead.
nem értem
Üdv,
Felhő
re: nem értem
Mármint a php-nak? Sajnos nem sok, szerintem se. (Itt azért kiragadtál egy mondatot a szálból.)
Nem az XML, hanem az XSLT (arról volt szó).
Ez egy elég egyedi megoldás. A docblockokat felhasználni validációra, nem tudom mennyire jó ötlet...
hmm, így nem jutunk előbbre
Üdv,
Felhő
re: így nem jutunk előbbre
Amint írtam,
Régi nyelv a php, nehézkes és verbóz. Az MVC meg egy modern dolog. Ilyen egyszerű. (Ez bizonyos mértékig szubjektív, már amennyiben minősítek, de a szintaxis azért összevethető objektíven is.) Abban igazad van, hogy nem az MVC-ről van szó, hanem általában az OOP-szintaxisról, meg sokminden másról, ami mellett mellesleg nem tudok elmenni az MVC apropóján sem, tehát így valóban pontosabb.
Hát az, ami oda van írva. Milyen problémát old meg az XSLT? Az egy adatkimenethez többféle nézetkimenetét. (Egy xml, több view - rss, html stb.) Ezt a problémát oldja meg az MVC. Egy controller, több view (meg layout). A sablonozásról beszélünk.
A konkrét megoldás létjogosultságát nem is vitatom, azt viszont nem látom be, hogy ez mondjuk CakePHP-ban bármilyen overheaddel járna, akár teljesítmény, akár fejlesztés. (Nem, valóban "nem dolgozik annotation"-ből a cake, dehát a php sem dolgozik annotation-ből, ezt az egyedi dolgot le kell implementálni, a docblock-ot parse-olni kell stb., és nem látom be, hogy ez az egész miért ne tudna tök függetlenül működni egy frameworktől. Ami nem a framework feladata, azt nem azzal oldod meg, ettől még a framework használata a többi common funkcióra indokolt. Épp ez a nagy különbség a framework és a cms között: az előbbitől el tudsz függetlenedni parciálisan, olyan mértékig, amennyire jól esik, míg az utóbbit hackelned kell vagy gurunak kell lenni benne. Sőt, ha nagyon beválik, megírod komponensként, és kontribútolsz, hogy úgy mondjam. Írod, hogy "nem szokványos funkciók framework-szinten". Ilyen erővel a sablonozás is framework-szint, mégsem kell lemondanod a smartyról se a frameworkben, se a cms-ben.)
MVC
Üdv,
Felhő
MVC stb.
Most kezd rájönni a webfejlesztői társadalom, hogy a ruby és a python, amelyek nem elsősorban webre lettek tervezve, hanem általános használatra, a webre éppolyan jól használhatók, ha nem jobban, mint a spec webes nyelvnek kikiáltott php.
Így van, épp ezért oldja meg azt a problémát, amit az XSLT kezel. A sablonozásról beszélünk. A sablonozás pedig nem más, mint az üzleti és a megjelenítési logika szétválasztása. Ezt a képességet pedig az MVC inherensen hordozza. És tény, hogy még több ennél.
Nem is vetettem össze. Csak azt mondtam, hogy egy MVC-frameworkben az XSLT tárgytalan. A mobil és az mp3 lejátszó sem összevethető dolog, mégis az előbbi birtokában mondható, hogy az utóbbi tárgytalan, mert a mobil már tudja azt, amit az mp3 lejátszó. Ha van egy mobilom, ami lejátszik mp3-at (vegyük úgy, h ma már mind játszik le), akkor nem fogok külön mp3-lejátszót venni mellé (hacsak nem vagyok mac rajongó).
Ok, eredetileg tényleg nem a megoldásotokra írtad az overheadet, de megjegyzem, hogy itt alátámasztod a fenti állításomat: bármilyen külső sablonozó csak overhead egy MVC-frameworkben, mert egy MVC-framework már egyben sablonozó is. (És mint írtam, az XSLT kifejezetten XML-környezetben vethető be igazán hatékonyan, s én pl. nem szigorúan XML-ben gondolkodom. Ha egy XML-geekkel kerülnék össze, akkor jönne szóba valszeg az XSLT.)
Annotation:
Eredetileg ez a dolog úgy jött elő, mint egy a százféle spéci igény közül. Nem világos számomra, hogy ez a megoldás kinek az igénye. Az ügyfélé? Rendelt egy frameworköt, és kikötötte, hogy docblockból kell tudnia validálni? Nem is nagyon tudom elképzelni, hogy ez hogy működik; írtatok hozzá egy php-parsert? Merthogy előbb nyilván a docblokk-kommenteket ki kell szűrni. És miért ne tudnátok egy controllerben ezt megtenni? Parse-olható az a fájl is, amiben a controller-osztály épp fut.
(De nekem ez hackelésnek tűnik, s kicsit fából vaskarikának is. A humán-gépi vegyes információra jól olvasható formátumokat szoktak használni, pl. a YAML-t, abból aztán olyan doc-ot lehet csinálni, amilyen tetszik.)
De nem ez a lényeg, hanem hogy ezt mint az olyan, bármikor felbukkanható spec igények kategóriájának igazolásaként adod elő, ami meggátol egy webfejlesztői közösséget abban, hogy ráálljon egy MVC-frameworkre (természetesen nyerve vele). Tudnál még ilyesfajta példákat sorolni? De olyat, ami tényleg ügyféligény, mert nekem ebből úgy tűnik, hogy ti szimplán a dokumentációs terheket csökkentettéket ily módon.
history
Üdv,
Felhő
re: history
Az biztos, hogy jót tenne neki (nem fognak csinálni), de én ebből mást olvasok ki. Azt, hogy a php sikerében van egy adag üzleti ügyesség, és persze a célnyelvsége. De aminthogy megírták az első komolyabb webes frameworköt rubyra, vagyis gyakorlatilag bemutatkozott a webes színtéren, máris felkapta a fejét mindenki. Meg lett mutatva, hogy általános célzata mellett tökéletesen alkalmas (ha nem alkalmasabb) mindarra, mint amire a célnyelvnek kitalált php. És, milyen érdekes, fedezik felfele a pythont is a webfejlesztők. Azt a pythont, amire viszont nem mondhatjuk, hogy a kutya se használta ezelőtt. Egyszerűen az a fajta - egyébként érthető - gondolkodásmód kezd változni, hogy ha valamit a webre találnak ki, akkor arra biztos az is a legalkalmasabb, szemben az általános célzatú eszközökkel. Ez kb. olyan, mint mikor én régen azt gondoltam, hogy a sakkgépem okosabb a számítógépnél, mert csak sakkozni tud, azt viszont nyilván nagyon jól, a számítógép meg csak egy számítógép, ma viszont fordítva érzem: a számítógép inkább előnyben van a sakkgéppel szemben azzal, hogy általában többet tud (most eltekintve a hardverháttértől, elvben).
Az ilyen természetes nyelvi konstrukciót úgy hívják, hogy határozatlan főnévi csoport, amit többek közt generikus értelemben is szoktak használni, nem ritkaság. De a félreértések elkerülése érdekében visszaolvastam a szálat, és ezt találtam magamtól mondani: "csak ez meg úgy tűnik, kifejezetten XML-technológián alapuló környezethez testhezálló, és a Cake MVC-modelljében tárgytalan."
Próbáltam fentebb rámutatni, hogy nem is mértem össze.
Nem is mondtam, hogy a Cake kizárja az XSLT használatát, azt mondtam, hogy tárgytalan.
Visszaolvasva a szálat, azt találtam, hogy eredetileg a Cake-ről beszéltem, az meg nem. (Elismerem, bár hidegen hagy, hogy a Pustefix meg a Cocoon frameworkök XSLT-t használnak, de egyikre sincs kedvem rákattintani.)
Bevallom, nem értem teljesen a "belső igény" fogalmát. Van az ügyfél, annak vannak igényei, nekem meg vannak rá megoldásaim.
Kösz!!
Milyet? (Én egy kérdést tettem fel.)
Tény, hogy nem értem, pl. egy Cake-controllerből miért ne lehetne reflection API-val docblockból kinyerni a validálási információkat.
No, itt ezt tényleg félreértettem. Én, mint írtam, ügyféligényre gondoltam, nem jutott eszembe, hogy ilyesfajta "belső igényről" van szó. Ez tiszta, ebben kezet foghatunk: hogyha a fejlesztő valamit kifejezetten _úgy_ szeretne megoldani, ahogy egyik másik már létező framework sem teszi, akkor új utakra lép. Az ínyencek csiszolgassák a maguk gépezetét, úgyis ebből születnek aztán a közös értékek. De azért kérdés, hogy vagyok-e olyan erős, hogy emiatt megéri-e, és tényleg valami eredetivel állok-e elő. Én úgy látom, hogy a saját utak járása az esetek túlnyomó többségében a kerékújrafeltalálás betegségének tünete, és csak egy kis részben a zseniké. Sőt, minél tájékozottabb lesz valaki, annál inkább belátja, hogy a saját megoldásai csak kerékújrafeltalálások -- ebben viszont van némi paradoxon, mert új megoldások mindig is születnek, és mindig is lesz rájuk szükség. De elég sokat mernék rá tenni, hogy a saját megoldásokat kitermelő cégek 99%-ának "belső igényei" egycsapásra megszűnnének, ha lenne elég energiájuk kutatni és tájékozódni a fejlesztés mellett. A maradék 1% pedig termeli a valóban eredeti új ötleteket.
Érdekes, nekem meg kifejezetten lightweight-nek tűnik. Nem gondolom, hogy ágyúval verébre tudna lenni.
Az azért látszik ezeken a frameworkökön (mint mondtam, tájékozódási horizontomon a RoR, Django és Cake van), hogy az ORM-mel diszkréten bánnak, mert a lekérdezések megkötésével könnyen használhatatlanná tudnának válni. Ennek megfelelően nem egy nagy wasistdas akár a következetes kézzel queryzés sem. És akkor minek neked még mindig ez a framework? Hát a többi szolgáltatása miatt. Ha sajátot írsz, csak bele fogsz csempészni Te is valamilyen ORM-et, mert az jó. Mert a következő projekthez jól jön. (A framework arra van ugye, hogy különböző-féle projektekhez használjuk.) Én nemrég egy hokiszájthoz készítettem viszonylag bonyolult és teljesítménykritikus statisztikamodult, és utólag úgy látom, hogy ez a modul külsősként vígan megfért volna a szájt frameworkje mellett (mármint ha egyáltalán lett volna hozzá framework, mint ahogy nem). A szájtok meg a modelljei működésének (főleg az admin) egy jó nagy hányadára nagyon jól illeszkedik az ORM.
általánosítás
Üdv,
Felhő
u.i.: az a baj (pl. Proclubbal/Vbencével is emiatt van SZVSZ a legtöbb vitám), hogy szerintem elég kevés projekten dolgoztatok, és ebből vontok le eléggé általános következtetéseket.
re: általánosítás
(alkalomadtán még téged is beleértve)
Ok.
Ez az érvelés egy olyan vitában volna helytálló, ami arról szól, hogy framework vagy nem framework. Csak ez a vita tudtommal nem erről szól, hanem arról, hogy saját framework vagy nem saját framework. De a saját frameworköt is azért írja az ember, hogy a következő projektben is felhasználja, nem pedig azért, hogy, mondván nincsenek jó általános megoldások, majd írunk ahhoz is egy frameworköt.
Nem a kód mennyisége a fontos, hanem a fejlesztési idő.
Igen, az lehetséges, hogy nem ugyanolyan volumenű projektekben gondolkozunk, a teljesítményre vonatkozó érveiddel nem tudok vitatkozni, tehát OK (bár szerintem ez is inkább egy framework-nem framework vitában volna érv, mintsem ebben).
ui. Az ad hominem érveid előtt meghajlok (komolyan).
tankönyv
Mekkora volt a legnagyobb látogatottságú oldal, amit fejlesztettél?
És akkor pl. egy konkrét eset: az örökölt kódokban a DB kezelő kódok szanaszét voltak az oldalak kódjában, függvényekben, egy csomó minden több helyen volt megoldva minimális különbséggel, néha nem is leghatékonyabban, mert x fejlesztő nem tudott egy y fájlban lévő, már létező függvényről. Szerettem volna valamilyen külön rétegbe kiemelni a DB kódokat, de pl. egy ful absztrakciós réteg nem fért bele, ORM cucc pláne, ezért döntöttünk saját mellett. Megnéztük, hogy hogyan használunk DB kezelést: lekérünk egy sort, lekérünk több sort és végig iterálunk, illetve sok esetben cachelünk (amire lett végül egy általános megoldás, de nem volt túl szép). Kis méréssel kijött, hogy a PDO teljesen jó sebességben, kicsit többet memóriát fogyaszt, és önmagában megoldja az első két pontot. Ami érdekes volt, hogy legyen az SQL injection kizárva, ezt szintén a PDO hozta magával (prepared statement). Az cache-elést meg sikerült nagyon szépen egy kis trükkel beleépíteni, úgy, hogy eljesen transzparensen működik:
Üdv,
Felhő
nem feltétlenül fontos
A munka menete pedig, hogy megkapom a specifikációt, elkezdtem megtervezni az adatbázist, a különböző alacsony és magas-szintű elemeket, stb.., admin felületet (erre pl. nemigen kapok külön design-t), és mikor megjön a html, akkor kezdjük el összerakni. Út közben jön be a javítás, de, mivel okosak vagyunk :), ezért ritkán kell a html-be nyulni, elég a css-be jobb esetben, én pedig a html-t a php-val csak a megjelenő oldalakon keverem (sok include ugyan, és sok osztály tehát általában javítás is a php kódban kell), mivel a főnök nem engedi a smarty-t, sőt ha tehetjük semmi mástól származó kódot nem használunk, hiszen akár abban is lehet a hiba, bár én sokáig smarty-t használtam, és preferálom mai napig template téren.
Mivel a legritkább esetben kell a html-esnek a kódba nyulnia, mivel én rakom össze a komponenseket, és én telepítem, ezért a smarty végső esetben az én munkámat nehezíti, hiszen alapesetben is két file-ban kéne javítani, egyszer a template-ben, és mégegyszer a template-et meghívó kódban, úgyhogy egy ideje hanyagolom a smarty-t, egyedül drupalos munkákban vagyok kénytelen phptemplate-et használni. Amúgy a smarty egy kellemes megoldás, uh, nagyjából naprakész vagyok vele, de minnél nagyobb egy munka, annál inkább zavaró lesz a rengeteg template file. Akkor viszont hasznos, ha sok hasonló oldalad van, pl. a klasszikus sql lekérdezés megjelenítése táblázatban, ilyenkor egy jól megírt template életet menthet, és rengeteg időt. Ha muszáj, saját rendszert használok, de mivel ebben nincs cache-elés, csak állandó, statikus elemekre alkalmazom, pl. footer-ek, nem dinamikus menük, e-mailek (pl. regisztráció, elfelejtett jelszó), ehhez pedig nem kell smarty sem.
Smarty
Controller Model nélkül
Cake-ben a $uses tömbbel tudod szabályozni, milyen modelleket használjon a Controller. $uses = null -ra semmit nem fog használni. Convention over Configuration.
WACT DataSpace
A két dolog ötvözése pl. egy szerintem érdekes koncepció, amit a WACT használ. Ott van egy DataSpace nevű interfész, ami igazából egy asszociatív tömböt határoz meg, aminek pluszban lehet több sora, amin végig lehet iterálni. MysqlRecordSet is ezt valósítja meg, egy lekérdezés eredménye meg egy ilyet ad vissza. Utána ez kerül átadásra a templatenek, és amikor az végig iterál ezen az Objektumon, akkor azon belül az iterációkor hívódik meg tényleges a mysql_fetch. Így alapvetően push modellt használsz, de végeredményben a template pollolja az adatokat.
Üdv,
Felhő