SlideShare una empresa de Scribd logo
1 de 44
Descargar para leer sin conexión
PHP, Smarty e o
Template View Pattern

    FSL - 12 de Outubro de 2007
    Bruno Pedro <bpedro@computer.org>
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
FSL 2007                                      Bruno Pedro




                            Motivação




           É fácil misturar lógica e apresentação


PHP, Smarty e o Template View Pattern   3
FSL 2007                                    Bruno Pedro




                            Motivação




    É muito fácil misturar lógica e apresentação


PHP, Smarty e o Template View Pattern   4
FSL 2007                                    Bruno Pedro




                            Motivação




    Acesso ao MySQL a partir da apresentação

PHP, Smarty e o Template View Pattern   5
FSL 2007                                    Bruno Pedro




                            Motivação




              Consumo de RSS na apresentação

PHP, Smarty e o Template View Pattern   6
FSL 2007                                           Bruno Pedro




                            Motivação


                                  Spaghetti



                        Código difícil de manter

PHP, Smarty e o Template View Pattern   7
FSL 2007                                           Bruno Pedro




                            Motivação




                    Escapar ao Spaghetti Monster

PHP, Smarty e o Template View Pattern   8
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
FSL 2007                                     Bruno Pedro




                             A solução


                                        +

PHP, Smarty e o Template View Pattern   10
FSL 2007                                           Bruno Pedro




                             A solução


        Lógica                               Apresentação



PHP, Smarty e o Template View Pattern   11
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
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
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
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
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
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
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
FSL 2007                                     Bruno Pedro




                                    Model




PHP, Smarty e o Template View Pattern   19
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
FSL 2007                                     Bruno Pedro




                                   Helper




PHP, Smarty e o Template View Pattern   21
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
FSL 2007                                       Bruno Pedro




                                        View




PHP, Smarty e o Template View Pattern    23
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
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
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
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
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
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
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
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
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
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
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
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
FSL 2007                                     Bruno Pedro




             Funções - foreach
  • Implementa um iterador de arrays
  • Exemplo:




PHP, Smarty e o Template View Pattern   36
FSL 2007                                     Bruno Pedro




                         Funções - if
  • Implementa uma condição
  • Exemplo:




PHP, Smarty e o Template View Pattern   37
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
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
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
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
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
FSL 2007                                     Bruno Pedro




                           Questões?




PHP, Smarty e o Template View Pattern   43
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

Más contenido relacionado

Destacado

Net beans 7.4 Funções e Atalhos
Net beans 7.4 Funções e AtalhosNet beans 7.4 Funções e Atalhos
Net beans 7.4 Funções e Atalhosandreandrade17
 
Apostila programação visual usando java e netbeans
Apostila programação visual usando java e netbeansApostila programação visual usando java e netbeans
Apostila programação visual usando java e netbeansGeorge Dantas
 
Apostila PhP com Wamp, 2a. parte
Apostila PhP com Wamp, 2a. parteApostila PhP com Wamp, 2a. parte
Apostila PhP com Wamp, 2a. parteIlton Barbosa
 
Php e mysql aplicacao completa a partir do zero
Php e mysql   aplicacao completa a partir do zeroPhp e mysql   aplicacao completa a partir do zero
Php e mysql aplicacao completa a partir do zeroFred Ramos
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX Sérgio Souza Costa
 
Curso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoCurso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoLuiz Junior
 

Destacado (8)

Net beans 7.4 Funções e Atalhos
Net beans 7.4 Funções e AtalhosNet beans 7.4 Funções e Atalhos
Net beans 7.4 Funções e Atalhos
 
Apostila programação visual usando java e netbeans
Apostila programação visual usando java e netbeansApostila programação visual usando java e netbeans
Apostila programação visual usando java e netbeans
 
Apostila PhP com Wamp, 2a. parte
Apostila PhP com Wamp, 2a. parteApostila PhP com Wamp, 2a. parte
Apostila PhP com Wamp, 2a. parte
 
L17 Presentation Layer Design
L17 Presentation Layer DesignL17 Presentation Layer Design
L17 Presentation Layer Design
 
Php e mysql aplicacao completa a partir do zero
Php e mysql   aplicacao completa a partir do zeroPhp e mysql   aplicacao completa a partir do zero
Php e mysql aplicacao completa a partir do zero
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX
 
Javascript para adultos
Javascript para adultosJavascript para adultos
Javascript para adultos
 
Curso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoCurso de PHP Básico ao Avançado
Curso de PHP Básico ao Avançado
 

Similar a Separando lógica e apresentação com PHP e Smarty

Lampada Php Conference Brasil 2007 Palestra
Lampada Php Conference Brasil 2007 PalestraLampada Php Conference Brasil 2007 Palestra
Lampada Php Conference Brasil 2007 PalestraDavid O'Keefe
 
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018 O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018 Gabriel Machado
 
Treinamentos Avançados em Informática
Treinamentos Avançados em InformáticaTreinamentos Avançados em Informática
Treinamentos Avançados em InformáticaEder Carneiro
 
Introdução à Programação Gráfica com Processing
Introdução à Programação Gráfica com ProcessingIntrodução à Programação Gráfica com Processing
Introdução à Programação Gráfica com Processingelliando dias
 
Domain Driven Design PHP TDC2014
Domain Driven Design PHP TDC2014Domain Driven Design PHP TDC2014
Domain Driven Design PHP TDC2014Paulo Victor Gomes
 
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...Pablo Dall'Oglio
 
Webinar: Conhecendo a solução Pentaho, líder em Business Analytics
Webinar: Conhecendo a solução Pentaho, líder em Business AnalyticsWebinar: Conhecendo a solução Pentaho, líder em Business Analytics
Webinar: Conhecendo a solução Pentaho, líder em Business AnalyticsRicardo Gouvêa
 
Design for change: Fatores que influenciam na longevidade de um Software PHP
Design for change: Fatores que influenciam na longevidade de um Software PHPDesign for change: Fatores que influenciam na longevidade de um Software PHP
Design for change: Fatores que influenciam na longevidade de um Software PHPPablo Dall'Oglio
 
Criando relatórios com PHP - PHP Conference Brasil 2013
Criando relatórios com PHP - PHP Conference Brasil 2013Criando relatórios com PHP - PHP Conference Brasil 2013
Criando relatórios com PHP - PHP Conference Brasil 2013Pablo Dall'Oglio
 
The Ultimate Guide to Development in WordPress
The Ultimate Guide to Development in WordPressThe Ultimate Guide to Development in WordPress
The Ultimate Guide to Development in WordPressJackson F. de A. Mafra
 
Aula 3 desenvolvimento de projetos
Aula 3 desenvolvimento de projetosAula 3 desenvolvimento de projetos
Aula 3 desenvolvimento de projetosThiago Cetroni
 
Curitiba treinamentos corporativos
Curitiba treinamentos corporativosCuritiba treinamentos corporativos
Curitiba treinamentos corporativosMultimidia e Arte
 

Similar a Separando lógica e apresentação com PHP e Smarty (20)

Design Patterns com PHP
Design Patterns com PHPDesign Patterns com PHP
Design Patterns com PHP
 
Lampada Php Conference Brasil 2007 Palestra
Lampada Php Conference Brasil 2007 PalestraLampada Php Conference Brasil 2007 Palestra
Lampada Php Conference Brasil 2007 Palestra
 
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018 O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
 
Treinamentos Avançados em Informática
Treinamentos Avançados em InformáticaTreinamentos Avançados em Informática
Treinamentos Avançados em Informática
 
Cursos Season
Cursos SeasonCursos Season
Cursos Season
 
Cursos Season
Cursos Season Cursos Season
Cursos Season
 
Introdução à Programação Gráfica com Processing
Introdução à Programação Gráfica com ProcessingIntrodução à Programação Gráfica com Processing
Introdução à Programação Gráfica com Processing
 
Domain Driven Design PHP TDC2014
Domain Driven Design PHP TDC2014Domain Driven Design PHP TDC2014
Domain Driven Design PHP TDC2014
 
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...
 
Minicurso zend
Minicurso zendMinicurso zend
Minicurso zend
 
Webinar: Conhecendo a solução Pentaho, líder em Business Analytics
Webinar: Conhecendo a solução Pentaho, líder em Business AnalyticsWebinar: Conhecendo a solução Pentaho, líder em Business Analytics
Webinar: Conhecendo a solução Pentaho, líder em Business Analytics
 
Design for change: Fatores que influenciam na longevidade de um Software PHP
Design for change: Fatores que influenciam na longevidade de um Software PHPDesign for change: Fatores que influenciam na longevidade de um Software PHP
Design for change: Fatores que influenciam na longevidade de um Software PHP
 
Criando relatórios com PHP - PHP Conference Brasil 2013
Criando relatórios com PHP - PHP Conference Brasil 2013Criando relatórios com PHP - PHP Conference Brasil 2013
Criando relatórios com PHP - PHP Conference Brasil 2013
 
The Ultimate Guide to Development in WordPress
The Ultimate Guide to Development in WordPressThe Ultimate Guide to Development in WordPress
The Ultimate Guide to Development in WordPress
 
PHP: Como não programar em POG
PHP: Como não programar em POGPHP: Como não programar em POG
PHP: Como não programar em POG
 
Apostila powerpointxp
Apostila powerpointxpApostila powerpointxp
Apostila powerpointxp
 
CakePHP
CakePHPCakePHP
CakePHP
 
PHP e banco de dados
PHP e banco de dadosPHP e banco de dados
PHP e banco de dados
 
Aula 3 desenvolvimento de projetos
Aula 3 desenvolvimento de projetosAula 3 desenvolvimento de projetos
Aula 3 desenvolvimento de projetos
 
Curitiba treinamentos corporativos
Curitiba treinamentos corporativosCuritiba treinamentos corporativos
Curitiba treinamentos corporativos
 

Más de Bruno Pedro

What are Web APIs
What are Web APIsWhat are Web APIs
What are Web APIsBruno Pedro
 
Growing your business with an API
Growing your business with an APIGrowing your business with an API
Growing your business with an APIBruno Pedro
 
Product growth with an API
Product growth with an APIProduct growth with an API
Product growth with an APIBruno Pedro
 
How to grow your business with an API
How to grow your business with an APIHow to grow your business with an API
How to grow your business with an APIBruno Pedro
 
APIs Love to Chat
APIs Love to ChatAPIs Love to Chat
APIs Love to ChatBruno Pedro
 
How to Automate API Testing
How to Automate API TestingHow to Automate API Testing
How to Automate API TestingBruno Pedro
 
Asynchronous Microservices in nodejs
Asynchronous Microservices in nodejsAsynchronous Microservices in nodejs
Asynchronous Microservices in nodejsBruno Pedro
 
How to Automate API Discovery
How to Automate API DiscoveryHow to Automate API Discovery
How to Automate API DiscoveryBruno Pedro
 
Api Design & The Paris Subway
Api Design & The Paris SubwayApi Design & The Paris Subway
Api Design & The Paris SubwayBruno Pedro
 
The importance of /me
The importance of /meThe importance of /me
The importance of /meBruno Pedro
 
Maintainable consumers
Maintainable consumersMaintainable consumers
Maintainable consumersBruno Pedro
 
API Code Generation
API Code GenerationAPI Code Generation
API Code GenerationBruno Pedro
 
Bridging the Gap Between APIs and Customers
Bridging the Gap Between APIs and CustomersBridging the Gap Between APIs and Customers
Bridging the Gap Between APIs and CustomersBruno Pedro
 
Who's using your API?
Who's using your API?Who's using your API?
Who's using your API?Bruno Pedro
 
Is OAuth Really Secure?
Is OAuth Really Secure?Is OAuth Really Secure?
Is OAuth Really Secure?Bruno Pedro
 
Link extraction and classification
Link extraction and classificationLink extraction and classification
Link extraction and classificationBruno Pedro
 
tarpipe WordPress plugin demo
tarpipe WordPress plugin demotarpipe WordPress plugin demo
tarpipe WordPress plugin demoBruno Pedro
 
Everything OAuth
Everything OAuthEverything OAuth
Everything OAuthBruno Pedro
 

Más de Bruno Pedro (20)

What are Web APIs
What are Web APIsWhat are Web APIs
What are Web APIs
 
Growing your business with an API
Growing your business with an APIGrowing your business with an API
Growing your business with an API
 
Product growth with an API
Product growth with an APIProduct growth with an API
Product growth with an API
 
How to grow your business with an API
How to grow your business with an APIHow to grow your business with an API
How to grow your business with an API
 
APIs Love to Chat
APIs Love to ChatAPIs Love to Chat
APIs Love to Chat
 
How to Automate API Testing
How to Automate API TestingHow to Automate API Testing
How to Automate API Testing
 
Asynchronous Microservices in nodejs
Asynchronous Microservices in nodejsAsynchronous Microservices in nodejs
Asynchronous Microservices in nodejs
 
How to Automate API Discovery
How to Automate API DiscoveryHow to Automate API Discovery
How to Automate API Discovery
 
Api Design & The Paris Subway
Api Design & The Paris SubwayApi Design & The Paris Subway
Api Design & The Paris Subway
 
The importance of /me
The importance of /meThe importance of /me
The importance of /me
 
Maintainable consumers
Maintainable consumersMaintainable consumers
Maintainable consumers
 
API Code Generation
API Code GenerationAPI Code Generation
API Code Generation
 
Bridging the Gap Between APIs and Customers
Bridging the Gap Between APIs and CustomersBridging the Gap Between APIs and Customers
Bridging the Gap Between APIs and Customers
 
Who's using your API?
Who's using your API?Who's using your API?
Who's using your API?
 
node-fs
node-fsnode-fs
node-fs
 
Is OAuth Really Secure?
Is OAuth Really Secure?Is OAuth Really Secure?
Is OAuth Really Secure?
 
Link extraction and classification
Link extraction and classificationLink extraction and classification
Link extraction and classification
 
tarpipe WordPress plugin demo
tarpipe WordPress plugin demotarpipe WordPress plugin demo
tarpipe WordPress plugin demo
 
OAuth checklist
OAuth checklistOAuth checklist
OAuth checklist
 
Everything OAuth
Everything OAuthEverything OAuth
Everything OAuth
 

Separando lógica e apresentação com PHP e Smarty

  • 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