Buscar

PHP Smarty Introdução

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

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando