Tradizionalmente, programmare le applicazioni a template funziona così: per prima cosa si accumulano le variabili nell'applicazione PHP (magari con query al database). Poi, si istanzia l'oggetto Smarty, si assegnano le variabili e si visualizza il template. Allora supponiamo di avere, ad esempio, un riquadro che visualizza le quotazioni di Borsa (stock ticker) nel nostro template. In questo caso raccoglieremmo i dati sulle azioni nell'applicazione, poi assegneremmo le variabili al template e le visualizzeremmo. Ma non sarebbe bello poter aggiungere questo stock ticker a qualsiasi applicazione semplicemente includendo il template, senza preoccuparci della parte relativa al caricamento dei dati?
E' possibile fare questo scrivendo un plugin personalizzato che recuperi il contenuto e lo assegni ad una variabile del template.
Example 18.7. template a componenti
<?php
// mettiamo il file "function.load_ticker.php" nella directory dei plugin
// scriviamo la funzione che carica i dati
function fetch_ticker($symbol)
{
// qui metteremo la logica che carica $ticker_info da qualche parte
return $ticker_info;
}
function smarty_function_load_ticker($params, &$smarty)
{
// chiamiamo la funzione
$ticker_info = fetch_ticker($params['symbol']);
// assegnamo la variabile del template
$smarty->assign($params['assign'], $ticker_info);
}
?>
index.tpl
---------
{* in index.tpl *}
{load_ticker symbol="YHOO" assign="ticker"}
Stock Name: {$ticker.name} Stock Price: {$ticker.price}
