+3

Trabalhando com templates Smarty

criado por Flávio Gonçalves Garcia em 25/10/2003 10:12pm
Tomando por base o demo que vem com o smarty,o arquivo index.php ...


Instanciando:

<?php

// preste atenção essa linha mudará de acordo com o lugar que você vai colocar a pasta 
// libs eu pessoalmente mudei o nome dela para smarty, e coloquei na minha pasta class, 
// onde eu tenho minha coleção de classes
require '../libs/Smarty.class.php';

// Instanciando
$smarty = new Smarty;

// Quando compile_check está true, ele verifica se não vai ser alterado nada no template, 
// se for ele compila de novo e manda o template, se não ele já manda o cache para o 
// usuário. Se estiver false toda requisição vai ser compilada
$smarty->compile_check = true;

// Tela de debug habilitada, pula um popup com o debug
$smarty->debugging = true;

?>

Vamos parar um pouco para fazer umas considerações, na documentação disponível do site do template tem alguns métodos para você ter mais flexibilidade para trabalhar as pastas dos templates, mas eu vou citar algumas aqui:

<?php
// Defina a canstante SMARTY_DIR
define(’SMARTY_DIR’,’/usr/local/lib/php/Smarty/’);
require(SMARTY_DIR.’Smarty.class.php’);
$smarty = new Smarty;

// Passe para o Smarty onde estará suas pastas
$smarty->template_dir = ’/var/www/demo/templates/’;
$smarty->compile_dir = ’/var/www/demo/templates_c/’;
$smarty->config_dir = ’/var/www/demo/configs/’;
$smarty->cache_dir = ’/var/www/demo/cache/’;
//continue com o resto da programamção
?>

Operações:
<?php
// Mandando variáveis comuns para o template
$smarty->assign("Name","Fred Irving Johnathan Bradley Peppergill");

// Mandando um arrays para efetuar loops
$smarty->assign("FirstName",array("John","Mary","James","Henry"));
$smarty->assign("LastName",array("Doe","Smith","Johnson","Case"));

// Mandando arrays de arrays para o loop
$smarty->assign("Class",array(array("A","B","C","D"), array("E", "F", "G", "H"),
	  array("I", "J", "K", "L"), array("M", "N", "O", "P")));

// Esse array está com o último nível reperesentado por nomes
$smarty->assign("contacts", array(array("phone" => "1", "fax" => "2", "cell" => "3"),
	  array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234")));

// Essa funcionalidade que tem no assing é show porque ela vai criar um option sem muita 
// programação no seu template, vejamos o exemplo:

// Jogou os valores
$smarty->assign("option_values", array("NY","NE","KS","IA","OK","TX"));

// Jogou os outputs
$smarty->assign("option_output", array("New York", "Nebraska", "Kansas", "Iowa", "Oklahoma", "Texas"));

// Escolheu o que ficará selecionado
$smarty->assign("option_selected", "NE");
?>

Imprimido o template:
<?php
// O raciocínio aqui é diferente, o nome do template vai ficar na impressão e não no 
// começo do processamento. No caso index.tpl é o template.
$smarty->display('index.tpl');
?>

Comentários:

Mostrando 1 - 10 de 31 comentários
Caraaaaaaaaaa
muito bom o seu artigo, está de parabéns, me ajudou muito!!
Forte abraço!
18/05/2007 1:37pm (~17 anos atrás)

Edinho disse:
Não sei se está muito tarde mas a documenteção para o Smarty e em portugues está em:
http://smarty.php.net/manual/pt_BR/index.php

Você encontrará o manual completo.

Espero ter ajudado!

Falow
29/09/2004 10:15am (~20 anos atrás)

Primeiramente boa tarde a todos os incriveis participantes de fórum de php.
Me chamo Edivaldo e estou começando a aprender php juntamente com o banco mysql.
E sinceramente falando é um dos mais ricos fóruns em php que já encontrei. Parabens a todos vcs e ao idealizador da idéia.
Lendo e pesquisando aqui li algo sobre o Smarty. Fiz o download do smarty e gostaria de saber exatamente para onde eu copio os arquivos e como devo usar os seus templates para entender melhor como funciona a linguagem php. Desde já agradeço a todos a ajuda que puderem me enviar.
Muito obrigado a todos!

Edivaldo R. de Sousa
28/06/2004 1:03pm (~20 anos atrás)

Bragança,

é o seguinte, quando vc instancia o smarty, você precisa setar alguns parâmetros do objeto instanciado, ex:

require_once '[path_smarty]Smarty.class.php';

$smarty = new Smarty;

$smarty->compile_check = true;

$smarty->debugging = true;

$smarty->template_dir = ’[path_template]’;
$smarty->compile_dir = [path_compile]’;
$smarty->config_dir = [path_config]’;
$smarty->cache_dir = [path_cache]’;

leia atentamente a página 3 do artigo, tem tudo explicado direitinho, se você ainda tiver mais problemas, me avisa, estamos aí.

Atenciosamente,

Flávio Garcia


24/06/2004 7:32am (~20 anos atrás)

Cara você não está enviando algum header "Pragma no-cache" ou "Cache-Control: no-store, no-cache, must-revalidate" ou "Cache-Control: post-check=0, pre-check=0"?

Eu não tenho esse problema, talvez ou a sua aplicação joga um header que força um não cacheamento por parte do browser, ou seu web server esteja configurado para mandar esse header automático, ou o seu borwser está configurado desse jeito.

Se você me mostrar o endereço da página ou me dar mais dicas, talvez eu possa te ajudar melhor.
24/06/2004 7:26am (~20 anos atrás)

Instalei o Smarty 2.6.3 na minha máquina e descobri que, diferente da versão 2.6.2, o comando "require_once 'libs/smarty/Smarty.class.php';" desvia para o diretório "libs/smarty/". Isto me obriga a mapear todos os diretórios como no exemplo do display, no qual tenho que subir um nível:

Versão 2.6.2
require_once('libs/smarty/Smarty.class.php');
display('templates/adm/layout.tpl');

Versão 2.6.3
require_once('libs/smarty/Smarty.class.php');
display('../templates/adm/layout.tpl');

Alguém sabe se isto é um bug ? Existe alguma maneira de contornar este problema ?

Desde já agradeço
23/06/2004 10:28am (~20 anos atrás)

Estou utilizando o template Smarty (php) e sempre que tento voltar a página anterior recebo uma mensagem dizendo que a página expirou. Alguém tem alguma idéia do motivo da mensagem, e, como posso resolver isto ?
A propósito, eu utilizo o mesmo template para todas as páginas, substituindo apenas o conteúdo.

{include file="templates/adm/ghead.tpl" title=$titulo}

<table width="100%" height="80%" border=0 cellspacing=0 cellpadding=0>
<tr>
<td width="15%" bgcolor=red>{include file="templates/adm/gmenu.tpl"}</td>
<td width="85%" bgcolor=gray>{include file=$conteudo}</td>
</tr>
</table>

{include file="templates/adm/gfoot.tpl"}

Desde já agradeço
22/06/2004 11:47am (~20 anos atrás)

Gostaria de avisar a todos que o manual do smarty esta traduzido. Ele pode ser encontrado tanto na página do smarty quanto na página do Grupo de Tradução do Manual do PHP, em http://manualphp.sourceforge.net, espero que isso ajude a divulgar esta ótima ferramenta de templates.
03/01/2004 2:25pm (~21 anos atrás)

Éder Baum disse:
Estou usando a classe Smarty e preciso concatenar dados na template. No caso eu tenho uma variavel, e um string que devem ser concatenados(juntados).

A variavel seria esta:

{assign var="template_folder" value="minha_template/"}

Então eu preciso concatenar a variavel "$template_folder" com o string "index.tpl".

Alguém poderia me ajudar, pois tentei o classico pontinho e nada.
21/12/2003 2:58am (~21 anos atrás)

Pessoal ... como está o projeto da tradução para português do Manual do Smarty. Eu hoje por acaso descobri essa discussão aqui no site do PHPBrasil. Eu estava traduzindo para uso próprio o Manual do Smarty, já estou terminando o 5º capitulo da tradução. Tenho um enorme interesse em participar deste projeto

[ ]s.
13/12/2003 3:47pm (~21 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)