2011-12-28 7 views
5

Ciao, ho scritto una funzione nel file .php. Ad esempioCome chiamare una funzione php all'interno di un file .tpl smarty?

public static function getCategories($id_lang = false, $active = true, $order = true, $sql_filter = '', $sql_sort = '',$sql_limit = '') 
{ 
    if (!Validate::isBool($active)) 
     die(Tools::displayError()); 

    $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' 
     SELECT * 
     FROM `'._DB_PREFIX_.'category` c 
     LEFT JOIN `'._DB_PREFIX_.'category_lang` cl 
     ON c.`id_category` = cl.`id_category` 
     WHERE 1 '.$sql_filter.' '.($id_lang ? 'AND `id_lang` = '.(int)($id_lang) : '').' 
     '.($active ? 'AND `active` = 1' : '').' 
     '.(!$id_lang ? 'GROUP BY c.id_category' : '').' 
     '.($sql_sort != '' ? $sql_sort : 'ORDER BY c.`level_depth` ASC, c.`position` ASC').' 
     '.($sql_limit != '' ? $sql_limit : '') 
    ); 

    if (!$order) 
     return $result; 

    $categories = array(); 
    foreach ($result AS $row) 
    { 
     $categories[$row['id_parent']][$row['id_category']]['infos'] = $row; 
    } 
    return $categories; 
} 

e voglio chiamare questa funzione all'interno di un file .tpl. Ho usato il modo {php} {/php}, ma questo non funziona. Qual è il modo di chiamare questo?

Grazie

+0

Questa funzione restituisce una serie di categorie, vero? Ok, allora, cosa vuoi fare con questo array? Come hai bisogno di usarlo nel tuo template Smarty ??? –

risposta

5

Smarty è un linguaggio di template - se si desidera emettere i risultati di una funzione, assegnare l'output ad una variabile Smarty

$smarty->assign('categories', getCategories($args)); 

e poi utilizzarlo nel modello

{$categories} 

Ci sono pochissime situazioni in cui questo non è il modello corretto.

+0

grazie per la risposta adam. Ho scritto il codice sopra quello che hai detto. ma non funzionerà. puoi specificare dove devo scrivere la riga $ smarty-> assign ('categories', getCategories ($ args)); – srinu

+0

Sono d'accordo con questo commento. Vedi una [risposta correlata su SE] (http://stackoverflow.com/a/7446889/913758). – NobRuked

+0

@srinu la prima riga va nel tuo php, la seconda nel tuo modello. Hai letto il manuale? http: //www.smarty.net/documentation –

4

si può usare qualcosa di simile e ho sempre usato

{category.id|function_name} 

Mi spiego è:

category.id = è l'ID della categoria di cui si desidera ottenere informazioni nella funzione

nome_funzione = è il nome della funzione

+0

Funzionerebbe solo con le funzioni Smarty integrate, non con la funzione personalizzata definita nella domanda –

+0

funzionerà con una funzione personalizzata, –

+0

lo uso sempre come questa funzione Test() { echo "Hello World"; } in Smarty HTML lo uso come questo dopo che ho includono la funzione nella pagina php {$ a | test} uscita sarà Ciao Mondo –

2

poiché si utilizza un metodo statico, non sarà possibile utilizzare $ questa parola chiave nella propria funzione. Così dunque, non sarà in grado di utilizzare

$this->context->smarty->assign('categories', self::getCategories($args)); 

Così si dovrebbe creare una variabile e assegnare il contesto ad essa e nel tuo caso si avrà solo bisogno la parte smarty di esso.

$smarty = Context::getContext()->smarty; 

Ora è possibile utilizzare questo come segue:

$smarty->assign('categories', self::getCategories($args)); 

Sto assumendo che si chiamerà la funzione nella stessa classe, così ho usato self :: GetCategories ($ args) , se si desidera utilizzarlo in un altro uso della classe className :: GetCategories ($ args)

Spero che questo ti aiuta, provare e mi danno un feedback! ;)

Problemi correlati