What is Smarty?
Why use it?
Use Cases and Work Flow
Syntax Comparison
Template Inheritance
Best Practices
Crash Course
You may use the Smarty logo according to the trademark notice.
For sponsorship, advertising, news or other inquiries, contact us at:
Os templates podem vir de uma variedade de fontes. Quando você exibe (display) ou busca (fetch) um template, ou inclui um template de dentro de outro template, você fornece um tipo de recurso, seguido pelo caminho e nome do template apropriado. Se um recurso não é dado explicitamente o valor de $default_resource_type é assumido.
Templates a partir do $template_dir não exigem um recurso de template, apesar de você usar o arquivo: resource for consistancy. Apenas forneça o caminho para o template que você quer usar em relação ao diretório root $template_dir.
Example 15.6. Usando templates partindo do $template_dir
// from PHP script $smarty->display("index.tpl"); $smarty->display("admin/menu.tpl"); $smarty->display("file:admin/menu.tpl"); // Igual ao de cima {* de dentro do template do Smarty *} {include file="index.tpl"} {include file="file:index.tpl"} {* igual ao de cima *}
Os Templates de fora do $template_dir exigem o arquivo: tipo de recurso do template, seguido pelo caminho absoluto e nome do template.
Example 15.7. usando templates partindo de qualquer diretório
// de dentro do script PHP $smarty->display("file:/export/templates/index.tpl"); $smarty->display("file:/path/to/my/templates/menu.tpl"); {* de dentro do template do Smarty *} {include file="file:/usr/local/share/templates/navigation.tpl"}
Se você está usando uma máquina windows, caminhos de arquivos normalmente incluem uma letra do drive (C:) no começo do nome do caminho. Esteja certo de usar "file:" no caminho para evitar conflitos de nome e obter os resultados desejados.
Example 15.8. usando templates com caminhos de arquivo do windows
// de dentro do script PHP $smarty->display("file:C:/export/templates/index.tpl"); $smarty->display("file:F:/path/to/my/templates/menu.tpl"); {* de dentro do template do Smarty *} {include file="file:D:/usr/local/share/templates/navigation.tpl"}
Você pode resgatar templates usando qualquer fonte possível de você acessar com PHP: banco de dados, sockets, LDAP, e assim por diante. Você faz isto escrevendo as funções de plugin de recurso e registrando elas com o Smarty.
Veja a seção plugins de recurso para mais informação sobre as funções que você deve fornecer.
Note que você pode ativar manualmente o recurso de arquivo
embutido, mas não pode fornecer um recurso que busca templates a partir do sistema de arquivos de alguma outra forma registrando sob um outro nome de recurso.
file
resource, but you can provide a resource
that fetches templates from the file system in some other way by
registering under another resource name.
Example 15.9. usando recursos customizáveis
// no script PHP // ponha estas funções em algum lugar de sua aplicação function db_get_template ($tpl_name, &$tpl_source, &$smarty_obj) { // faça o banco de dados chamar aqui para buscar o seu template, // preenchendo o $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 db_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj) { // faça o banco de dados chamar daqui para preencher a $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 db_get_secure($tpl_name, &$smarty_obj) { // assume-se que todos os templates são seguros return true; } function db_get_trusted($tpl_name, &$smarty_obj) { // não usado para templates } // registrar o nome de recurso "db" $smarty->register_resource("db", array("db_get_template", "db_get_timestamp", "db_get_secure", "db_get_trusted")); // usando o recurso a partir do script PHP $smarty->display("db:index.tpl"); {* usando o recurso de dentro do template do Smarty *} {include file="db:/extras/navigation.tpl"}
Você pode especificar a função que é usada para devolver o conteúdo do template no evento em que o template não pode ser devolvido de seu recurso. Um uso disto é para criar templates que não existem "on-the-fly" (templates cujo conteúdo flutua muito, bastante variável).
Example 15.10. usando a função manipuladora de template padrão
<?php // ponha esta função em algum lugar de sua aplicação function make_template ($resource_type, $resource_name, &$template_source, &$template_timestamp, &$smarty_obj) { if( $resource_type == 'file' ) { if ( ! is_readable ( $resource_name )) { // cria um arquivo de template, retorna o conteúdo. $template_source = "This is a new template."; $template_timestamp = time(); $smarty_obj->_write_file($resource_name,$template_source); return true; } } else { // não é arquivo return false; } } // defina a manipuladora padrão $smarty->default_template_handler_func = 'make_template'; ?>