Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
* * * Introdução ao Smarty Sapo Sessions 2009 Nelson Gomes nelson.gomes@co.sapo.pt 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="me@domain.com" 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: * * * 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 "male"} 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:"htmlall"’) 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="me@domain.com" encode="javascript"} {mailto address="me@domain.com"} {mailto address="me@domain.com" text="send me some mail"} {mailto address="me@domain.com" encode="javascript"} {mailto address="me@domain.com" encode="hex"} {mailto address="me@domain.com" subject="Hello!"} * * * 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 nelson.gomes@co.sapo.pt 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? 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&A Perguntas e questões 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