Recursos (Resources)

Os plugins de Recursos são como uma forma genérica de fornecer códigos fontes de template ou componentes de script PHP para a Smarty. Alguns exemplos de recursos: banco de dados, LDAP, memória compartilhada, sockets, e assim por diante.

Há um total de 4 funções que precisam estar registradas para cada tipo de recurso. Cada função receberá o recurso requisitado como o primeiro parâmetro e o objeto da Smarty como o último parâmetro. O resto dos parâmetros dependem da função.

bool smarty_resource_name_source (string $rsrc_name, string &$source, object &$smarty)

bool smarty_resource_name_timestamp (string $rsrc_name, int &$timestamp, object &$smarty)

bool smarty_resource_name_secure (string $rsrc_name, object &$smarty)

bool smarty_resource_name_trusted (string $rsrc_name, object &$smarty)

A primeira função deve devolver o recurso. Seu segundo parâmetro é uma variável passada por referência onde o resultado seria armazenado. A função deve retornar true se ela está apta a devolver com sucesso o recurso e caso contrário retorna false.

A segunda função deve devolver a última modificação do recurso requisitado (como um timestamp Unix). O segundo parâmetro é uma variável passada por referência onde o timestamp seria armazenado. A função deve retornar true se o timestamp poderia ser determinado com sucesso, e caso contrário retornaria false.

A terceira função deve retornar true ou false, dependendo do recurso requisitado está seguro ou não. Esta função é usada apenas para recursos de template mas ainda assim seria definida.

A quarta função deve retornar true ou false, dependendo do recurso requisitado ser confiável ou não. Esta função é usada apenas para componentes de script PHP requisitados pelas tags include_php ou insert com o atributo src. Entretanto, ela ainda assim mesmo seria definida para os recursos de template.

Veja também: register_resource(), unregister_resource().

Exemplo 16-10. Plugin resource (recurso)

<?php
/*
 * Smarty plugin
 * ------------------------------------------------------------- 
 * File: resource.db.php
 * Type: resource
 * Name: db
 * Purpose: Fetches templates from a database
 * -------------------------------------------------------------
 */
function smarty_resource_db_source($tpl_name, &$tpl_source, &$smarty)
{
 // do database call here to fetch your template,
 // populating $tpl_source
 $sql = new SQL;
 $sql->query("select tpl_source
 from my_table
 where tpl_name='$tpl_name'");
 if ($sql->num_rows) {
 $tpl_source = $sql->record['tpl_source'];
 return true;
 } else {
 return false;
 }
}
function smarty_resource_db_timestamp($tpl_name, &$tpl_timestamp, &$smarty)
{
 // faz o banco de dados chamar aqui para preencher $tpl_timestamp.
 $sql = new SQL;
 $sql->query("select tpl_timestamp
 from my_table
 where tpl_name='$tpl_name'");
 if ($sql->num_rows) {
 $tpl_timestamp = $sql->record['tpl_timestamp'];
 return true;
 } else {
 return false;
 }
}
function smarty_resource_db_secure($tpl_name, &$smarty)
{
 // assume que todos os templates são seguros
 return true;
}
function smarty_resource_db_trusted($tpl_name, &$smarty)
{
 // não usado para templates
}
?>