Avagy miért került egy láblécbe a 7658 felirat. Nos, azért, mert a Smarty-nak van egy nagyon mókás bugja, ami a következőről szól. Adott az alábbi kódrészlet:
{$smarty.now|date_format:"%Y"}
Ettől azt várnánk, hogy az aktuális időbélyeg értékét az strtotime metódus szerint évként kapnánk eredményül.
Ehelyett azonban egy minden másodpercben látszólag véletlenszerűen növekvő szám az eredmény. Nézzük, mit tudunk az strtotime-ról:
The function expects to be given a string containing an English date format and will try to parse that format into a Unix timestamp
Kis érdekesség, hogy a now
szöveg mellett egyetlen szóközt is megeszik, mindkét esetben az aktuális időbélyeget adja vissza.
Azonban kis próbálgatás után láthatjuk, hogy egy időbélyeget átadva az időbélyeg-előállító metódusnak, nem szép eredményt kapunk. Miért gond ez?
Lássuk most a Smarty shared.make_timestamp.php fájljának elejét:
if(empty($string)) { $string = "now"; } $time = strtotime($string);
Vagyis, a $string
változó megkapja a jelenlegi timestamp-et, ami jó esetben false-t ad vissza, azonban bizonyos esetekben nem false-t, hanem egy teljesen blőd időbélyeget kapunk eredményként, jól megzavarva ezzel a metódust, ami végül visszaadná az évszámot.
Hibák minden rendszerben vannak, de itt jön be az, hogy nem látom, miért jó egy újabb szintaktikát megtanulni, egy újabb réteggel bonyolítani a kódot, egy újabb, ilyen és ehhez hasonló hibalehetőségeket magában rejtő egységet bevonni a rendszerbe. A PHP önmagában kiválóan alkalmas sablonnyelvnek, a legtöbb szájtbilder ismeri annyira a szintaktikáját, hogy nem retten meg és az, hogy a view-ba így legalább nem lehet kódot rakni (pedig de) egyáltalán nem jó magyarázat.
Írtam már sajátot, volt már Smarty, illetve Twig is, és habár utóbbi nagyon bejött, sosem láttam értelmét ilyen komponenseknek.
saxus
2012. július 07. — 02:46:27
AAahahahhhahhhh… Amikor kijelentettem, hogy a Smarty szerintem szimlpán fasság, ugyanarra megoldás, amire eredetileg a PHP-t szánják, mindenki kiröhögött. 😀
Másrészt ami nem tetszik még benne, hogy sokan emiatt jó eséllyel összemossák a megjelenítés logikáját magával a HTML kóddal, ami nagyon nem ugyanaz.
Na és igen: +1 nyelv, +1 szintaktikával +1 hibalehetőséggel +1 hiányossággal. Próbáltál már class constant-ra egyenlőséget vizsgálni smartyban? 🙂
dadikovi
2012. július 07. — 11:53:09
Tényleg Mefi, meg lehet valahol nézni a v3-as blogmotort? Mármint valamikor írtad, hogy van egy béta-felülete, ami tesztelhető, vagy mi… Most már nagyon furdalja az oldalamat a kíváncsiság :))
Mefi
2012. július 08. — 16:42:53
[re=6066561]saxus[/re]: én smarty-ban lehetőleg semmit nem próbálgatok 😀
[re=6066564]dadikovi[/re]: szerintem pár hét múlva lesz publikus béta 🙂
saxus
2012. július 09. — 00:14:03
[re=6066569]Mefi[/re]: Igen, a probléma nálam is a “lehetőleg”-gel van. 😀
saxus
2012. július 09. — 04:48:36
Pontosítanék: ez a Smarty csak arra nem jó, amire kitalálták.