Templates componentizados

Tradicionalmente, programar templates para suas aplicações é feito da seguinte maneira: Primeiro, você guardar suas variáveis junto com a aplicação PHP, (talvez obtendo-as de consultas à banco de dados). Após, você instancia seu objeto Smarty, atribui valores às variáveis e mostra o template. Digamos que nós temos um registrador de estoque em nosso template. Nós coletaríamos os dados do estoque em nossa aplicação, e então atribuíriamos valores as variáveis referentes à ele no template e depois exibiríamos o template na tela. Agora não seria legal se você pudesse adicionar este registrador de esto em qualquer aplicação simplesmente incluindo um template nela, e sem se preocupar com a busca dos dados futuramente?

Você pode fazer isto escrevendo um plugin personalizado que obteria o conteúdo e atribuiria ele à uma variável definida no template.

Exemplo 18-7. Template componentizado

<?php

// coloque o arquivo "function.load_ticker.php" no diretório plugin

// configura nossa função para pegar os dados do estoque
function fetch_ticker($symbol)
{
// coloque a lógica que obtém os dados de
// algum recurso e guarde na variável $ticker_info
return $ticker_info;
}

function
smarty_function_load_ticker($params, &$smarty)
{
// chama a função
$ticker_info = fetch_ticker($params['symbol']);

// atribuite o valor à uma variável no template
$smarty->assign($params['assign'], $ticker_info);
}
?>
index.tpl
---------
{* Smarty *}
{load_ticker symbol="YHOO" assign="ticker"}
Nome no estoque: {$ticker.name} Preço no estoque: {$ticker.price}