Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

register_modifier u smarty nece

[es] :: PHP :: register_modifier u smarty nece

[ Pregleda: 2148 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

peca89bg
Beograd

Član broj: 202034
Poruke: 354
95.180.55.*



+6 Profil

icon register_modifier u smarty nece14.09.2012. u 18:01 - pre 141 meseci
Radim na jednom projektu koji je multilanguage.
Korisim Zend_Translate(adapter csv) kao standalone jer mi je lagan a i klijent hoce da prevodi sam.
Template engine mi je Smarty.
Zend_Translate bez Smarty-a radi odlicno.

Evo klase koja je zaduzena za prevo i koju hocu da "umetnem" u Smarty.

Code (php):

<?php
class Prevod
{
    public static $zt;

    public function __construct()
    {
        self::$zt = new Zend_Translate(array(
            'adapter' => 'csv',
            'content' => 'csv/lang_en.csv',
            'locale' => 'en'
        ));
    }

    public static function prevedi($str)
    {
        return self::$zt->_($str);
    }
}
$smarty = new Smarty();
$prevod = new Prevod();
?>
 


medjtum ovaj red mi pravi problem:

Code (php):

$this->register_modifier('prevod', array($prevod, 'prevedi' ));
//i ovo nece:
//$this->register_modifier('prevod', array(&$prevod, 'prevedi' ));
 

baca mi blank page.
takodje i najjednostavnija stvar nece:
Code (php):

$smarty->register_modifier('ss', 'stripslashes');
 

Ne znam sta mu je, puko sam vise pa bi mi svaka pomoc dobrodosla.
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-1.sezampro.rs.



+33 Profil

icon Re: register_modifier u smarty nece15.09.2012. u 09:42 - pre 141 meseci
Najpre pitanje, u kom momentu pokušavaš da prijaviš taj custom modifier? Vidim da u ovom prvom primeru koristiš $this, pa pretpostavljam da je to već negde u kontekstu render-ovanja, a tad je čini mi se malo kasno...

Inače, za tu custom-izaciju Smarty-ja, ja više preferiram da radim na način da mu saopštim dodatnu putanju na kojoj treba da traži moje plugin-ove, znači ovako nešto:
Code:
$smarty->plugins_dir = array(
    'putanja/do/vendor/Smarty/plugins/', //default-ni plugin-ovi
    'putanja/do/custom_plugins/'
);

... i onda u tom custom_plugins folderu smeštam funkcije, modifier-e, itd., naravno poštujući onu konvenciju imenovanja istih (function.nesto.php, modifier.nesto.php i slično).

Dalje, ako si već taj tvoj wrapper oko Zend_Translate zamislio kao statičku klasu, onda nema smisla da imaš konstruktor. Napravi samo neki interni metod koji će da lazy load-uje Zend_Translate instancu, ovako:
Code:
class Prevod
{
    private static $_zt;

    private static function _getTranslate()
    {
        if (null === self::$_zt) {
            self::$_zt = new Zend_Translate(array(
                'adapter' => 'csv',
                'content' => 'csv/lang_en.csv',
                'locale' => 'en'
            ));
        }
        
        return self::$_zt;
    }

    public static function prevedi($str)
    {
        return self::_getTranslate()->_($str);
    }
}

I konačno, taj neki modifier.prevod bi izgledao ovako:
Code:
function smarty_modifier_prevod($string)
{
    return Prevod::prevedi($string);
}
 
Odgovor na temu

peca89bg
Beograd

Član broj: 202034
Poruke: 354
95.180.55.*



+6 Profil

icon Re: register_modifier u smarty nece15.09.2012. u 15:40 - pre 141 meseci
To je to i ja sam tako uradio ali sam se zainatio da mu prosledim objekat a ne da instanciram klasu u telu f-je.

Smarty 3 je promenio API a mene mrzelo da citam dokumentaciju.
Pa bi sad register_modifier izgledao ovako:

Code (php):

$smarty ->registerPlugin('modifier','prevedi', array($prevod, 'prevedi' ));
 
 
Odgovor na temu

[es] :: PHP :: register_modifier u smarty nece

[ Pregleda: 2148 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.