PHP template

*deleted_30683870
PHP template
2003-09-19T15:59:34+02:00
2010-06-15T08:58:28+02:00
2022-06-30T06:11:51+02:00
  • Figy, én szóltam annak idején, hogy ez a sablonozás egy határ kaki... Most SOA-val kínlódom, csak az a baj vele, hogy php-ben és js-ben elég gyenge a támogatottsága. Silverlight nagyon tetszene, remélem elterjed komolyabban nem sokára.
    Mutasd a teljes hozzászólást!
  • Ha jól tudom Smarty-val lehet objektumokat is assignelni, nem csak tömböket. Ha meg csak tömböket, akkor meg senki sem mondta, hogy a sablonozásnak nincsenek hátrányai...
    Először fejlesztesz, utána mérsz, utána optimalizálsz. Ha lemérted, és tényleg gondot okoz a sebességben, akkor kicserélheted, de nem tartom valószínűnek, mert Smarty egész jól kesseli az oldalakat.
    Mutasd a teljes hozzászólást!
  • Így van, cserébe struktúráltabb kódot kapsz, ami alatt mind a kinézetet, mint a vezésrlést le tudod cserélni, anélkül, hogy a másikba bele kéne nyúlnod.


    Ez meg ügye nem függ össze és nem is igaz.

    Attól még használhatok én valami MVC keretrendszert, hogy nem használok smartyt. Nekem az a legnagyobb bánatom hogy a kettőt együtt kell. És nemcsak nálunk, ha megnézed az állások 90%-a ilyen.

    És ahogy már írtam, több dologba kell belenyúlnom hogy működjön. Nem ússza meg se a controller, se a model, se a view. De valóban nem kell belenyúlnom egyszerre mindháromba. De ha például a a sablonnal kezdem, akkor nem jelenik meg az új mező. És ha ezt várom (mert defaultként üres), akkor még csak fel sem tűnik, hogy valamiről még megfeledkeztem. PHP-nál, ha nem használok @ jelet, akkor legalább szembe jön a probléma.

    Csak reméltem hogy egyszer valami olyasmit látok amitől leesik az állam. Nem ódzkodom én semmi újtól. Már nem az első program, vagy leíró nyelv lenne a smarty. PHP-s keretrendszerekből is már többet megnéztem. De azoknál valami mindig elkápráztatott, valami megragadta a fantáziám. De a smartynál semmi ilyesmit nem érzek, és fogalmam sincs miért szeretik ennyire. Csak erre a kérdésemre keresem itt a választ. Mert nem gondolom hogy például Te is azért ragaszkodnál hozzá, mert annyira semmire se jó
    Mutasd a teljes hozzászólást!
  • Én valami olyasmire voltam kíváncsi, hogy valahogy leírható-e ilyen módon:
    <h3>
    <a href="{sfSimpleCMSTools::urlForPage($page->getSlug())}"> {$page->getTitle($culture)}
    </a>
    </h3>
    Ha nem, nem. De nem kell megsértődni.
    Nem az én kódomtól lesz csúnya a céges kód. Mert az assignos megoldás sem a saját fejemből pattant ki. Hidd el, tudnék mutatni hajmeresztőbb dolgokat...

    Ha nem tetszik ne használd

    Szerintem már kitaláltad, hogy nem használnám én. Csak muszáj.
    Muszáj, mert mindenki bele akarja keverni ezt a PHP-ba. Habár van már MVC, de az egyeseknek kevés, kell még hozzá smarty is. Pedig én békésen symfonyznék, erre mindig előjön egy ilyen feladat. Persze csak hébe-hóba. Mert ha rajtam múlik, akkor azért nincs smarty
    Mutasd a teljes hozzászólást!
  • Aztán ezen a tömbön gyalogolok végig immár másodszorra a smartyval?

    Igen.

    Ha mondjuk szükségem van az egyik templateben egy x. tulajdonságra, például mostantól a created mezőt is ki szeretném írni, ami utólag került a rendszerbe. Akkor az objektumomon máris megjelenik az új metódus(pl: obj->getCreated()), és még nyithatom meg a sablonfájlt, ahol hivatkozok erre, hogy megjelenjen a kimeneten is.

    Így van, cserébe struktúráltabb kódot kapsz, ami alatt mind a kinézetet, mint a vezésrlést le tudod cserélni, anélkül, hogy a másikba bele kéne nyúlnod.


    Egyébként nem értem miért jöttél ide a problémáddal. Ne haragudj de bemásolsz egy kódrészletet, hogy segítsünk (ami alapján azt szűröm le, hogy gőzöd nincs a sablonkezelőkhöz), és elkezdessz panaszkodni, hogy ez így nem jó meg ez nem tetszik meg az nem tetszik. Pedig megoldást is adtam a problémádra.
    Ha nem tetszik ne használd, csináld úgy ahogy neked tetszik. Vagy tanuld meg használni normálisan. A régebbi hozzászólásaid alapján én azt szűrtem le, hogy te elkönyvelted, hogy ez a dolog (sípolás), és innentől kezdve be is buktad a történetet, mert nem (sípolás), hanem meg kéne tanulni a dolgokat arra használni amire valók.
    Mutasd a teljes hozzászólást!
  • Én nem egészen függvényeket hívok, hanem a változóm egy objektum. És attól hogy a "PHP-ban csinálom" ugyanolyan plusz feladat nemcsak nekem, hanem sajnos, a számítógépnek is. Mert így akkor előbb végigszaladok az objektumokon, lehívom az adatokat egy tömbbe. (vagy netalántán külön-külön egyes változókba?) Aztán ezen a tömbön gyalogolok végig immár másodszorra a smartyval? Ezt persze mindazok után hogy az adatbázisból lekért adatok eredetileg egy tömbben voltak, csak az objektum hydrate metódusának segítségével objektummá alakítottam. Csak mert, mint programozó szeretek objektumokkal dolgozni

    Ha mondjuk szükségem van az egyik templateben egy x. tulajdonságra, például mostantól a created mezőt is ki szeretném írni, ami utólag került a rendszerbe. Akkor az objektumomon máris megjelenik az új metódus(pl: obj->getCreated()), és még nyithatom meg a sablonfájlt, ahol hivatkozok erre, hogy megjelenjen a kimeneten is. Azonban smarty mellett még nyúlhatok bele a "PHP" programba is (nálam erre a controller lenne hivatott), hogy valahogy assignoljam az adatot valami változóhoz, amiről majd valaki kitalálja hogy létezik. Ahelyett hogy valami normális IDE mellett kiválasztaná objektum azon metódusát, amire szüksége van. Amit mellesleg szépen dokumentálhattam is úgy hogy az IDE meg is jelenítse a dokumentációt is.

    Szóval az egész olyan értelmetlennek és fapadosnak tűnik.
    Mutasd a teljes hozzászólást!
  • A sablonozásnak pont az a lényege, hogy egy új felületet építesz ki. Ha adatot akarsz átadni, akkor az új felületen annak meg kell jelennie. Szóval jobban jársz, ha mindenre új változót csinálsz, és assigneled, nem pedig a sablonból hívsz függvényeket.
    Mutasd a teljes hozzászólást!
  • Valami ilyesmit szeretnél?

    PHP: $smarty->assign('uri', sfSimpleCMSTools::urlForPage($page->getSlug())); $smarty->assign('title', $page->getTitle($culture)); Template: <h3> <a href="{$uri}"> {$title} </a> </h3>
    Mutasd a teljes hozzászólást!
  • Ezt nem igazán értem, de ha elmagyarázod akkor tudok segíteni.
    Mutasd a teljes hozzászólást!
  • felhozom kicsit.

    gondoltam beírom ide hátha le lehet egyszerűsíteni.

    Ezt kellett művelnem:
    {assign var='slug' value= $page->getSlug()} {assign var='uri' value= sfSimpleCMSTools::urlForPage($slug)} <h3><a href="{$uri}">{$page->getTitle($culture)}</a></h3>

    ezt szerettem volna:
    <h3> <a href="<?php echo sfSimpleCMSTools::urlForPage($page->getSlug())?>"> <?php echo $page->getTitle($culture) ?> </a> </h3>

    Valaki nagyon profi smartys segíthetne hogy hogyan tudnám elkerülni a különböző változók gyártását. Mert az volt negyedóra míg kitaláltam hogy az úgy fent legalább működik...
    Mutasd a teljes hozzászólást!
  • Nem tudom, nem tanulok főiskolán.
    Smarty helyett használhatnál egy jobb rendszert sablonozni, vagy áttérhetnél XSLT-re, vagy marad a literalozás. Nekem tökmindegy.
    Mutasd a teljes hozzászólást!
  • lehet hogy ezt (már) így is tanítják a főiskolán, de én nem szeretném így csinálni, meg smartyul se...
    Mutasd a teljes hozzászólást!
  • A te kódodat pl flush-olhatná a szerver, és nem írtad, hogy nem ajax...
    XML adatszigeteket lehet tenni XHTML-be. Szóval kitalálsz magadnak custom tageket, amikbe beteszed az adatodat, a javascript meg kiolvassa azokból. Nyilván ehhez rendezettség szükséges.

    De pl:

    <body> <config> <my_object action="init"> <valtozo1>{$valtozo1|@json_encode}</valtozo1> <valtozo2>{$valtozo2}</valtozo2> </my_object> </config> <script> $(window).ready(function () { XML.parse($("config"),"runnable"); }); </script> </body>

    Vagy valami hasonlót képzelek el, persze a js kódot így már lehet includolni...

    A lényeg, hogy kidolgozol egy parsolási megoldást, amit utána a js már tud automatikusan kezelni.

    A másik megoldás ugyanúgy XML-el, hogy a javascript csinál egy központi tárolót, amibe parsolja az XML-eket, aztán onnan kéri le a scripted a beállításokat.

    (Nem ajánlom, hogy XML namespacet használj XHTML-be ágyazva, mert sokat fogsz szopni vele.)

    Persze ha ez nem jön be, akkor még mindig írhatsz {literal}-okat... Ha már mindenképp sablonokkal akarsz szenvedni, akkor Smarty lenne az utolsó, amit ajánlanék, egyszer belenéztem a forrásába, annyi elég volt.
    Mutasd a teljes hozzászólást!
  • Teljesen mindegy, hogy json vagy nem.

    Én nem szeretem a smartyt, ahogy eddig már többször leírtam. Persze hogy nem nyerő, de ha Te is el akarnál helyezkedni egy PHP-val foglalkozó cégnél, akkor többnyire elvárás. És ügye ez egy egyszerű javascript volt. Mi van ha van belőle egy kicsit bővebb verzió...

    És semmi esetre sem nyúlnék hozzá a kódhoz (gány, de működik), de hogyan képzelnéd el ezt az XML-es "küldés"-t? Ebben a kódban semmi ajax kérés nem volt. Nem is szeretnék bele...
    Mutasd a teljes hozzászólást!
  • Ha jól értem gyakorlatilag JSON-t szeretnél Smarty-val sablonozni. Az előbbiek alapján nem hiszem, hogy normálisan működne a dolog, próbáld meg XML-el küldeni amit csak lehet, ha nem megy, akkor így jártál Én szóltam, hogy Smarty nem nyerő....
    Mutasd a teljes hozzászólást!
  • De mint látható nálam is az egész objektum ki van rakva egy külön js-be. Csak ha adatbázisból jön az adat, akkor még nem feltétlen kötődik egy HTML elemhez, mint DJ_Tacee példájában. Például google map markerek esetén is át kell adnom valahol a koordinátákat, vagy a címeket.
    Mutasd a teljes hozzászólást!
  • Nagyon...
    Mutasd a teljes hozzászólást!
  • szánalmas...
    Mutasd a teljes hozzászólást!
  • Ezért kell kirakni külön fájlba a JS-t, vagy {literal}.
    Mutasd a teljes hozzászólást!
  • például:
    <script type="text/javascript"> //<![CDATA[ (function () { var valtozo1={$valtozo1|@json_encode}; var valtozo2="{$valtozo2}"; MyObject.init(valtozo1,valtozo2); })(); //]]> </script>

    Azzal mondjuk nem vagyok tisztában, hogy a függvény törzzsel mit kezd a Smarty. Kinézem belőle, hogy sablonkódnak veszi...
    Mutasd a teljes hozzászólást!
  • Nem egészen erre gondoltam, de menjünk tovább
    És akkor ezt a valami függvényt hogyan illeszted bele a kódba (inline) ?

    Nekem már kínomban csak így sikerült egy tömböt (json) és egy változót átadnom egy javascript objektumnak:

    <script type="text/javascript">//<![CDATA[ {literal}MyObject.init({/literal} {$valtozo1|@json_encode},"{$valtozo2}" {literal});{/literal} //]]></script>

    Hogy lehetne szebb?
    Mutasd a teljes hozzászólást!
  • XSLT-vel

    XML:
    <jsdefaults valami1="<?php echo $valami1; ?>" valami2="<?php echo $valami2; ?>" />

    inline:
    <xsl:template match="jsdefaults"> var a = '{@valami1}'; var b = '{@valami2}'; </xsl:template>

    link:
    <xsl:template match="jsdefaults"> <a href="javascript:valami('{@valami2}');"> </xsl:template>

    Ilyen szimpla dolgoknál tényleg nem egyszerűbb mint php, de nem is ez a lényege. Amit neked kell megcsinálni szerver oldalról, az egyedül az XML, a többi a designer dolga, aki közelébe sem mehet a php kódnak...
    Mutasd a teljes hozzászólást!
  • XSLT-vel hogy lehet ezt kiváltani??? Mit adnál a html-t író személynek?

    Lol, ezt még kérded???
    A designer kap egy XML fájlt a szerverről, és ahhoz kell megírnia az XSL-t. Csak annyit kell tennie, hogy megnézi a forrását az oldalnak.

    Ja és mellesleg az XSL fájl hibájába nem hal bele a php, max a böngésző kiírja, hogy rossz a stílusfájl.

    Az egyetlen hátránya az XSL-nek, hgoy nincsenek benne string függvények, szóval camelize, vagy hasonlók. Ezeket php-ből kell kitolni az XML-be, de azt hiszem ez nem egy nagy veszteség.

    a.)
    Értelmetlen egy percet is foglalkozni Smarty-val, vagy bármilyen másik rendszerrel, amikor van jobb megoldás.

    b.)
    XSLT-t bármikor felhasználhatod máshol is, ha XML átalakítás kell, nem csak XML->HTML transzformációhoz.
    Mutasd a teljes hozzászólást!
  • Na, kíváncsi voltam és felraktam. Gond nélkül felment, ha kell szólj és segítek. Egyébként annyi, hogy letöltöd, és Eclipse-ben az Install software résznél megadod neki, hogy telepítse fel.
    Mutasd a teljes hozzászólást!
  • Mutassátok meg az egyszerűségét például egy inline javascripttel, ahol egy javascript változónak adunk egy alapértelmezett értéket.


    PHP:

    $smarty->assign("jsdefaults",array('valami1' => 0, 'valami2' => 1));

    TPL:

    var a = '{$jsdefaults.valami1}'; var b = '{$jsdefaults.valami2}';

    vagy

    <a href="javascript:valami('{$jsdefaults.valami2}');">
    Mutasd a teljes hozzászólást!
  • Nem kell felkapni a vizet. Ha én nem tudom felrakni, akkor gondolom másoknak is okozhat gondot (nem érzem magam annyira butának). És megnézve az ottani leírást, nem vagyok egyedül a problémámmal. Azt hittem ez a fórum azért van hogy segítsünk egymásnak. Tegyem fel pontokért a kérdésemet?

    De ha ez az egyetlen indok hogy mások is használják, akkor nekem nem kell és mindenki mást lebeszélek róla. Mert nem hangzott el itt olyan, ami előnyt jelentett volna a sima PHP-vel szemben. Pláne egy MVC keretrendszerben (Symfony vagy akár Cake).

    Valóban sokan használják, de annyira azért nem egyszerű. Mutassátok meg az egyszerűségét például egy inline javascripttel, ahol egy javascript változónak adunk egy alapértelmezett értéket.
    Mutasd a teljes hozzászólást!
  • Nézd, én nem foglak itt győzködni, ha nem tudsz megtanulni egy ilyen egyszerű template nyelvet, vagy nem tudod felrakni a szintakszis kiemelőt, vagy szimplán csak makacsságból nem is akarod megtenni ezeket, az a te bajod. Mások megelégedéssel használják, és nem azért mert csupa szívás vele az élet... Részemről kiszálltam.
    Mutasd a teljes hozzászólást!
  • Csak soha senki sem írja le mit kell vele csinálni. A bemásolosdi nem megy, mert fogja és hazavaágja a PHP megjelenítőmet is...
    Mutasd a teljes hozzászólást!
  • A @$valami se dob hibát, hanem falset, ha nincs.
    De még a false se egyenlő azzal hogy nincs. Ezért ezt a megoldást én sose használom, mert honnan tudnám, hogy ha hibáztam? Te honnan tudod, hogy ha a templatebe rossz néven teszel ki egy változot? Nekem egyből írja a noticet, Te meg feldolgozod, hogy nem jött. Tehát nálam mindig van emiatt változó és van ellenörzés is. Ha nincs akkor jön a hiba és örülök hogy jön...

    Egyébként a symfony erre használ a controllerben egy függvény t($this->getParameter('valami')) és ez false értékkel tér vissza ha nincs (vagy adhatsz neki egy defaultot). És a getből jövő paraméterrel általában kezdeni kell valamit ott a controllerben. Ritkán kerül ki a viewba.

    Mutasd a teljes hozzászólást!
  • Félreértesz, én csutka error_riporting()-al dolgozom, semmi nincs kikapcsolva. Egyszerűen ha mondjuk csinálok egy ilyet:

    if $valami == $_GET['valami'] - és nincs a GET-ben 'valami' kulcs, akkor nem dob notice-t, hanem false lesz, ahogy lennie is kell.
    Mutasd a teljes hozzászólást!
abcd