O documento discute a separação entre lógica e apresentação em aplicações PHP usando o padrão Template View e a ferramenta Smarty. Apresenta as motivações para esta separação, como evitar a mistura de código e facilitar a manutenção. Explica o padrão Template View, dividindo a aplicação em Model, Helper e View e como o Smarty implementa esta separação através de templates, variáveis e funções.
1. PHP, Smarty e o
Template View Pattern
FSL - 12 de Outubro de 2007
Bruno Pedro <bpedro@computer.org>
2. FSL 2007 Bruno Pedro
Conteúdo
• Motivação
• A solução
• Template View Pattern
• Model, Helper e View
• Smarty
• Resumo
PHP, Smarty e o Template View Pattern 2
3. FSL 2007 Bruno Pedro
Motivação
É fácil misturar lógica e apresentação
PHP, Smarty e o Template View Pattern 3
4. FSL 2007 Bruno Pedro
Motivação
É muito fácil misturar lógica e apresentação
PHP, Smarty e o Template View Pattern 4
5. FSL 2007 Bruno Pedro
Motivação
Acesso ao MySQL a partir da apresentação
PHP, Smarty e o Template View Pattern 5
6. FSL 2007 Bruno Pedro
Motivação
Consumo de RSS na apresentação
PHP, Smarty e o Template View Pattern 6
7. FSL 2007 Bruno Pedro
Motivação
Spaghetti
Código difícil de manter
PHP, Smarty e o Template View Pattern 7
8. FSL 2007 Bruno Pedro
Motivação
Escapar ao Spaghetti Monster
PHP, Smarty e o Template View Pattern 8
9. 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
PHP, Smarty e o Template View Pattern 9
10. FSL 2007 Bruno Pedro
A solução
+
PHP, Smarty e o Template View Pattern 10
11. FSL 2007 Bruno Pedro
A solução
Lógica Apresentação
PHP, Smarty e o Template View Pattern 11
12. 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
PHP, Smarty e o Template View Pattern 12
13. FSL 2007 Bruno Pedro
Não é fácil
• 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 13
14. FSL 2007 Bruno Pedro
Template View Pattern
fonte: Fowler, M., Patterns of Enterprise Application Architecture, p. 350
PHP, Smarty e o Template View Pattern 14
15. 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
PHP, Smarty e o Template View Pattern 15
16. FSL 2007 Bruno Pedro
Template View Pattern
Apresentação
Lógica
<html>
<body>
Calculator Helper
12 + 5 =
sum
Calculator {$calc->sum x=12 y=5}
multiply
...
</body>
</html>
PHP, Smarty e o Template View Pattern 16
17. FSL 2007 Bruno Pedro
Model, Helper e View
Model Helper View
<html>
<body>
Calculator Helper
12 + 5 =
sum
Calculator {$calc->sum x=12 y=5}
multiply
...
</body>
</html>
PHP, Smarty e o Template View Pattern 17
18. 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
PHP, Smarty e o Template View Pattern 18
19. FSL 2007 Bruno Pedro
Model
PHP, Smarty e o Template View Pattern 19
20. 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.
PHP, Smarty e o Template View Pattern 20
21. FSL 2007 Bruno Pedro
Helper
PHP, Smarty e o Template View Pattern 21
22. 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.
PHP, Smarty e o Template View Pattern 22
23. FSL 2007 Bruno Pedro
View
PHP, Smarty e o Template View Pattern 23
24. 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.
PHP, Smarty e o Template View Pattern 24
25. FSL 2007 Bruno Pedro
Ferramentas
Apresentação
Lógica
?
<html>
<body>
Calculator Helper
12 + 5 =
sum
Calculator {$calc->sum x=12 y=5}
multiply
...
</body>
</html>
PHP, Smarty e o Template View Pattern 25
26. FSL 2007 Bruno Pedro
Porque não PHP?
• 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
PHP, Smarty e o Template View Pattern 26
27. FSL 2007 Bruno Pedro
“Make it simple,
but not simpler.”
Albert Einstein
Fonte:The Library of Congress
PHP, Smarty e o Template View Pattern 27
28. 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
PHP, Smarty e o Template View Pattern 28
29. 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
PHP, Smarty e o Template View Pattern 29
30. 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
PHP, Smarty e o Template View Pattern 30
31. FSL 2007 Bruno Pedro
Variáveis
• Passagem de variáveis que poderão ser
usadas pelo template
PHP, Smarty e o Template View Pattern 31
32. 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
PHP, Smarty e o Template View Pattern 32
33. 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
PHP, Smarty e o Template View Pattern 33
34. FSL 2007 Bruno Pedro
Modificadores
• É possível combinar modificadores
{$title|capitalize|wordwrap:10}
{$text|strip_tags|lower|truncate}
PHP, Smarty e o Template View Pattern 34
35. FSL 2007 Bruno Pedro
Funções - capture
• Grava numa variável o conteúdo que
estiver entre os tags
• Exemplo:
PHP, Smarty e o Template View Pattern 35
36. FSL 2007 Bruno Pedro
Funções - foreach
• Implementa um iterador de arrays
• Exemplo:
PHP, Smarty e o Template View Pattern 36
37. FSL 2007 Bruno Pedro
Funções - if
• Implementa uma condição
• Exemplo:
PHP, Smarty e o Template View Pattern 37
38. 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”}
PHP, Smarty e o Template View Pattern 38
39. 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}
PHP, Smarty e o Template View Pattern 39
40. 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
PHP, Smarty e o Template View Pattern 40
41. FSL 2007 Bruno Pedro
Separação
Apresentação
Lógica
<html>
<body>
Calculator Helper
12 + 5 =
sum
Calculator {$calc->sum x=12 y=5}
multiply
...
</body>
</html>
PHP, Smarty e o Template View Pattern 41
42. 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
PHP, Smarty e o Template View Pattern 42
43. FSL 2007 Bruno Pedro
Questões?
PHP, Smarty e o Template View Pattern 43
44. FSL 2007 Bruno Pedro
Mais informação
• PHP Manual: http://www.php.net/
• Smarty: http://smarty.php.net/
• DRI: http://www.dri.pt/
• O meu blog: http://unfoldingtheweb.com/
PHP, Smarty e o Template View Pattern 44