Introdução ao Smarty Sapo Sessions 2009 Nelson Gomes [email_address] ZCE / ITIL V3 Foundation
Agenda Introdução Instalação Templates Configuração Debugging MVC Caching Segurança Tuning Novidades Conclusão Q&A
Introdução: o que é e para que serve? Motor de Templating para PHP. Permite separar a apresentação da lógica, facilitando a reutilização do código e das páginas. Fornece aos designers uma linguagem simplificada para trabalhar. Permite usar templates como funções (passar argumentos a um template). Fornece mecanismos de cache, display e de output.
Introdução: quem usa Smarty? Zend. OpenX. Xcart. XOOPS CMS. P4A  –  PHP for Applications. PHPBugTracker. Se eles usam, alguma razão devem ter...
Introdução: comparativo entre usar e não usar Smarty? O OsCommerce é um MAU exemplo de como não se deve usar PHP (exemplo01.php). Vendem-se templates para OsCommerce, nos quais a lógica da aplicação é completamente subvertida. Tal subversão acontece porque não houve uma separação código-apresentação.
Conclusão: uma confusão! Lógica e apresentação inutilizáveis. Código ilegível e de difícil manutenção. Não existe separação entre código e apresentação. ( … ) más práticas! É exactamente neste ponto que o Smarty dá o seu contributo!
Instalação: estrutura Smarty Uma instalação Smarty tem tipicamente, as seguintes pastas: /templates  –  pasta de templates; /templates_c  –  pasta de templates compilados; /configs  –  pasta de configuração; /cache  –  pasta de cache; /plugins_dir  –  pasta de plugins. Todos estes defaults são modificáveis!
Instalação: estrutura Smarty Pastas como as de cache e de templates compilados necessitam de permissões de escrita para o Smarty funcionar. Para customizar as pastas: $smarty->template_dir = TEMPLATES_DIR; $smarty->compile_dir = COMPILE_DIR; $smarty->config_dir = CONFIG_DIR; $smarty->cache_dir = CACHE_DIR;
Templates: output do Template O 'Hello World' em Smarty (exemplo02.php). Como alterar as pastas por defeito (exemplo03.php). Output directo VS output controlado: $smarty->display('helloworld.tpl'); echo $smarty->fetch('helloworld.tpl'); Ter acesso ao output facilita a sua colocação em cache (FS, memcached, MySQL, ...).
Templates: variáveis Smarty Variáveis disponibilizadas pelo Smarty: (exemplo04.php): {$smarty.now} {$smarty.const}  –  acesso a constantes PHP. {$smarty.capture}  –  variável com o conteúdo de um bloco capturado {capture}{/capture}. {$smarty.conf}  –  iremos falar mais à frente. {$smarty.template}  –  template corrente. {$smarty.get}, {$smarty.post}, {$smarty.request}, {$smarty.cookie} {$smarty.env}, {$smarty.server}
Templates: passagem variáveis Passagem de variáveis a um template (exemplo04_1.php): $smarty->assign('nome', $valor); Ao contrário das variáveis disponibilizadas pelo Smarty estas são acedidas directamente pelo nome. Podem ser passados tipos simples, arrays ou objectos.
Templates: funções Funções em Smarty são representadas por tags Smarty, e facilitam tarefas frequentes. Têm argumentos como qualquer função. Podem ser adicionadas novas funções. {assign}, {counter}, {fetch}, {htmlimage}, {mailto}, {popup}, {math}, {mailto}, (...) {image file="/path/from/pumpkin.jpg"} {assign var="name" value="Bob"} {fetch file="http://www.weather.pt" assign="weather"} {math equation="(( x + y ) / z )" x=2 y=10 z=2} {mailto address=" [email_address] " encode="hex"}
Templates: modificadores Modificadores Smarty permitem transformar a apresentação dos dados. O Smarty tem um conjunto de modifiers substancial, sendo no entanto, expansíveis. Os modifiers são semelhantes aos pipes Unix, são concatenáveis e podem ter argumentos: { “ Exemplo Modifier ” |lower|truncate:30|spacify} {$number|string_format:"%.2f"} {$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"}
Templates: modifiers Alguns modifiers disponíveis: capitalize (primeira maiúscula) count_caracters count_caracters cat (concatena) count_paragraphs count_sentences count_words date_format default (valor p defeito de uma var) escape indent (indenta o texto) lower nl2br regexp_replace replace spacify string_format strip strip_tags truncate upper wordwrap
Templates: novos modifiers Exemplo modifier.sapo.php: <?php function smarty_modifier_sapo($string) { return str_replace('google','sapo', $string); } ?> { “ o google é o maior ” |sapo} Basta colocá-los na pasta de plugins para ficarem disponíveis.
Configuração Ficheiros de configuração Smarty permitem usar conteúdos em larga escala. Podem ser usado para parametrizar páginas com conteúdos ou funcionalidades, mas pode também ser usado para conteúdos estáticos. Evitam a necessidade de ter uma base de dados. Os dados destes ficheiros são acessíveis dentro dos templates directamente:  {config_load}  e  {$smarty.conf}  (exemplo06.php)
Templates  –  Funções Comuns Outras funções/tags usadas em Smarty {* comentários *} {literal}{/literal} {php} {/php} {if} {else} {/if} {foreach} {/foreach} {include} {configload} {includephp} {strip}{/strip}
Templates  –  {* comentários *} Quando compilados são removidos tornando o resultado final mais pequeno. São mais seguros que os comentários HTML que passam informação para o browser. Devem ser usados para documentar a implementação do template.
Templates  –  {literal}{/literal} Tags literal usadas para forçar o output de algo que pudesse ser confundido com tags Smarty (JS, CSS). Para incluir no output as próprias tags Smarty que de outra forma não seria possível. Para dizer ao Smarty para fazer o output sem parsing.
Templates  –  {php}{/php} Permitem a colocação de código PHP dentro dos templates. Deve evitar-se: Código dentro dos templates; Funções dentro de templates; Manter a separação apresentação-lógica. Quando necessário pode-se extender o próprio Smarty: Criando novas tags Smarty; Acrescentando modifiers.
Templates  –  {if}{else}{/if} Permitem dar lógica aos templates de acordo com os dados: Esconder conteúdos de acordo com a lógica de negócio; Mostrar conteúdos a utilizadores logados VS não logados por exemplo: {if $gender eq &quot;male&quot;} Exmo. Sr. {else} Exma. Sra. {/if}
Templates  –  {foreach}{/foreach} Permite iterar sobre arrays de dados; Pode ser recursivo (array de arrays) ; {foreach from=$smarty.server item=arr key=nom} {foreach from=$arr item=valor key=nome} {$nome}={$valor} {/foreach} {/foreach} Pode ser um array de objectos. {$valor->getNome()}
Templates  –  {include} Permite incluir outros templates dentro do template. Permite a passagem de variáveis aos templates incluídos. Permite a inclusão de partes comuns a todas as páginas, facilitando a gestão da apresentação de um site (exemplo07.php). {include file= ” exemplo.tpl ”  title= ” Exemplo de tabela ”  bgcolor= ” #FF0000 ” }
Debugging O Smarty tem uma ferramenta de debug. Esta ferramenta de debug não é mais do que um... template (debug.tpl), que pode ser substituído por outro à medida. Como se usa (exemplo07.php)? $smarty->debugging=true; Podendo assim analisar de perto o que o Smarty está a fazer, e quanto tempo demorou a fazê-lo.
Model-View-Controller Pattern de desenvolvimento que tenta separar a lógica de negócio, os dados e a apresentação. Tem como objectivos principais: a reutilização do código; redução da complexidade subjacente. Smarty pode ser usado com Frameworks MVC para PHP: Zend Framework, LightVC, Symfony, (...). Ou podemos simplesmente criar a nossa.
Smarty em MVC Processar o pedido Web (Model). Identificar o fluxo decorrente do processamento do pedido (Controller). Obter dados necessários à página a ser gerada. Libertar a sessão. Fazer o display da página (View).
Caching O Smarty por defeito não faz caching. A cache deve ser usada com bom senso: Fazer caches muito pequenas não compensa; Páginas com dados pessoais não podem usar cache directamente, podem usar caches parciais; O TTL (time to live) da cache deve ser um compromisso sobre o tempo que é aceitável ter um conteúdo desactualizado.
Caching A cache é tão útil quanto maior for o número de acessos: Sites com poucos hits pouco beneficiam da cache; O primeiro hit é o que gera a cache, logo o mais lento; No entanto, não há dúvidas que o uso de caches acelera a Internet e diminui a carga dos servidores; Podemos usar a cache Smarty (FS), ou usar mecanismos externos como memcached ou MySQL, que pode elevar o caching à farm inteira!
Caching Usar cache em Smarty: $smarty->caching=true; $smarty->cache_lifetime=600; Ou na funções display, fetch: $smarty->display('template.tpl', 'keycache'); $smarty->fetch('template.tpl', 'keycache');
Segurança - Conteúdos O PHP é seguro! Os programadores é que não são... Input vindo do utilizador deve ser tratado como inseguro, SEMPRE. Alguns dos problemas segurança: Cross site scripting (injecção scripts). Colocação de Exploits no browser. Cross-site request forgery. Session Hijacking. Personal Data Harvesting. Phishing Attacks. E-mail Harvesting.
Segurança - Conteúdos Como pode o Smarty ajudar a resolver este tipo de problemas? Ao fazer o html escaping de conteúdo nos templates! (seguranca01.php); (html,htmlall,url,quotes,hex,hexentity,javascript) $default_modifiers = array( ’ escape:&quot;htmlall&quot; ’ ) Segurança por defeito! Evitam-se javascripts e outro tipo de surpresas inconvenientes...
Segurança - Conteúdos Como evitar a recolha de emails do site? Obfuscando os emails que aparecem nas páginas! (none, hex, javascript) (seguranca02.php) Deve-se usar sempre hex ou javascript! { mailto address=&quot;me@domain.com&quot; encode=&quot;javascript&quot;} {mailto address=&quot;me@domain.com&quot;} {mailto address=&quot;me@domain.com&quot; text=&quot;send me some mail&quot;} {mailto address=&quot;me@domain.com&quot; encode=&quot;javascript&quot;} {mailto address=&quot;me@domain.com&quot; encode=&quot;hex&quot;} {mailto address=&quot;me@domain.com&quot; subject=&quot;Hello!&quot;}
Tuning Smarty Em ambientes de produção: Usar cache ao máximo; Desabilitar o compile_check do Smarty; Usar o force_compile para regerar um template. Não abusar de  {includes}  Smarty, o filesystem é lento, seja qual o sistema que usemos! A pasta de cache deve ser limpa periodicamente, pois pode tornar-se factor de lentidão. Libertar a sessão ASAP, pois liberta outros requests PHP que estejam bloqueados a aguardar pela sessão (session_write_close).
Novidades Smarty 3 beta está a chegar: Melhorias de velocidade (2-5x em média); Cache por template, variável e funções; Smart JS/CSS (remoção necessidade {literal}); Herança de Templates; In-template Functions; {nocache} Template Munging??? Melhorias na syntaxe dos Templates; (...)
Conclusão Apenas vimos a ponta do potencial do Smarty. O Smarty não é a única ou a melhor solução existente, mas é uma boa ferramenta. Combinado com outras ferramentas existentes, permite criar soluções eficientes e robustas: Log4php. Doctrine ou outros ORM. Frameworks MVC. Engines CMS E especialmente é Open Source!!!
Q&A Obrigado [email_address]

Mais conteúdo relacionado

ODP
Php 05 Mvc
PDF
PHP, Smarty e o Template View Pattern
PDF
Smarty Template Engine
PPTX
Aula 01 - Curso PHP e MySQL
PDF
Desenvolvendo Extensões PECL
PPT
Melhorando a Experiência do Usuário com JavaScript e jQuery
PDF
Refatoração - aquela caprichada no código
Php 05 Mvc
PHP, Smarty e o Template View Pattern
Smarty Template Engine
Aula 01 - Curso PHP e MySQL
Desenvolvendo Extensões PECL
Melhorando a Experiência do Usuário com JavaScript e jQuery
Refatoração - aquela caprichada no código

Mais procurados (20)

PDF
Lidando com Código Duplicado - DevInSantos 2013
PDF
Boas práticas no desenvolvimento de software
PDF
Smarty + PHP
PDF
Lidando com Código Duplicado - PHP Conference Brasil 2013
PDF
PHP Jedi - Boas Práticas e Alta Performance
PDF
M5-Desenvolvimento-Paginas-Web
PDF
Manual-de-php
PPTX
Maratona Windows Phone 7
PDF
10 Boas Práticas de Programação
PDF
mod3-programação-estruturada
PPTX
Rumo à Certificação PHP
PPTX
Desenvolvendo com Silverlight para WP7 Mango [Update]
PDF
Ap 04 05_10
PDF
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
PDF
PHP e Redis
PPTX
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
PPTX
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
PPT
Aula3
PPT
Tirando Certificação PHP
PDF
Aprender PHP e mySQL (UFCD0155)
Lidando com Código Duplicado - DevInSantos 2013
Boas práticas no desenvolvimento de software
Smarty + PHP
Lidando com Código Duplicado - PHP Conference Brasil 2013
PHP Jedi - Boas Práticas e Alta Performance
M5-Desenvolvimento-Paginas-Web
Manual-de-php
Maratona Windows Phone 7
10 Boas Práticas de Programação
mod3-programação-estruturada
Rumo à Certificação PHP
Desenvolvendo com Silverlight para WP7 Mango [Update]
Ap 04 05_10
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
PHP e Redis
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
Aula3
Tirando Certificação PHP
Aprender PHP e mySQL (UFCD0155)
Anúncio

Destaque (20)

PPT
3 presentación y tratamiento upp parte 1 segun estadíos
PDF
Phan tam hoc nhap mon sigmund freud - vy
PPTX
Anna NAGHERNEAC, Elena SCURTU. Performanţa cercetării ştiinţifice a universit...
PDF
Caramembuat website sederhana
DOCX
Lusiadas Cruzeiros
PPT
Jotec 2009 Minicurso Áudio Linux
PPTX
Francisco... 7ºd
PDF
5η διάλεξη Γραμμικής Άλγβερας
PPTX
Green Power Lighting Solutions, Llc Dania Beach
PPTX
24 02-10
PPT
Leilys
PPTX
Más y Mejor: Extiende el Alcance de tu Conocimiento Geográfico
PPTX
PDF
Sosialisasi Awal Sistem Informasi Manajemen Mutu Madrasah
PDF
Ensayo Anual N°4 De Psu MatemáTica 2009
PPSX
Remodelaciones de la Policlínica La Concepción
PPT
Cierre académico 2010
PPT
Protected battleship
PPT
Acto inaugural 2011
3 presentación y tratamiento upp parte 1 segun estadíos
Phan tam hoc nhap mon sigmund freud - vy
Anna NAGHERNEAC, Elena SCURTU. Performanţa cercetării ştiinţifice a universit...
Caramembuat website sederhana
Lusiadas Cruzeiros
Jotec 2009 Minicurso Áudio Linux
Francisco... 7ºd
5η διάλεξη Γραμμικής Άλγβερας
Green Power Lighting Solutions, Llc Dania Beach
24 02-10
Leilys
Más y Mejor: Extiende el Alcance de tu Conocimiento Geográfico
Sosialisasi Awal Sistem Informasi Manajemen Mutu Madrasah
Ensayo Anual N°4 De Psu MatemáTica 2009
Remodelaciones de la Policlínica La Concepción
Cierre académico 2010
Protected battleship
Acto inaugural 2011
Anúncio

Semelhante a Introdução ao Smarty (20)

PDF
Aula 10 - Trabalhando com Templates - Programação Web
PDF
User Interface (in portuguese)
PDF
Python mudando o modo de desenvolver para a web - Marcos Daniel Petry
PDF
Python mudando o modo de desenvolver para a internet
PDF
Phpjedi 090307090434-phpapp01 2
PPTX
Minicurso Web. Front-end e HTML5 (parte 2)
PPTX
KEY
Best pratices para desenvolvimento mobile
PPT
Apresentação blogs
PDF
Boas Práticas de programação WordPress
PPT
A Linguagem Php
PDF
Web Performance Client Side
PDF
Desenvolvimento Web Avançado usando PHP
ODP
Performance na web, além do framework
PDF
PPTX
WordCampBH 2015 - O mínimo essencial para o bom desempenho do seu projeto em ...
PDF
Utilização CMS - WordPress | Criação de um site de um restaurante
PDF
App Web Escalaveis Fisl
PDF
Tudo para WordPress Planejamento Design e Desenvolvimento Php in Rio
PDF
Otimizacao Front-End para WordPress - OlhoSEO 2013
Aula 10 - Trabalhando com Templates - Programação Web
User Interface (in portuguese)
Python mudando o modo de desenvolver para a web - Marcos Daniel Petry
Python mudando o modo de desenvolver para a internet
Phpjedi 090307090434-phpapp01 2
Minicurso Web. Front-end e HTML5 (parte 2)
Best pratices para desenvolvimento mobile
Apresentação blogs
Boas Práticas de programação WordPress
A Linguagem Php
Web Performance Client Side
Desenvolvimento Web Avançado usando PHP
Performance na web, além do framework
WordCampBH 2015 - O mínimo essencial para o bom desempenho do seu projeto em ...
Utilização CMS - WordPress | Criação de um site de um restaurante
App Web Escalaveis Fisl
Tudo para WordPress Planejamento Design e Desenvolvimento Php in Rio
Otimizacao Front-End para WordPress - OlhoSEO 2013

Introdução ao Smarty

  • 1. Introdução ao Smarty Sapo Sessions 2009 Nelson Gomes [email_address] ZCE / ITIL V3 Foundation
  • 2. Agenda Introdução Instalação Templates Configuração Debugging MVC Caching Segurança Tuning Novidades Conclusão Q&A
  • 3. Introdução: o que é e para que serve? Motor de Templating para PHP. Permite separar a apresentação da lógica, facilitando a reutilização do código e das páginas. Fornece aos designers uma linguagem simplificada para trabalhar. Permite usar templates como funções (passar argumentos a um template). Fornece mecanismos de cache, display e de output.
  • 4. Introdução: quem usa Smarty? Zend. OpenX. Xcart. XOOPS CMS. P4A – PHP for Applications. PHPBugTracker. Se eles usam, alguma razão devem ter...
  • 5. Introdução: comparativo entre usar e não usar Smarty? O OsCommerce é um MAU exemplo de como não se deve usar PHP (exemplo01.php). Vendem-se templates para OsCommerce, nos quais a lógica da aplicação é completamente subvertida. Tal subversão acontece porque não houve uma separação código-apresentação.
  • 6. Conclusão: uma confusão! Lógica e apresentação inutilizáveis. Código ilegível e de difícil manutenção. Não existe separação entre código e apresentação. ( … ) más práticas! É exactamente neste ponto que o Smarty dá o seu contributo!
  • 7. Instalação: estrutura Smarty Uma instalação Smarty tem tipicamente, as seguintes pastas: /templates – pasta de templates; /templates_c – pasta de templates compilados; /configs – pasta de configuração; /cache – pasta de cache; /plugins_dir – pasta de plugins. Todos estes defaults são modificáveis!
  • 8. Instalação: estrutura Smarty Pastas como as de cache e de templates compilados necessitam de permissões de escrita para o Smarty funcionar. Para customizar as pastas: $smarty->template_dir = TEMPLATES_DIR; $smarty->compile_dir = COMPILE_DIR; $smarty->config_dir = CONFIG_DIR; $smarty->cache_dir = CACHE_DIR;
  • 9. Templates: output do Template O 'Hello World' em Smarty (exemplo02.php). Como alterar as pastas por defeito (exemplo03.php). Output directo VS output controlado: $smarty->display('helloworld.tpl'); echo $smarty->fetch('helloworld.tpl'); Ter acesso ao output facilita a sua colocação em cache (FS, memcached, MySQL, ...).
  • 10. Templates: variáveis Smarty Variáveis disponibilizadas pelo Smarty: (exemplo04.php): {$smarty.now} {$smarty.const} – acesso a constantes PHP. {$smarty.capture} – variável com o conteúdo de um bloco capturado {capture}{/capture}. {$smarty.conf} – iremos falar mais à frente. {$smarty.template} – template corrente. {$smarty.get}, {$smarty.post}, {$smarty.request}, {$smarty.cookie} {$smarty.env}, {$smarty.server}
  • 11. Templates: passagem variáveis Passagem de variáveis a um template (exemplo04_1.php): $smarty->assign('nome', $valor); Ao contrário das variáveis disponibilizadas pelo Smarty estas são acedidas directamente pelo nome. Podem ser passados tipos simples, arrays ou objectos.
  • 12. Templates: funções Funções em Smarty são representadas por tags Smarty, e facilitam tarefas frequentes. Têm argumentos como qualquer função. Podem ser adicionadas novas funções. {assign}, {counter}, {fetch}, {htmlimage}, {mailto}, {popup}, {math}, {mailto}, (...) {image file=&quot;/path/from/pumpkin.jpg&quot;} {assign var=&quot;name&quot; value=&quot;Bob&quot;} {fetch file=&quot;http://www.weather.pt&quot; assign=&quot;weather&quot;} {math equation=&quot;(( x + y ) / z )&quot; x=2 y=10 z=2} {mailto address=&quot; [email_address] &quot; encode=&quot;hex&quot;}
  • 13. Templates: modificadores Modificadores Smarty permitem transformar a apresentação dos dados. O Smarty tem um conjunto de modifiers substancial, sendo no entanto, expansíveis. Os modifiers são semelhantes aos pipes Unix, são concatenáveis e podem ter argumentos: { “ Exemplo Modifier ” |lower|truncate:30|spacify} {$number|string_format:&quot;%.2f&quot;} {$smarty.now|date_format:&quot;%Y-%m-%d %H:%M:%S&quot;}
  • 14. Templates: modifiers Alguns modifiers disponíveis: capitalize (primeira maiúscula) count_caracters count_caracters cat (concatena) count_paragraphs count_sentences count_words date_format default (valor p defeito de uma var) escape indent (indenta o texto) lower nl2br regexp_replace replace spacify string_format strip strip_tags truncate upper wordwrap
  • 15. Templates: novos modifiers Exemplo modifier.sapo.php: <?php function smarty_modifier_sapo($string) { return str_replace('google','sapo', $string); } ?> { “ o google é o maior ” |sapo} Basta colocá-los na pasta de plugins para ficarem disponíveis.
  • 16. Configuração Ficheiros de configuração Smarty permitem usar conteúdos em larga escala. Podem ser usado para parametrizar páginas com conteúdos ou funcionalidades, mas pode também ser usado para conteúdos estáticos. Evitam a necessidade de ter uma base de dados. Os dados destes ficheiros são acessíveis dentro dos templates directamente: {config_load} e {$smarty.conf} (exemplo06.php)
  • 17. Templates – Funções Comuns Outras funções/tags usadas em Smarty {* comentários *} {literal}{/literal} {php} {/php} {if} {else} {/if} {foreach} {/foreach} {include} {configload} {includephp} {strip}{/strip}
  • 18. Templates – {* comentários *} Quando compilados são removidos tornando o resultado final mais pequeno. São mais seguros que os comentários HTML que passam informação para o browser. Devem ser usados para documentar a implementação do template.
  • 19. Templates – {literal}{/literal} Tags literal usadas para forçar o output de algo que pudesse ser confundido com tags Smarty (JS, CSS). Para incluir no output as próprias tags Smarty que de outra forma não seria possível. Para dizer ao Smarty para fazer o output sem parsing.
  • 20. Templates – {php}{/php} Permitem a colocação de código PHP dentro dos templates. Deve evitar-se: Código dentro dos templates; Funções dentro de templates; Manter a separação apresentação-lógica. Quando necessário pode-se extender o próprio Smarty: Criando novas tags Smarty; Acrescentando modifiers.
  • 21. Templates – {if}{else}{/if} Permitem dar lógica aos templates de acordo com os dados: Esconder conteúdos de acordo com a lógica de negócio; Mostrar conteúdos a utilizadores logados VS não logados por exemplo: {if $gender eq &quot;male&quot;} Exmo. Sr. {else} Exma. Sra. {/if}
  • 22. Templates – {foreach}{/foreach} Permite iterar sobre arrays de dados; Pode ser recursivo (array de arrays) ; {foreach from=$smarty.server item=arr key=nom} {foreach from=$arr item=valor key=nome} {$nome}={$valor} {/foreach} {/foreach} Pode ser um array de objectos. {$valor->getNome()}
  • 23. Templates – {include} Permite incluir outros templates dentro do template. Permite a passagem de variáveis aos templates incluídos. Permite a inclusão de partes comuns a todas as páginas, facilitando a gestão da apresentação de um site (exemplo07.php). {include file= ” exemplo.tpl ” title= ” Exemplo de tabela ” bgcolor= ” #FF0000 ” }
  • 24. Debugging O Smarty tem uma ferramenta de debug. Esta ferramenta de debug não é mais do que um... template (debug.tpl), que pode ser substituído por outro à medida. Como se usa (exemplo07.php)? $smarty->debugging=true; Podendo assim analisar de perto o que o Smarty está a fazer, e quanto tempo demorou a fazê-lo.
  • 25. Model-View-Controller Pattern de desenvolvimento que tenta separar a lógica de negócio, os dados e a apresentação. Tem como objectivos principais: a reutilização do código; redução da complexidade subjacente. Smarty pode ser usado com Frameworks MVC para PHP: Zend Framework, LightVC, Symfony, (...). Ou podemos simplesmente criar a nossa.
  • 26. Smarty em MVC Processar o pedido Web (Model). Identificar o fluxo decorrente do processamento do pedido (Controller). Obter dados necessários à página a ser gerada. Libertar a sessão. Fazer o display da página (View).
  • 27. Caching O Smarty por defeito não faz caching. A cache deve ser usada com bom senso: Fazer caches muito pequenas não compensa; Páginas com dados pessoais não podem usar cache directamente, podem usar caches parciais; O TTL (time to live) da cache deve ser um compromisso sobre o tempo que é aceitável ter um conteúdo desactualizado.
  • 28. Caching A cache é tão útil quanto maior for o número de acessos: Sites com poucos hits pouco beneficiam da cache; O primeiro hit é o que gera a cache, logo o mais lento; No entanto, não há dúvidas que o uso de caches acelera a Internet e diminui a carga dos servidores; Podemos usar a cache Smarty (FS), ou usar mecanismos externos como memcached ou MySQL, que pode elevar o caching à farm inteira!
  • 29. Caching Usar cache em Smarty: $smarty->caching=true; $smarty->cache_lifetime=600; Ou na funções display, fetch: $smarty->display('template.tpl', 'keycache'); $smarty->fetch('template.tpl', 'keycache');
  • 30. Segurança - Conteúdos O PHP é seguro! Os programadores é que não são... Input vindo do utilizador deve ser tratado como inseguro, SEMPRE. Alguns dos problemas segurança: Cross site scripting (injecção scripts). Colocação de Exploits no browser. Cross-site request forgery. Session Hijacking. Personal Data Harvesting. Phishing Attacks. E-mail Harvesting.
  • 31. Segurança - Conteúdos Como pode o Smarty ajudar a resolver este tipo de problemas? Ao fazer o html escaping de conteúdo nos templates! (seguranca01.php); (html,htmlall,url,quotes,hex,hexentity,javascript) $default_modifiers = array( ’ escape:&quot;htmlall&quot; ’ ) Segurança por defeito! Evitam-se javascripts e outro tipo de surpresas inconvenientes...
  • 32. Segurança - Conteúdos Como evitar a recolha de emails do site? Obfuscando os emails que aparecem nas páginas! (none, hex, javascript) (seguranca02.php) Deve-se usar sempre hex ou javascript! { mailto address=&quot;me@domain.com&quot; encode=&quot;javascript&quot;} {mailto address=&quot;me@domain.com&quot;} {mailto address=&quot;me@domain.com&quot; text=&quot;send me some mail&quot;} {mailto address=&quot;me@domain.com&quot; encode=&quot;javascript&quot;} {mailto address=&quot;me@domain.com&quot; encode=&quot;hex&quot;} {mailto address=&quot;me@domain.com&quot; subject=&quot;Hello!&quot;}
  • 33. Tuning Smarty Em ambientes de produção: Usar cache ao máximo; Desabilitar o compile_check do Smarty; Usar o force_compile para regerar um template. Não abusar de {includes} Smarty, o filesystem é lento, seja qual o sistema que usemos! A pasta de cache deve ser limpa periodicamente, pois pode tornar-se factor de lentidão. Libertar a sessão ASAP, pois liberta outros requests PHP que estejam bloqueados a aguardar pela sessão (session_write_close).
  • 34. Novidades Smarty 3 beta está a chegar: Melhorias de velocidade (2-5x em média); Cache por template, variável e funções; Smart JS/CSS (remoção necessidade {literal}); Herança de Templates; In-template Functions; {nocache} Template Munging??? Melhorias na syntaxe dos Templates; (...)
  • 35. Conclusão Apenas vimos a ponta do potencial do Smarty. O Smarty não é a única ou a melhor solução existente, mas é uma boa ferramenta. Combinado com outras ferramentas existentes, permite criar soluções eficientes e robustas: Log4php. Doctrine ou outros ORM. Frameworks MVC. Engines CMS E especialmente é Open Source!!!

Notas do Editor

  • #2: Bom dia a todos, O meu nome é Nelson Gomes, Estou a trabalhar no Sapo na parte de publicidade Sapo Ads, e quis hoje vir aqui hoje demonstrar-vos o que é o Smarty, para que serve e como se usa. Perguntas á audiência: 1. Quem daqui já usou PHP? 2. Quem daqui acha que sabe usar bem PHP? 3. Quem daqui já usou Smarty?
  • #3: Na agenda para hoje temos Introdução O que é o Smarty, qual é o objectivo de usar Smarty, quem usa Smarty, comparação entre usar Smarty e não usar. Instalação Estrutura Directórios usada pelo Smarty, parametrização interna e tuning para ambientes de produção. Templates Como se usam templates smarty, tags smarty, variáveis. Configuração Não a configuração do Smarty, mas a componente de configuração do Smarty que permite guardar dados. Esta componente pode ser usada para gerar sites estáticos. Caching Usar a componente de caching do Smarty, para armazenar páginas ou partes de páginas. Segurança Usar o Smarty como forma de garantir que os conteúdos são seguros. Novidades Novidades no Smarty 3 Q&amp;A Perguntas e questões
  • #8: Para que servem e como o Smarty usa estas páginas? A pasta de templates tem todos os templates em uso no site; A pasta de templates compilados