Post on 05-Dec-2014
description
PHP, Smarty e o Template View Pattern
Bruno Pedro <bpedro@computer.org>
FSL - 12 de Outubro de 2007
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
Conteúdo
• Motivação
• A solução
• Template View Pattern
• Model, Helper e View
• Smarty
• Resumo
2
FSL 2007
PHP, Smarty e o Template View Pattern
Bruno Pedro
Motivação
3
É fácil misturar lógica e apresentação
FSL 2007
PHP, Smarty e o Template View Pattern
Bruno Pedro
Motivação
4
É muito fácil misturar lógica e apresentação
FSL 2007
PHP, Smarty e o Template View Pattern
Bruno Pedro
Motivação
5
Acesso ao MySQL a partir da apresentação
FSL 2007
PHP, Smarty e o Template View Pattern
Bruno Pedro
Motivação
6
Consumo de RSS na apresentação
FSL 2007
PHP, Smarty e o Template View Pattern
Bruno Pedro
Motivação
7
Spaghetti
Código difícil de manter
FSL 2007
PHP, Smarty e o Template View Pattern
Bruno Pedro
Motivação
8
Escapar ao Spaghetti Monster
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
Motivação
• É fácil misturar lógica e apresentação
• É tentador aceder à informação a partir da apresentação
• O código torna-se confuso com o decorrer do tempo
• É complicado manter este tipo de código
9
FSL 2007
PHP, Smarty e o Template View Pattern
Bruno Pedro
A solução
10
+
FSL 2007
PHP, Smarty e o Template View Pattern
Bruno Pedro
A solução
11
ApresentaçãoLógica
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
Vantagens
• Facilita alterações à apresentação, que poderão ser frequentes
• Melhora a robustez da lógica
• Aumenta a segurança da aplicação
• Melhora o desempenho da aplicação
• Permite utilizar a mesma apresentação em diferentes aplicações
12
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
Não é fácil
13
• Exige disciplina e metodologia
• Leva tempo
• Dá vontade de voltar para trás
• Parecem sempre existir outras formas mais simples
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
Template View Pattern
14
fonte: Fowler, M., Patterns of Enterprise Application Architecture, p. 350
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
Template View Pattern
• Separação real entre lógica e apresentação
• A informação aparece nas páginas através de marcadores (tags) específicos
• Toda a lógica antes da apresentação não escreve nem devolve HTML
• Solução ideal para equipas em que existem programadores e Web designers
15
FSL 2007
PHP, Smarty e o Template View Pattern
Bruno Pedro
Template View Pattern
16
ApresentaçãoLógica
<html><body>
12 + 5 ={$calc->sum x=12 y=5}
</body></html>
Calculatorsummultiply...
Calculator Helper
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
Model, Helper e View
17
Calculatorsummultiply...
Calculator Helper
<html><body>
12 + 5 ={$calc->sum x=12 y=5}
</body></html>
Model Helper View
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
Model, Helper e View
• Divisão facilita a separação entre lógica e apresentação
• Possibilidade de delegar tarefas em cada uma das camadas a equipas diferentes
• Diminui a complexidade do código, facilitando a sua manutenção
18
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
Model
19
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
Model
• Implementa a lógica do negócio:
• acesso à informação (bases de dados);
• algoritmos específicos;
• cálculo numérico;
• acesso a Web Services.
20
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
Helper
21
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
Helper
• Implementa a lógica funcional:
• input do utilizador;
• paginação de resultados;
• adaptação e agregação de informação.
22
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
View
23
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
View
• Implementa a lógica de apresentação:
• interface com o utilizador;
• aparência e estética das páginas;
• selecção da informação a apresentar.
24
FSL 2007
PHP, Smarty e o Template View Pattern
Bruno Pedro
Ferramentas
25
ApresentaçãoLógica
<html><body>
12 + 5 ={$calc->sum x=12 y=5}
</body></html>
Calculatorsummultiply...
Calculator Helper
?
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
Porque não PHP?
26
• Proteger o template de acessos a funções potencialmente perigosas
• Permitir que o template seja manipulado por alguém com poucos conhecimentos de programação
• Evitar a tendência do código spaghetti
• Oferecer um conjunto de funcionalidades suficientes à gestão da apresentação
FSL 2007
PHP, Smarty e o Template View Pattern
Bruno Pedro
27
Fonte: The Library of Congress
“Make it simple,but not simpler.”
Albert Einstein
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
Smarty• Motor de templates com sintaxe simples
• Utiliza objectos
• Permite compilar templates, melhorando o seu desempenho
• Bastante versátil e modular
28
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
Utilização• Código pode ser obtido em
http://smarty.php.net/
• Para começar é necessário instanciar um objecto Smarty
29
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
Configurações• $smarty->template_dir: directório onde o
Smarty vai interpretar os templates
• $smarty->compile_dir: directório onde o Smarty vai gravar os templates compilados
• $smarty->cache_dir: directório onde é gravada a cache
• $smarty->caching: possibilidade de ligar ou desligar a cache
30
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
Variáveis• Passagem de variáveis que poderão ser
usadas pelo template
31
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
Variáveis
• {$var} - mostra o conteúdo da variável
• {$array[5]} - mostra o conteúdo do 5º elemento do array
• {$array.name} - mostra o conteúdo da posição ‘name’ do array
• {$obj->name} - mostra o conteúdo do atributo ‘name’ do objecto
32
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
Modificadores• {$name|capitalize}: apresenta em maiúsculas
as primeiras letras de todas as palavras
• {$today|date_format}: formata a apresentação de uma data e hora
• {$title|lower}: converte em minúsculas
• {$title|upper}: converte em maiúsculas
• {$body|wordwrap:30}: quebra um texto a uma largura específica
33
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
Modificadores
• É possível combinar modificadores
34
{$title|capitalize|wordwrap:10}
{$text|strip_tags|lower|truncate}
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
Funções - capture• Grava numa variável o conteúdo que
estiver entre os tags
• Exemplo:
35
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
Funções - foreach
• Implementa um iterador de arrays
• Exemplo:
36
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
Funções - if• Implementa uma condição
• Exemplo:
37
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
Funções - include
• Inclui outro ficheiro Smarty
• O outro ficheiro é interpretado
• Todas as variáveis ficam disponíveis no ficheiro incluido
• Exemplo:
{include file=”ficheiro2.html”}
38
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
Funções - literal• Permite não interpretar um bloco de
código
• Bastante útil quando temos JavaScript dentro dos templates
{literal}
Este bloco não é interpretado.
{/literal}
39
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
Outras funcionalidades
• Muitos outros modificadores e funções
• Caching parcial e dependente de identificador
• Configurações de segurança
• Filtros de templates
• Extensível através de plugins
40
FSL 2007
PHP, Smarty e o Template View Pattern
Bruno Pedro
Separação
41
ApresentaçãoLógica
<html><body>
12 + 5 ={$calc->sum x=12 y=5}
</body></html>
Calculatorsummultiply...
Calculator Helper
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
Resumo
• Separação entre lógica e apresentação
• Motivação - os problemas
• A solução
• Template View Pattern
• Model, Helper e View
• Smarty
42
FSL 2007
PHP, Smarty e o Template View Pattern
Bruno Pedro
Questões?
43
PHP, Smarty e o Template View Pattern
FSL 2007 Bruno Pedro
Mais informação
44
• PHP Manual: http://www.php.net/
• Smarty: http://smarty.php.net/
• DRI: http://www.dri.pt/
• O meu blog: http://unfoldingtheweb.com/