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}