Desenvolvimento com templates: obtendo
o máximo de aproveitamento dos recursos
do Smarty
Adriano Gonçalves
[email protected]
Agenda
Introdução
O Smarty e suas vantagens
Alguns recursos muito úteis
Estruturando um site com Smarty
Escrevendo plugins
Smarty e AJAX
Smarty e Xoops
Editores que suportam Smarty
Introdução
Onde estamos...
Páginas estáticas HTML
<HTML>
Geradores off-line de páginas
HTML estáticas
Ms Front
Page
<HTML>
CGI,
<% ASP %>,
<?PHP ?>...
Sistemas web /
“Web 2.0”
Disseminação dos
websites dinâmicos
(webmails, ecommerce, portais,
etc.)
Introdução
Exemplo de página dinâmica em PHP
Introdução
Código da página
Introdução
E se fosse assim?...
Introdução
... e assim?
Introdução
Desenvolvimento com templates - vantagens
●
Separar interface da lógica da aplicação
●
Melhor divisão de trabalhos
●
●
●
●
Melhor legibilidade, manutenibilidade e
reutilização de códigos
Flexibilidade para criar layouts diferentes para
uma mesma aplicação
Flexibilidade para mudar o layout da aplicação
em menos tempo
Flexibilidade para utilizar as mesmas páginas
para mídias diferentes (browser desktop, Palm,
celular...)
Agenda
Introdução
O Smarty e suas vantagens
Alguns recursos muito úteis
Estruturando um site com Smarty
Escrevendo plugins
Smarty e AJAX
Smarty e Xoops
Editores que suportam Smarty
O Smarty e suas vantagens
O que é o Smarty?
●
●
“É um sistema de
templates para PHP:
ele fornece uma
maneira fácil de
controlar a separação
da aplicação lógica e a
sua apresentação
(interface).”
Atualmente está na
versão 2.6.14
O Smarty e suas vantagens
Algumas vantagens do Smarty
●
●
●
Ótimo desempenho de execução (compila uma vez
e deixa o PHP executar)
Sintaxe dos delimitadores configurável
Uso de funções de desvio condicional, como ifelseif-else, e foreach, podendo usar expressões
simples ou complexas
●
Modo de cache embutido
●
Flexibilidade de ser extendido com plugins
●
Excelente documentação (inclusive em Português)
O Smarty e suas vantagens
Manual do Smarty em CHM
Agenda
Introdução
O Smarty e suas vantagens
Alguns recursos muito úteis
Estruturando um site com Smarty
Escrevendo plugins
Smarty e AJAX
Smarty e Xoops
Editores que suportam Smarty
Alguns recursos muito úteis
Estendendo a configuração
Alguns recursos muito úteis
Instanciando o Smarty
Alguns recursos muito úteis
O arquivo de configuração
tituloPagina = "Menu Principal"
corfundoPagina = #000000
corfundoTabela = #000000
corlinhaTabela = #00ff00
[Consumidor]
tituloPagina = "Informações do Consumidor"
[Login]
tituloPagina = "Login"
focus = "nomeusuario"
Intro = """Este é um valor que ultrapassa uma
linha. Você deve colocá-lo
dentre três aspas."""
(Extraído do Manual do Smarty)
Alguns recursos muito úteis
Variáveis
●
Definindo variáveis no PHP...:
$template->assign(“nome”,”Adriano”);
$template->assign(“sexo”,”M”);
●
...e mostrando no template:
Olá, {$nome}!
<br>{if $sexo == “M”}Seja bem-vindo!{else}Seja
bem-vinda!{/if}
Alguns recursos muito úteis
Variáveis
●
...que, ao executar a página, irá mostrar:
Olá, Adriano!
<br>Seja bem-vindo!
Alguns recursos muito úteis
A variável $smarty
●
●
●
●
Permite acessar variáveis de sistema ($_GET,
$_POST, $_SERVER, $_SESSION...)
Permite acessar constantes do PHP
Permite acessar algumas das entidades do
Smarty (foreach, section, etc.)
Outros recursos: now, ldelim, rdelim...
Alguns recursos muito úteis
A variável $smarty - exemplos
Olá, {$nome_usuario}!
Hoje é {$smarty.now|date_format:"%A, %d de %B
de %Y"}.
Mostra:
Olá, Adriano!
Hoje é Sexta, 1 de dezembro de 2006.
Alguns recursos muito úteis
A variável $smarty - exemplos
Nome do servidor:
{$smarty.server.SERVER_NAME}
Mostra:
Nome do servidor: localhost
Alguns recursos muito úteis
Modificadores de variáveis
●
Podem ser aplicados a variáveis, funções
personalizadas ou strings. Ex.:
<h1>{$titulo|upper}</h1>
<img
src=”imagemdim.php?imagem={$url_imagem|
escape:'url'}max_width=500”>
Nome: {$nome_pessoa|escape:'htmlall'}
Bem-vindo (a) {$nome_usuario|default:'visitante'}!
Alguns recursos muito úteis
Modificadores de variáveis
●
Fazendo uma listagem de notícias com resumo:
PHP:
...
$query = mysql_query("SELECT * FROM noticias
LIMIT 5");
while($linha = mysql_fetch_array($query))
{
$noticia_atual["titulo"] = $linha["not_titulo"];
$noticia_atual["texto"] = $linha["not_texto"];
$noticia_atual["link"]
=
"noticia.php?id=".$linha["not_id"];
$template->append("noticias",$noticia_atual);
}
$template->display("listagem_noticias.tpl");
Alguns recursos muito úteis
Modificadores de variáveis
●
Template:
<ul id="lista_noticias">
{foreach from=$noticias item=not_atual}
<li>
<a href="{$not_atual.link}">
<strong>{$not_atual.titulo}</strong></a>
- {$not_atual.texto|strip_tags|truncate:200}
</li>
{/foreach}
</ul>
Alguns recursos muito úteis
Modificadores de variáveis
●
Resultado:
Alguns recursos muito úteis
Modificadores de variáveis
●
Removendo links HTML de um conteúdo:
Template:
{$conteudo|regex_replace:'/<a[^>]*>|<\/a>/':''}
Alguns recursos muito úteis
Funções
●
●
O Smarty possui uma série de funções internas e
personalizadas, e é possível criar novas. Alguns
exemplos:
Foreach-foreachelse – loop que varre um array
{foreach from=$noticias item=not_atual}
<div class=”noticia”>
<strong>{$not_atual.titulo}</strong>
</div>
{foreachelse}
Ainda não há nenhuma notícia cadastrada.
{/foreach}
Alguns recursos muito úteis
Funções - Exemplos
●
cycle – faz um ciclo, alternando entre valores
<ul id="lista_noticias">
{foreach from=$noticias item=not_atual}
<li class="noticia_{cycle values='par,impar'
name='noticias'}">
<a href="{$not_atual.link}">
<strong>{$not_atual.titulo}</strong></a>
- {$not_atual.texto|strip_tags|truncate:200}
</li>
{/foreach}
</ul>
Alguns recursos muito úteis
Funções - Exemplos
●
Resultado:
Alguns recursos muito úteis
Funções - Exemplos
●
html_table - cria uma tabela html com os dados
fornecidos
PHP:
$pessoas = array(“Nome”,”Endereço”);
while($linha = mysql_fetch_array($query))
{
$pessoas[] = $linha[“pessoa_nome”];
$pessoas[] = $linha[“pessoa_end”];
}
$template->assign(“pessoas”,$pessoas);
$template->display(“listagem_pessoas.tpl”);
Alguns recursos muito úteis
Funções - Exemplos
●
html_table
Template:
{html_table loop=$pessoas cols=2}
...ou, melhorando um pouco...:
{html_table loop=$pessoas cols=2
table_attr="cellspacing='0' border='1'"}
Alguns recursos muito úteis
Funções - Exemplos
●
html_table - Resultado:
Alguns recursos muito úteis
Funções - Exemplos
●
Outra aplicação prática do html_table...
(Foto ilustrativa, só pra exemplificar)
Alguns recursos muito úteis
Funções - Exemplos
●
●
html_options – faz uma lista de <option> para
adicionar em listboxes
Fazendo uma listbox de estados:
PHP:
while($linha = mysql_fetch_array($query))
{
$estados[$linha[“uf_sigla”]] = $linha[“uf_nome”];
}
$template->assign(“estados”,$estados);
$template->display(“pagina_estados.tpl”);
Alguns recursos muito úteis
Funções - Exemplos
●
html_options – fazendo uma listbox de estados
Template:
Estado:
<select name="estado">
{html_options options=$estados}
</select>
Alguns recursos muito úteis
Funções - Exemplos
●
html_options – fazendo uma listbox de estados
Resultado:
Alguns recursos muito úteis
Funções - Exemplos
●
literal - Serve para ignorar a interpretação do
conteúdo interno de um bloco
<script language=”Javascript”>
{literal}
function confirma_envio(form)
{
if(form.nome == “”){ return false; }
else
return true;
}
{/literal}
</script>
Alguns recursos muito úteis
Funções - Exemplos
●
strip – elimina espaços e quebras de linha extras
{strip}
<div id=”menu”>
<img src=”opc_1.jpg”>
<img src=”opc_2.jpg”>
<img src=”opc_3.jpg”>
</div>
{/strip}
Mostrará:
<div id=”menu”><img src=”opc_1.jpg”><img
src=”opc_2.jpg”><img src=”opc_3.jpg”></div>
Alguns recursos muito úteis
Funções - Exemplos
●
include – permite incluir outro template.
Ex.
{include file=”cabecalho.tpl”}
Olá, mundo!
{include file=”rodape.tpl”}
Modelo RSS
Agenda
Introdução
O Smarty e suas vantagens
Alguns recursos muito úteis
Estruturando um site com Smarty
Escrevendo plugins
Smarty e AJAX
Smarty e Xoops
Editores que suportam Smarty
Estruturando um site com Smarty
Estrutura básica
●
Duas opções básicas
Template de página principal
Template incluído
Template cabeçalho
Template corpo
da página atual
Subtemplates
Subtemplates
Notícia 1
Notícia 2
●Notícia 3
●
Notícia 1
Notícia 2
●Notícia 3
●
●
●
Template rodapé
Powered by Nonono nono
Usando um template principal
com a estrutura do site
Powered by Nonono nono
Separando cabeçalho e rodapé
em templates diferentes
Estruturando um site com Smarty
Estrutura básica
●
●
Usando template principal
–
Dá ao designer uma visão do todo da página para
manipular
–
Tira a preocupação de ficar acrescentando dois
includes em todo template
Separando cabeçalho e rodapé
–
Permite trabalhar melhor situações específicas para
sites variam mais o layout de seção para seção
Estruturando um site com Smarty
Usando um template principal
●
Template principal (paginas_padrao.tpl):
...
<body>
<div id=”cabecalho”>
Cabeçalho da página
</div>
<div id=”conteudo_pagina”>
{include file=$templateInclude}
</div>
<div id=”rodape”>Powered by Nononono</div>
</body>
</html>
Estruturando um site com Smarty
Usando um template principal
●
Template da página inicial (inicial.tpl):
Olá, {$nome}, seja bem vindo(a) ao nosso web
site!
{include file=”listagem_noticias.tpl”}
Estruturando um site com Smarty
Usando um template principal
●
Código PHP (index.php):
...
$template = new Smarty_MeuSistema();
$template->assign(“nome”,”Adriano”);
$template->assign(“pagina_atual”,”inicial”);
$template->assign(“templateInclude”,”inicial.tpl”);
$template->display(“paginas_padrao.tpl”);
Estruturando um site com Smarty
Outras considerações
●
●
●
●
Procure “modularizar” os templates
que você faz, criando templates
reaproveitáveis
Procure separar as partes que se
repetem muito
Procure não quebrar demais o site em
muitos templates desnecessariamente
Procure manter um padrão de
templates na sua empresa
Agenda
Introdução
O Smarty e suas vantagens
Alguns recursos muito úteis
Estruturando um site com Smarty
Escrevendo plugins
Smarty e AJAX
Smarty e Xoops
Editores que suportam Smarty
Escrevendo plugins
Tipos de plugins
●
Funções
●
Modificadores
●
Funções de bloco
●
Funções de compilador
●
Prefiltros
●
Posfiltros
●
Filtros de saída
●
Recursos (resources)
●
Insert
Escrevendo plugins
Exemplo de plugin modificador
●
Fazendo uma str_pad
<?php
function smarty_modifier_str_pad($valor,$tamanho,
$string, $tipo)
{
return
str_pad($valor,$tamanho,$string,constant($tipo));
}
?>
Escrevendo plugins
Exemplo de plugin modificador
●
Adicionando ao diretório de plugins
Escrevendo plugins
Exemplo de plugin modificador
●
Chamando...:
{foreach from=$produtos item=p_atual}
<br>
{$cod_produto|str_pad:5:”0”,”STR_PAD_LEFT”} {$nome_produto}
{/foreach}
Irá mostrar:
00001 – Mouse sem fio
00020 – Teclado sem fio
Agenda
Introdução
O Smarty e suas vantagens
Alguns recursos muito úteis
Estruturando um site com Smarty
Escrevendo plugins
Smarty e AJAX
Smarty e Xoops
Editores que suportam Smarty
Smarty e AJAX
Exemplo prático
Agenda
Introdução
O Smarty e suas vantagens
Alguns recursos muito úteis
Estruturando um site com Smarty
Escrevendo plugins
Smarty e AJAX
Smarty e Xoops
Editores que suportam Smarty
Smarty e Xoops
Smarty e Xoops (eXtensible Object Oriented Portal System)
●
●
Xoops é um
Sistema de
Gerenciamento de
Conteúdos para
portais desenvolvido
em PHP e MySQL
Trabalha com
templates
desenvolvidos em
Smarty
Portal da Comunidade XoopsTotal
www.xoopstotal.com.br
Smarty e Xoops
Algumas dicas...
●
●
Demonstração prática
–
Fazendo um bloco que só aparece na página inicial
–
Fazendo um bloco que aparece somente em um
módulo
–
Debug: A melhor forma de descobrir as possibilidades
Mais informações:
–
www.xoops.org
–
www.xoopstotal.com.br
Agenda
Introdução
O Smarty e suas vantagens
Alguns recursos muito úteis
Estruturando um site com Smarty
Escrevendo plugins
Smarty e AJAX
Smarty e Xoops
Editores que suportam Smarty
Editores que suportam Smarty
Algumas opções de editores
●
Crimson editor (http://www.crimsoneditor.com/)
Editores que suportam Smarty
Algumas opções de editores
●
VisualPHP IDE Visual Studio.Net
(http://www.jcxsoftware.com/jcx/vsphp)
Editores que suportam Smarty
Algumas opções de editores
●
●
Macromedia Dreamweaver
–
http://www.adobe.com/products/dreamweaver/
–
Como configurar syntax highlighting:
http://smarty.incutio.com/?page=ConfiguringDreamwe
aver
Extensões para vários outros editores:
http://smarty.php.net/contribs/syntax_highlighting/
Concluindo...
●
●
●
●
Desenvolvimento com templates é uma ferramenta
que promove melhor divisão de trabalho,
manutenibilidade e reutilização de códigos
Smarty é um sistema de templates em PHP que
provê uma série de recursos para facilitar essa
divisão de trabalho programador/designer
Smarty é extensível: você pode criar mais recursos
através da criação de plugins
Xoops é um sistema de portais que que se utiliza
da flexibilidade do Smarty para fazer os temas
Perguntas?
Referências
●
Smarty - a ferramenta para compilar templates
para PHP (Manual do Smarty)
●
http://smarty.php.net/
●
http://cirofeitosa.com.br/
●
http://www.xoopstotal.com.br/
●
Google
Contato
●
Meu e-mail: [email protected]
●
Meu website: http://adriano.ison.com.br/
Download

Desenvolvimento com templates: obtendo o máximo de