Pogčedajte punu verziju : Smarty plugin: module
cvele
07. 11. 2008., 10:07
Evo jednog mog smarty plugina koji ce verovatno nekome koristiti:
Some time ago I wrote this useful smarty plugin wich will enable you to call method of any php class from smarty html template.
http://www.hazaah.com/programming/smarty-plugin-module/
bluesman
07. 11. 2008., 10:41
Znaš da sam ja hteo pišem tako nesto pre neki dan. :)
Nego, ne znam kako ovo uopste radi:
return call_user_func($params['class'].'::'.$params['method'], $params);
Zar ne treba:
return call_user_func(array($params['class'],$params['method']), $params);
Ako je klasa, callback funkcija mora da se zove kao array, zar ne ? I zasto prosledjujes funkciji sve parametre ponovo (ukljucujuci i ime klase i funkcije)? Ili sam jos pospan ili je ovo tvoje nesto zesce custom ili imam problem da razumem kod. :)
BTW, (za)ostao ti je ovaj global $conf, ne koristi se u funkciji :)
BTW2, ako se vec koristi smarty, zar nije bolje zvati $smarty->trigger_error nego amo trigger_error. Generalno isto je, nego samo zbog konzistentnosti.
cvele
07. 11. 2008., 10:54
trigger_error, slazem se. Isto kao i conf :) imam custom error handler, koji u futeru ispisuje sve sto mi treba tako da nisam mnogo vodio racuna o smarty debug-u.
Moj primer radi samo za staticke metode, sto je vise nego dovoljno dobro iz moje perspektive.
Inace poziv koji si napisao je alternativa za
mixed call_user_method ( string $method_name , object &$obj [, mixed $parameter [, mixed $... ]] )
I koliko je meni poznato njemu nije moguce proslediti string za ime klase vec mora da bude inicijalizovan objekat :)
bluesman
07. 11. 2008., 10:56
Evo sad si me "naterao" da konsultujem php manual.... Može ovo tvoje call_user_func ("a::b") ali samo od php 5.3.2. Znam da to nije moglo tako ranije :)
cvele
07. 11. 2008., 10:57
Zaboravih, thanks... prepravio sam trigere i conf.
Takodje sam zaboravio da ti odgovorim za prosledjivanje parametara. Fora je sto nicemu ne skodi da prosledim 2 dodatna parametra funkcije :) a mrzelo me da pisem dva puta unset ;)
Ne vidim sta bih dobio njima, niti sta gubim tako sto ostavljam jos dva clana areja
bluesman
07. 11. 2008., 11:11
Pa problem moze da nastane ako imas klasu X funkciju Y koja prima 2 parametra $a i $b
X::Y ($a, $b);
i ti zoves {module claass="X" method="Y" a="nesto" b="nesto"}
a ti prosledis kao X::Y( [svi parametri] ), onda ce $a da bude "X" a $b "Y" jer se parametri ne prosledjuju asocijativno vec po redu.
Samo dva predloga:
1. isset proverava da li je setovano, u tvom slucaju je problem ako je setovano a prazan string, predlazem da umesti if (!isset()) stoji if (empty())
2. mogao bi da dodas i opciono assign:
$ret = call_user_func(...
if (!empty($params['assign']))
{
return $smarty->assign($params['assign'], $ret);
}
return $ret;
cvele
07. 11. 2008., 11:42
Pogresno si skapirao filozoviju metoda koji se poziva.
On sam prima array, pa sa clanovima array-a radi nesto, ne prima 2 varijable kao u tvom slucaju nego jednu varijablu koja je asicijativni arej.
bluesman
07. 11. 2008., 12:15
Pa zato kažem, sigurno je nešto custom :) Ja sam gađao neko opštije rešenje.
ivanhoe
07. 11. 2008., 12:52
za obicne (ne staticke) pozive sta fali upotrebi register_object()?
cvele
07. 11. 2008., 13:21
hmm nisam cuo do sada za register_object ?
bluesman
07. 11. 2008., 13:31
Da, postoji register_object ali se time stvar nepotrebno komplikuje, ja za to koristim obican assign, pa recimo imam:
$neka_klasa = new Klasa()
$smarty->assing_by_ref ('neka_klasa', $neka_klasa);
a onda iz smarty zovem jednostavno
{$neka_klasa->neka_funkcija()}
Medjutim, to nikada i nije bio problem, problem su bas staticki pozivi o tome se i priča ovde, to ne mozes iz smarty da izvedes bez puno žongliranja.
cvele
07. 11. 2008., 13:36
aaaa smarty metod register_object :D ja mislio php fja :)
vBulletin® v3.6.8, Copyright ©2000-2024, Jelsoft Enterprises Ltd.