+3

Trabalhando com templates Smarty

criado por Flávio Gonçalves Garcia em 25/10/2003 10:12pm
Quando comecei a acessar o PHPBrasil, lendo alguns códigos e artigos, fiquei impressionado com as vantagens que as técnicas de Templates agregavam ao desenvolvimento dos meus sistemas, tanto que as utilizo para fazer quase todo tipo de projeto hoje em dia.

Bem para quem não conhece Templates, resumindo, é uma forma de separar o código php do código html, ou seja, é a camada de apresentação do seu site. O produto dessa separação, é um código mais organizado, limpo e mais fácil de efetuar manutenções.

Como histórico, comecei a trabalhar com uma classe chamada FastTemplate, que conheci lendo as matérias:

http://www.phpbrasil.com/articles/article.php/id/247
http://www.phpbrasil.com/articles/article.php/id/266

Supriu as minhas primeiras necessidades, mas tive um problema em fazer um loop dentro de outro loop usando o mesmo template. Isso é resolvido facilmente usando dois templates, mas fuçando o PHPBB, achei a classe de templates que a equipe utiliza. Percebi que ela é mais fácil e elegante de utilizar, e pasmem, ela faz loop dentro de um loop no mesmo template, passei a utilizá-la. Eu não sei como está a FastTemplate hoje em dia, mas a classe de templates do PHPBB estava me oferecendo mais vantagens. Opinião pessoal, não quero criar polêmicas.

Chega de lenga-lenga. Vamos para o que interessa, um dias desses estava cavocando a página do php.net e resolvi acessar uma das páginas oficiais que estão disponíveis no site.

http://smarty.php.net

Se você entrar na página vai ver que é uma engine de templates, no caso ela se chama Compiling PHP Template engine, que caras mais convencidos, as outras engines não se apresentam desse jeito, pensei eu na minha ignorância.

Resolvi testar. Eu fiquei meio atordoado, no caso não dormi no dia de tão empolgado, varei a noite testando os códigos do demo e da documentação, não sei se tem alguém no site doente desse jeito, mas de vez em quando isso acontece comigo.

O grande problema é que o Smarty, além de trabalhar como template convencional, ele tem as seguintes vantagens sobre as outras engines:

- faz cache de templates, quando habilitado. Esse cache também funciona associado aos mecanismos de aceleração de scripts PHP existentes por aí;
- mecanismo para comentários próprios do template, muito bom para documentação;
- tem funções pré-definidas para as marcações dos seus templates, ou seja, joga-se o dado cruzinho(sem formatação) para o template e você ou seu designer pode formatar essa dado dentro do template ex:(formatação de datas, moedas, maiúsculas e minúsculas, expressões regulares, etc). Ha!!! Você pode criar as suas funções também;
- tem estruturas condicionais, tipo if,else,ifelse e coisa e tal;
- faz debug do processo de criação de templates, quando habilitado, meio que pula um popup com tudo o que foi feito no processo, legal para o desenvolvimento;
- tem constantes do ambiente php que podem ser acessadas no template;


Agora que eu coloquei água na boca do pessoal vamos ver a estrutura do smarty...

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 (~9 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 (~12 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 (~12 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 (~12 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 (~12 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 (~12 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 (~12 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 (~13 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 (~13 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 (~13 anos atrás)

Novo Comentário:

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