Smarty Template Engine

37

description

Palestra sobre a utilização de Smarty Template em projetos PHP

Transcript of Smarty Template Engine

Page 1: Smarty Template Engine
Page 2: Smarty Template Engine

Diego Tremper Zend Certified Engineer Entusiasta PHP Palestrante Estudante

Page 3: Smarty Template Engine

Cenário

Solução

Benefícios

Smarty Template

Sintaxe

Instalação

Configuração

Variáveis

Modificadores de Variáveis

Funções

Demonstração prática

Conclusão

Page 4: Smarty Template Engine

Padrão Espaguete

Page 5: Smarty Template Engine

Padrão Espaguete

Page 6: Smarty Template Engine

Padrão Espaguete

Wikipédia: http://pt.wikipedia.org/wiki/Código_espaguete

“Qualifica-se de código espaguete um programa de computador

que não segue as regras da programação estruturada e abusa de

desvios, condicionais ou não, o que torna a leitura do mesmo por

seres humanos bem difícil.”

Page 7: Smarty Template Engine

Lógica

• Lógicas de negócio

• Acesso a dados

Apresentação

• Html

• Design

Page 8: Smarty Template Engine

Torna o código mais legível

Útil para equipes que possuem designers e

programadores

Reduz o esforço utilizado para fazer alterações

no código (tanto na apresentação quanto na

lógica)

Torna mais fácil o reaproveitamento de código

Page 9: Smarty Template Engine

Biblioteca escrita em PHP que possibilita

fazer a separação entre a lógica de negócio e

a camada de apresentação

Page 10: Smarty Template Engine

Como funciona?

O Smarty separa a apresentação em templates

Templates podem ser organizados de maneira

hierárquica

▪ um template pode incluir outro

O Smarty “mistura” as variáveis da aplicação no

template , gerando o código para a visualização

Page 11: Smarty Template Engine

Exemplo

Index.tpl

<html><head><title>{$titulo}</title></head><body>

<h1>Seja bem vindo {$nome}!</h1></body></html>

Variáveis

Page 12: Smarty Template Engine

Exemplo

Index.php

<?php

// . . .$smarty->assign(‘nome’, ‘Diego’);$smarty->assign(‘titulo’, ‘Página de boas vindas’);$smarty->display(‘index.tpl’);// . . .

Page 13: Smarty Template Engine

Variáveis

Smarty

Index.tpl

<?php /* Smarty version 2.6.20, created on 2008-10-14 21:45:22

compiled from lista.tpl */ ?><html><head><title><?php echo $this->_tpl_vars['titulo']; ?></title></head><body><h1>Seja bem vindo <?php echo $this->_tpl_vars['nome']; ?>!</h1></body></html>

Compilação

Page 14: Smarty Template Engine

<?php /* Smarty version 2.6.20, created on 2008-10-14 21:45:22

compiled from lista.tpl */ ?><html><head><title><?php echo $this->_tpl_vars['titulo']; ?></title></head><body><h1>Seja bem vindo <?php echo $this->_tpl_vars['nome']; ?>!</h1></body></html>

Código gerado pelo Smarty

<html><head><title>Página de boas vindas</title></head><body><h1>Seja bem vindo Diego!</h1></body></html>

Após execução do PHP

Page 15: Smarty Template Engine

Sintaxe

Todas as tags de template do Smarty contém delimitadores. Por padrão, estes delimitadores são { e }, mas eles podem ser alterados.

<html><head><title>{$titulo}</title></head><body>

<h1>Seja bem vindo {$nome}!</h1></body></html>

Tags HTMLTags Smarty

Page 16: Smarty Template Engine

Comentários

Os comentários do template ficam entre asteriscos dentro de delimitadores

{* mostra título da página *}<title>{$titulo}</title><boby>

{* exibe combobox *}<select>

<option>Selecione ..</option></select>

</body></html>

Page 17: Smarty Template Engine

Configuração

Após descompactar os arquivos do Smart

▪ Incluir o arquivo principal da biblioteca

▪ Criar uma instância da classe Smarty

require 'Smarty.class.php';

$smarty = new Smarty;

Page 18: Smarty Template Engine

Configuração

É necessário dizer onde estarão os diretórios queo Smarty utilizará

// . . .$smarty->template_dir = '/diretorio/templates/';$smarty ->compile_dir = '/diretorio/templates_c/';$smarty ->config_dir = '/diretorio/';$smarty ->cache_dir = '/diretorio/cache/';// . . .

Page 19: Smarty Template Engine

Variáveis

Para utilizar as variáveis dentro do template é necessário fazer a atribuição das mesmas

A atribuição de variáveis pode ser feita através do método Smart::assign()

$smarty->assign(‚nome_variavel", $valor);

Page 20: Smarty Template Engine

Variáveis (cont..)

require 'Smarty.class.php';

$smarty = new Smarty;

$valor = 10;

$smarty->assign(‚nome_variavel", $valor);

$smarty->display('index.tpl');

O valor da variável é: {$nome_variavel}

index.tpl

Page 21: Smarty Template Engine

Variáveis (cont..)

{* exibe uma variável *}{$variavel}

{* exibe o terceiro elemento de uma matriz *}{$matriz[3]}

{* exibe o elemento ‚nome‛ de uma matriz *}{$matriz.nome}

Page 22: Smarty Template Engine

Funções

Funções são processadas e exibidas colocando-se a função e seus atributos entre delimitadores.

{* Exemplo *}{nome_funcao atributo1=‚valor 1‛ atributo2=$variavel}

{* include template *}{include file=‚cabecalho.tpl‛}

{* alterna as cores: branca e cinza *}{cycle values=‚#fff,#e5e5e5‛}

Page 23: Smarty Template Engine

Funções internas

Funções internas são parte integral da linguagem

de template. Você não pode criar funções

personalizadas com o mesmo nome de uma

função interna, e também não pode modificar

funções internas.

foreach,foreachelse,include,literal,if,elseif,else…

Page 24: Smarty Template Engine

Funções internas - foreach

{* este exemplo irá mostrar todos os valores da matriz $custid *}{foreach from=$nomes_empregados item=nome}Nome: {$nome}<br>{/foreach}

foreach ($nomes_empregados as $nome) {echo ‚Nome: ‛ . $nome . ‚<br>‛;

}

Semelhante:

Page 25: Smarty Template Engine

Funções internas - if

{if $nome == "Diego"}Bem vindo {$nome}!

{elseif $nome == "Andre"}Bom dia professor {$nome}!

{else}Bom dia senhor {$nome}

{/if}

{if $nome == " Diego" || $nome == " Andre "}. . .{/if}

Page 26: Smarty Template Engine

Funções internas - include

{* inclue o template cabecalho.tpl *}{include file="cabecalho.tpl"}

{* usando o caminho absoluto *}{include file="file:C:/local/meus/templates/cabecalho.tpl"}

Page 27: Smarty Template Engine

Funções personalizadas

O Smarty possui várias funções personalizadas

que você pode usar em seus templates.

Estas funções normalmente estão disponíveis

dentro do diretório plugins do Smarty

assign, counter,cycle,

Page 28: Smarty Template Engine

Funções personalizadas – html_options

<select name=‚cidades‛>{html_options options=$cidades

selected=$cidade_selecionada}</select>

OUTPUT:<select name=‚cidades‛><option value="1000">Alegrete</option><option value="1001">Canoas</option><option value="1002">Erechim</option><option value="1003" selected="selected">Porto Alegre</option></select>

Page 29: Smarty Template Engine

Funções personalizadas – mailto

{mailto address="[email protected]"}

OUTPUT:<a href="mailto:[email protected]">[email protected]</a>

{mailto address="[email protected]" text=‚contato"}

OUTPUT:<a href="mailto:[email protected]">contato</a>

Page 30: Smarty Template Engine

Modificadores de variáveis

Permitem a modificação de variáveis, funções ou strings

{* Faz o título ficar com letras maiúsculas *}<h2>{$titulo|upper}</h2><h3>{‚SUBTITULO DA PAGINA‛|lower}</h3>

{* Faz com que $topico use somente 40 caracteres, e coloca ... no fim da frase *}Tópico: {$topico|truncate:40:"..."}

Page 31: Smarty Template Engine

Modificadores de variáveis (cont…)

É possível também aninhar modificadores

{‚Diego‛|cat:‛ Tremper‛|upper}

OUTPUT:DIEGO TREMPER

Page 32: Smarty Template Engine

Modificadores de variáveis (cont…)

Outros modificadores…

{* Substitui Brasilia por Porto Alegre *}{‚Em Brasilia 19 horas‛|replace:‛Brasilia‛:‛Porto Alegre‚}{* Ex.: Em Porto Alegre 19 horas *}

{* Adiciona espaços entre cada caractere *}{‚Em Brasilia 19 horas‛|spacify}{* Ex.: E m B r a s i l i a 1 9 h o r a s*}

Page 33: Smarty Template Engine

Demonstração Prática

Page 34: Smarty Template Engine

Existem alternativas para manter a

organização em seu código

Separar a lógica de apresentação da lógica de

negócio é uma das mais básicas

Não é fácil! Mas com o tempo acaba virando

um costume

Page 35: Smarty Template Engine

Perguntas?

Page 36: Smarty Template Engine

Obrigado!!!

Contato: [email protected]: http://www.linkedin.com/in/diegotremper

Blog: http://www.diegotremper.com

Page 37: Smarty Template Engine

Smarty: http://www.smarty.net/ PHP: http://www.php.net