Desenvolvimento com templates: obtendo o máximo de aproveitamento dos recursos do Smarty Adriano Gonçalves adriano.php4@gmail.com
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 Geradores off-line de páginas HTML estáticas <HTML> Ms Front Page <HTML> CGI, <% ASP %>, <?PHP?>... Sistemas web / Web 2.0 Disseminação dos websites dinâmicos (webmails, e- commerce, portais, etc.)
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
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)
Manual do Smarty em CHM O Smarty e suas vantagens
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
Estendendo a configuração Alguns recursos muito úteis
Instanciando o Smarty Alguns recursos muito úteis
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:
<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 literal - Serve para ignorar a interpretação do conteúdo interno de um bloco
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 Notícia 1 Notícia 2 Notícia 3 Powered by Nonono nono Usando um template principal com a estrutura do site Subtemplates Notícia 1 Notícia 2 Notícia 3 Template rodapé 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
Exemplo prático Smarty e AJAX
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)
Algumas opções de editores Editores que suportam Smarty 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: adriano.php4@gmail.com Meu website: http://adriano.ison.com.br/