ugrás a tartalomhoz

Dwoo - a PHP template engine

nevemrock · 2008. Május. 23. (P), 16.33
Ígéretes sablonrendszer alternatíva
 
1

tapasztalat?

gex · 2008. Május. 23. (P), 17.42
beleolvasgattam a doksijába, nagyon hasonlít a smarty-ra. van valakinek gyakorlati tapasztalata?
2

Tapasznyalás az nincs

nevemrock · 2008. Május. 24. (Szo), 11.05
Viszont a Smarty-val készített sablonok használatára is ad lehetőséget.
Érdekes, hogy pont azokat a dolgokat tudja, amit a Smarty-ból hiányoltam
3

valószínűleg más is :)

winston · 2008. Május. 24. (Szo), 12.42
valószínűleg más is hiányolta, ezért tették bele :) kicsit kifejtenéd, hogy mi az, amit tud, és a smarty nem? ahogy látom, te már próbáltad
4

Nem próbáltam

nevemrock · 2008. Május. 26. (H), 06.55
Smartyt használok, valószínű ezt is fogok még egy darabig.
Nem próbáltam (ezt már írtam fent.), de a meglévő light dokumentációt elolvasgatván, észrevettem néhány okos funkciót, amit néha hiányoltam.(bár ezek is megoldhatók PHP oldalon)

Associative Array Example: {assign}
http://wiki.dwoo.org/index.php/Helpers:array
http://www.smarty.net/manual/en/language.custom.functions.php#language.function.assign

bővebben:
http://wiki.dwoo.org/index.php/Main_Page
5

köszi

winston · 2008. Május. 26. (H), 18.06
bocsi, a címsor kimaradt, azt hittem, van közelebbi ismerettség vele. de a listát kösz, kiváncsi vagyok, mi ami jobb/más. üdv
6

Ha jól tudom...

vbence · 2008. Május. 26. (H), 21.32
a PHP maga a template engine.
7

szvsz nemegészen

winston · 2008. Május. 26. (H), 22.11
régen talán az volt, mostmár azt hiszem, azért ezen túlnőtt. mindenesetre ez olyan, mint a keretrendszerek, vagy akármi: absztrakció egy (cél)feladatra, segédeszköz, produktivitás segítő
8

absztrakció?

vbence · 2008. Május. 26. (H), 22.36
A következők a wikiről valók, (gondolom a samrtyra is igazak):
<p>The date is {$date}</p> 
<div class="article"> 
  <h1 class="title">{$article.title}</h1> 
  <p class="content">{$article.content}</p> 
  <p class="title">Posted by : {$article.author}</p> 
</div>
és

{assign array('ab', 'cd') myArray}
{foreach $myArray|@reverse element}
  {$element}
{/foreach}
Először is ez nem tűnik nekem új abstrakciós szintnek, csupán egyszerüsített (jobbanmondva testreszabott) szintaxisnak. Aztán pedig (ez gondolom a smartyra lesz igaz): jól látom, hogy a második kódrészletben szemléltetett funkció később került bele az eszközbe? Ez alapjána dolog már is kezd egy butácska PHPvé válni. Amit látok annyi, hogy az idő próbáját kiállt C szintaxist sikerült valami újjal kiváltanunk. Mivben jobb ez, mint egy foreach PHPben?

Megelégszem egy URL-lel, ami értelmes választ ad, de egyszerűen képtelen vagyok megérteni, miért írunk egy lassú szkriptnyelv fölé még egyet... komolyan.
9

template kezelő

Hodicska Gergely · 2008. Május. 26. (H), 22.56
Volt egyszer egy ilyen thread: http://weblabor.hu/forumok/temak/18219. Itt nagyjából elhangzik elég sok érv, ami a egy smarty szintű cucc mellett szólhat. Manapság viszont a menő frameworköknél szinte mindenhol sima PHP a template, ami annyiban jó, hogy nagyobb a szabadság, viszont könnyebb is disznóságot csinálni, viszont valamilyen szinten maga a framework megvéd attól, hogy a template-ba az kerüljön, ami odavaló.

Régebben szerettem a smartyt, viszont amikor kitaláltunk egy bonyolultabb view réteget a házi frameworkünkbe, akkor pár dolgot macerás lett volna már smartyban megoldani, ezért maradt a sima PHP. Viszont nagyon szépen előjött, hogy a kicsit bonyolultabb eszközkészletet nem mindig jól használták a sitebuilderek, illetve a bátrabbak esetén került néha a templatebe olyan logika, amit nem volt szerencsés odatenni.

Amúgy épp mostanában megint előjött nekem a framework kérdésköre, és még most is szerintem a symfony-nak van az egyik legjobban kitalált view rétege (a ZF kiterjesztettjét még nem néztem).


Üdv,
Felhő
10

látom...

vbence · 2008. Május. 27. (K), 00.24
nagyobb lélekzetű dolog, majd nekiugrok.
Köszi.
11

Mennyire olvasható...

janoszen · 2008. Május. 27. (K), 10.42
Mennyire olvasható már az, hogy:
<?php foreach ($entities as $entity) { ?><p><?php echo($entity); ?></p><? } ?>
Egyébként a Smartyban két dolgot nem szeretek, az egyik a viszonylagos átgondolatlansága, a másik hogy az Eclipse szintaktikai elemzője hanyatt dobja magát tőle. A natív PHP meg... olvasható... még nézelődöm, hogy mit lehetne jól használni. Szemezek az XSLT-vel is, bár az meg lehet, hogy ágyúval verébre.

Ahogy nézem ezt a dolgot viszont, egy dolog nagyon nagyon nagyon tetszik benne: http://wiki.dwoo.org/index.php/TemplateInheritance
12

PHPTAL

hector · 2008. Május. 27. (K), 11.33
Én már egy ideje ezt használom Smarty helyett:
http://phptal.motion-twin.com/

Pont az a dolog fogott meg benne, amit te is kiemeltél a dwoo kapcsán. No meg a HTML-be ágyazott custom attribútumok. Cserébe sokkal kevesebbet tud, mint a Smarty, de legalább így nagyjából nullára redukálódott annak az esélye, hogy véletlenül ne megjelenítési logikát tegyek a megjelenítésbe.
Pluginekkel természetesen ez is bővíthető.
13

Jól

Joó Ádám · 2008. Május. 27. (K), 13.32

<ul>
    <?php foreach ($entities as $entity): ?>
        <li><?php echo $entity ?></li>
    <?php endforeach ?>
</ul>
Ez kérlek hamisítatlan XML szintakszis – idális template-nek, vagy nem? :)
14

xml template

winston · 2008. Május. 27. (K), 17.42
én elég sokáig ragaszkodtam a saját sablonozómnál, hogy xml alapú legyen. de sajnos a maga előnyei mellett, megvannak a korlátai is. pl.: egy link href attribútumát elég macerás dinamikussá tenni így. (meg lehet csinálni, csak nem lesz kényelmes használni)
17

Nem értem

Joó Ádám · 2008. Május. 28. (Sze), 00.14
Miért problémás? Persze, az már nem néz ki olyan szépen, de ugyanígy tudod használni ott is, bárhol.
18

szabvány xml

winston · 2008. Május. 28. (Sze), 08.20
ha a sablonaidat ténylegesen szabvány xml-nek akarod, akkor:
- vagy a meglevő, xml tag alapú funkciókat egészíted ki úgy, hogy attribútumokat másik szintaktikával módosítasz

<template-for>
<a href="{valami_másik_szintatktika_a_feloldásra}">valami</a>
</template-for>
- vagy pedig úgy fog kinézni a sablonod, hogy:

<a href="<sablon_elem_kicseréli_valamire />">valami</a>
ami nem túl jó, asszem (lévén attribútumon belül egy xml node próbál meg elhelyezkedni)

(vagy mint valaki fent belinkelte: lehet csak attribútumokra alapuló sablonozást használni, amivel azért vannak fenntartásaim :))
22

Processing instruction

Joó Ádám · 2008. Május. 29. (Cs), 00.36
Nem tudom, hogy a feldolgozó utasítások helyére milyen szabályok vonatkoznak, nem tartom elképzelhetetlennek, hogy az szerepelhet attribútumban is. Márpedig a <?php szintakszis az feldolgozó utasítás, nem XML node.
23

xml

winston · 2008. Május. 29. (Cs), 12.59
az alapfelvetés az volt, hogy xml alapú sablon. arra próbáltam rámutatni, hogyha ehhez ragaszkodunk, akkor -jelen ötleteim szerint- nem lesz túl kényelmeg sablont írni. vagy nem lesz xml
15

átgondolatlanság?

Hodicska Gergely · 2008. Május. 27. (K), 18.52
az egyik a viszonylagos átgondolatlansága
Érdekelne, hogy mikre gondolsz ezalatt. Kicsit bátor kijelentésnek érzem, nem akármilyen fejlesztő(k) csinálták, plusz a Smarty igencsak előremutató cucc volt a maga idejében.


Üdv,
Felhő
20

Példa

janoszen · 2008. Május. 28. (Sze), 18.45
Hogy csak a legtriviálisabb példát mondjam, az összeadásra van külön dedikált művelet, a string konkatenálásra nincs. :) Illetve van, csak filter gyanánt. Szerintem, ez átgondolási probléma. Semmi kétség afelől hogy a Smarty egy tetemes munkát megcsinál helyettem, de ugyanolyan átgondolatlannak értem, mint a PHP-t. :)
21

minek

Hodicska Gergely · 2008. Május. 28. (Sze), 19.20
Mi köze a két dolognak egymáshoz? Miért jó egy template kezelőben szöveget konkatenálni (simán egymásmellé teszed a két változót)?

Másrészt ez a példa olyan, mintha azt mondanád, hogy tök szar ez meg ez az autó, mert nincs a kesztyűtartóban fésű, messze nem az szint, ami alapján egy smarty méretű cuccot jellemezni lehet. Átgondolatlan példa. ;)


Üdv,
Felhő
24

Mező

janoszen · 2008. Május. 29. (Cs), 21.43
Egy checkboxnál próbáltam volna elérni, hogy akkor legyen "selected", ha az értéke megegyezik egy tömbben átadott értékkel. Mivel a checkbox-gyűjtemény egy kapcsolótáblás szerkezetből született, ezért az egyes checkboxok name-ja úgy nézett ki, hogy mezonev_id. Namost, ezt a mezonev_id-t szerettem volna előállítani Smartyban, hogy az adott indexű tömbelemet meg tudjam lesni. Mivel nagy mennyiségű mezőről volt szó, ezért nagy szerepet játszott az automatizmus az elemek kigenerálásában. (include multicheckbox.html... :)
25

assign

Hodicska Gergely · 2008. Május. 29. (Cs), 22.05
Egyrészt (egyre betegesebben használom ezt a szót :)) ezek szerint nem szöveg konkatenálást nem tud a smarty, hanem nem engedi meg, hogy tömindexként kifejezést tudj megadni (ennek speciel elég jó oka lehet, mert így sem triviális az a pár regexp, amivel operál). Viszont tök egyszerű megkerülni, először egy assignban hozod létre a változó nevét, és utána tudod használni tömbindexként, nincs szükség semmilyen filterre.

Amit tényleg nem tud a smarty: variable variable, ami elég hasznos tud lenni, de ez is kb. ennyi:
/**                                                                                                                                                                                                                                         
 * Smarty {var} function plugin                                                                                                                                                                                                             
 *                                                                                                                                                                                                                                          
 * Type:     function<br>                                                                                                                                                                                                                   
 * Name:     var<br>                                                                                                                                                                                                                        
 * Purpose:  provide variable variable functionality<br>                                                                                                                                                                                    
 * @param array                                                                                                                                                                                                                             
 * @param Smarty                                                                                                                                                                                                                            
 */                                                                                                                                                                                                                                         
function smarty_function_var($params, &$smarty)                                                                                                                                                                                             
{                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                            
        if (!isset($params['var'])) {                                                                                                                                                                                                       
                $smarty->trigger_error("var: missing 'var' parameter");                                                                                                                                                                     
                return;                                                                                                                                                                                                                     
        }                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                            
        if($params['var'] == '') {                                                                                                                                                                                                          
                return;                                                                                                                                                                                                                     
        }                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                            
        $var = explode('.', $params['var']);                                                                                                                                                                                                
        $value = $smarty->get_template_vars($var[0]);                                                                                                                                                                                       
                                                                                                                                                                                                                                            
        $i = 1;                                                                                                                                                                                                                             
        while (isset($var[$i])) {                                                                                                                                                                                                           
                if ($var[$i]{0} == '$'){                                                                                                                                                                                                    
                        $var[$i] = $smarty->get_template_vars(substr($var[$i], 1));                                                                                                                                                         
                }                                                                                                                                                                                                                           
                $value = $value[$var[$i]];                                                                                                                                                                                                  
                $i++;                                                                                                                                                                                                                       
        }                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                            
        return $value;                                                                                                                                                                                                                      
}                                                                                                                                                                                                                                           
Üdv,
Felhő
27

Lehet...

janoszen · 2008. Május. 29. (Cs), 23.56
Lehet ilyet csinálni, de speciel az egyszerűség kedvéért azt szerettem volna hogy egy ilyen multifield úgy jön létre, hogy egy változóban odaadom a queryből kapott adatokat, egy másikban a számára lényeges generáló paramétereket és a többit intézze el maga. Úgy kerültem meg a problémát (igen, később láttam a lentebb említett cat megoldást) hogy natív PHP kódként tettem be. Nem szép, de működik. :)
31

Ez jellemző...

Balogh Tibor · 2008. Május. 31. (Szo), 17.09
Viszont tök egyszerű megkerülni...

Igen ez jellemző a Smartyra, hogy néhány dolgot, ilyen megkellkerülni dologgal lehet elintézni.
26

konkatenálás

gex · 2008. Május. 29. (Cs), 22.09
nem tudom, hogy pontosan értem-e mit szerettél volna, de nekem is szükségem volt automatikusan előállított űrlapok select-jeinél hasonlóra. itt egy megoldás:
  1. először is a ciklusmagban létrehozol egy változót
    {assign var='fieldname' value='field_'|cat:$fields[f].id}

  2. utána pedig például $smarty.post.$fieldname-ként lehet ezt felhasználni.


szerk: kicsit átírtam, hogy érthetőbb legyen.
28

Láttam

janoszen · 2008. Május. 29. (Cs), 23.57
Igen, ezt utána már én is megtaláltam, a lényeg a mondandómban az lett volna, hogy rámutassak a Smarty ilyen jellegű átgondolatlanságaira, mint pl van összeadás de cat hasonló módon már nincs.
29

read only

Hodicska Gergely · 2008. Május. 30. (P), 00.50
rámutassak a Smarty ilyen jellegű átgondolatlanságaira, mint pl van összeadás de cat hasonló módon már nincs.
Fentebb arra próbáltam meg rámutatni, hogy tök más dolgról beszélsz. Ahogyan összeadás van, úgy cat is van (illetve nincs ;), mert nincs is rá szükség). Amit hiányolsz az nem cat, hanem az, hogy kifejezés lehessen egy tömbindex, ennek meg elég jó oka van, hogy ne bonyolódjon el a feldolgozás egy olyan funkció érdekében, amire az esetek többségében nincsen szükség, és amúgy meg könnyedén megoldható hackolás nélkül is.


Üdv,
Felhő
30

Lehet...

janoszen · 2008. Május. 30. (P), 08.20
Lehet, bár én úgy láttam értelmét, hogy ne kelljen a View rétegen kívül azzal szórakoznom, hogy melyik a kiválasztott elem, ami szerintem nem egy irreális elvárás. De egyébként értem, mit mondasz. Visszatérve az eredeti témára, csomószor találkozom olyasmivel Smartyban hogy vannak dolgok amiket meg lehet csinálni, de hozzájuk hasonló dolgokat nem lehet ugyanúgy vagy egyáltalán nem lehet. Lehet, hogy nem tudom jól érzékeltetni példával, de ez volt az érzésem. :)
16

ennél egyszerűbb

erenon · 2008. Május. 27. (K), 23.25

<?php if(isset($content)) ?><li><?php echo $content ?></li><?php } ?>
Érdekelne, hogy létezik-e a fenti igényeket kielégítő sablonozórendszer, ami nem maga a php?
pl.:

{content <li>$content</li>}
Mindezt egymásba ágyazva, megspékelve foreach-ekkel. Ha nem, akkor szerintem egy speciális szerkesztő összeállítása sem egy nagy feladat, ugyanis az igények nagyon hasonlóak (foreach, isset, echo)
19

xsl?

dOMiNiS · 2008. Május. 28. (Sze), 17.46
xsl-ben ez igy nez ki: <li><xsl:value-of select="content" /></li>
32

Nem teljesen ugyanaz

Kaszás Balázs · 2008. Jún. 1. (V), 20.36
Ami nem teljesen ugyanaz, mint a fenti HTML-PHP kód, hiszen akkor is bekerül az üres <li> a kódba, ha a value-of üres lesz.