+3

Trabalhando com templates Smarty

criado por Flávio Gonçalves Garcia em 25/10/2003 10:12pm
Agora vamos ver a ótica do template em si.

Lembra-se da pasta configs? Pois é ela vai conter o arquivo test.conf, que nada mais nada menos é um arquivo de inicialização.

title = Welcome to Smarty!
cutoff_size = 40

[setup]
bold = true

Ele tem o título o uma variável que vai setar algumas partes do layout e uma seção setup que terá o bold = true.

Esse arquivinho é bem bacana. Estou usando xml para configurações em meus projetos, mas talvez até use ele para algumas coisas.

O importante é que ele agrega valor, fica bem documentado, você sabe onde está as configurações.

Template da aplicação demo:

Início:
------ template ------
{* os comentários no template são feitos usando essa sintaxe *}

{* carregando o arquivo test.conf e a sessão setup que foi declarada no arquivo *}
{config_load file=test.conf section="setup"}

{* fazendo um include de um outro template no arquivo *}
{include file="header.tpl" title=foo}
------ fim template ------

obs: as marcações de template e fim template não fazem parte do arquivo, é só para separar do texto da matéria.

Eu não vou entrar em detalhes sobre os arquivos header.tpl e footer.tpl, eles são muitos simples. Agora essa funcionalidade é bem interessante, quando você for estudar o exemplo verifique esses arquivos, façam testes, porque quebra um galhão jogar os includes para o template.

Instruções:

{* exemplo de if beleza, se o bold da sessão estiver setado como true, ele vai ficar bold, se não ele vai ignorar. *}
{if #bold#}{/if}
{* pegando o título que está setado no arquivo de configuração, note que tem um | captalize, essa função vai colocar todas as primeiras letras de cada palavra da string passada em maiúscula *}
Title: {#title#|capitalize}
{if #bold#}{/if}

{*exemplo de variáveis de ambiente do smarty, note que ele pega smarty.now, e formata a data*}
A data e hora atual: {$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"}

{* jogando o nome da página *}
Valor global atribuido à variável: $SCRIPT_NAME é {$SCRIPT_NAME}

{* Outro exemplo de variáveis de ambiente, agora acessando uma variável de ambiente de servidor *}
Acessando variável de ambiente servidor SERVER_NAME: {$smarty.server.SERVER_NAME}

{*{ldelim} e {rdelim} vai imprimir {} por output é uma forma literal de escrever as chaves, esse comentário provavelmente vai dar pau, portanto apague de seu código se você for testá-lo *}
O valor de {ldelim}$Name{rdelim} é {$Name}

exemplo de variável modificadora {ldelim}$Name|upper{rdelim}

{$Name|upper}{* Jogando a variável $Name que foi passada na index.php para a maiúscula *}

{* Trabalhando o loop com os arrays firstname e lastname*}
Um exemplo de loop:

{section name=outer loop=$FirstName}
{if %outer.index% is odd by 2}
    {%outer.rownum%} . {$FirstName[outer]} {$LastName[outer]}
{else}
    {%outer.rownum%} * {$FirstName[outer]} {$LastName[outer]}
{/if}
{sectionelse}
    none
{/section}
{* trabalhando o loop com aquele array que tinha os ultimos valores representados por nomes *}
An example of section looped key values:

{section name=sec1 loop=$contacts}
    phone: {$contacts[sec1].phone}<br>
    fax: {$contacts[sec1].fax}<br>
    cell: {$contacts[sec1].cell}<br>
{/section}
<p>
{* vai tirar os carriage returns de tudo que está dentro da tags, o output, vai ficar todo na mesma linha*}
testing strip tags
{strip}
<table border=0>
    <tr>
        <td>
            <A HREF="{$SCRIPT_NAME}">
                <font color="red">This is a  test     </font>
            </A>
        </td>
    </tr>
</table>
{/strip}

This is an example of the html_select_date function:

{* gerando 3 selects com mes ano e data de 1998 a 2010 *}
<form>
{html_select_date start_year=1998 end_year=2010}
</form>

This is an example of the html_select_time function:
{* mesma coisa mas para horas *}
<form>
{html_select_time use_24_hours=false}
</form>

This is an example of the html_options function:

{* gerando o output daquelas funções de select que estavam  na página index.php *}
<form>
    <select name=states>
        {html_options values=$option_values selected=$option_selected output=$option_output}
    </select>
</form>
{* include do rodapé *}
{include file="footer.tpl"}

Beleza, eu não vou demonstrar o output, porque você pode fazer o teste no seu ambiente de desenvolvimento, vai ser uma boa experiência, a intenção mesmo é deixar já tudo mastigadinho para você não ter surpresas.

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 (~19 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 (~20 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 (~20 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 (~20 anos atrás)

Novo Comentário:

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