XOOPS WAP Mobile
Notícias
Detalhes:
Título: Modelos Smarty e PHP
Autor: admin
Data: 2005-10-17 20:00:00
Conteúdo:

Smarty e PHP, tudo a ver

Quando se descobre o Smarty, é quase inviável viver sem ele. Neste artigo, mostro o seu funcionamento e exemplos do uso de métodos. Você notará um ganho de produtividade geral no desenvolvimento de aplicações.



O que é Smarty?

O Smarty é uma classe de templates. Funciona de uma forma que separe interface da lógica de programação e tem por objetivo, facilitar e melhorar o desenvolvimento de qualquer aplicação em PHP.

Por ser muito difundido no mundo inteiro, e estar ligado ao site oficial do PHP, o Smarty tem uma comunidade grande de desenvolvedores. Isso ajuda no suporte e discussão de melhorias.

A sua última versão (até a escrita deste artigo) é a 2.6.11 (changelog), lançada em Dezembro de 2005.

Principais funcionalidades

Além das funcionalidades que comentei no post anterior (Como desenvolvedor melhor na Web), listo outras:

Instalação

[update] Faça o download do Smarty. Descomprima todas as pastas. Verifique uma pasta "demo", é uma demonstração do funcionamento dele. Coloque a pasta "libs" dentro do "demo". No final você vai ter uma organização de diretórios, igual descrita abaixo. Não esqueça de dar permissão ao diretório "templates_c".

Organização dos arquivos

A árvore padrão de diretório do Smarty está organizada da seguinte maneira:

Esta arquitetura pode ser alterada pelo usuário, lembrando que, depois de alterado os nomes, você deverá modificar algumas linhas do Smarty.class.php (classe principal):

Smarty.class.php:

var $template_dir = 'templates';
var $compile_dir = 'templates_c';
var $config_dir = 'configs';

Mãos à obra

Programar usando Smarty é ainda mais simples. Todo arquivo PHP deve apontar pra um template. O acesso a banco de dados, críticas mais complexas, e outras lógicas ficam no arquivo PHP (como antes). O que muda aqui é a simplicidade da sintaxe dos templates, facilitando mudanças no futuro pelo Designer ou Programador: cada um altera seu arquivo.

Como o tópico sugere, vou direto ao assunto. Vejam um exemplo muito simples do uso dos templates no Smarty.

index.php:

<?php
/**
* Define a pasta onde está o Smarty
* esta constante pode ficar em arquivo separado por exemplo
*/

define('PATH_SMARTY', '/path/to/smarty');

/**
* Inclui classe principal do Smarty
*/

require PATH_SMARTY.'/Smarty.class.php';

/**
* Instancia Smarty e seta propriedades
*
* compile_check = avisa ao Smarty para mostrar erros de compilação
* debugging = em fase de desenvolvimento é bom deixar como true,
* uma vez que abre um popup com todas as informações da página gerada
*/

$smarty = new Smarty;
$smarty->compile_check = true;
$smarty->debugging = false;

/**
* Assign é um metodo do Smarty para criar uma
* nova variavel que será usada no Template
*
* sintaxe: assign->('nome_variavel', 'valor');
*/

$smarty->assign('nome', 'Ciro');
$smarty->assign('sobrenome', 'Feitosa');

/**
* Mostra o Template na tela
* observe que até aqui nada foi exibido, só processado
*/

$smarty->display('index.tpl');

?>

index.tpl:

{config_load file=test.conf}

<html>
<body>
{$nome} {$sobrenome}
</body>
</html>

Ao rodar o index.php pela primeira vez, automaticamente o Smarty criará um cache do conteúdo gerado no diretório /templates_c.

Neste exemplo simplérrimo, deu pra perceber quão simples é a sintaxe utilizada pelo Smarty não é?! Apresentarei agora, métodos que deverão ser usados nos arquivos de templates.

Variável reservada: $smarty

A variável reservada $smarty, traz opções de tratar as informações vindas pelo método GET, POST, ou por Cookies, Sessions, etc. Veja exemplos de chamadas:

{* mostra o valor de page da URL (GET) http://www.domain.com/index.php?page=foo *}
{$smarty.get.page}

{* mostra a variável "page" de um formulário (POST) *}
{$smarty.post.page}

{* mostra o valor do cookie "username" *}
{$smarty.cookies.username}

{* mostra a variável do servidor "SERVER_NAME" *}
{$smarty.server.SERVER_NAME}

{* mostra a variável de ambiente do sistema "PATH" *}
{$smarty.env.PATH}

{* mostra a variável de session do php "id" *}
{$smarty.session.id}

{* mostra a variável "username" da união de get/post/cookies/server/env *}
{$smarty.request.username}

Assim, na chamada dos formulários você deve inserir no campo value: $smarty.post.nome_do_campo. Exemplo:

formulario.tpl:

Nome: <input type="text" name="nome" value="{$smarty.post.nome}" /><br />
Estado: <select name="estado">{html_options options=$estados selected=$smarty.post.estado}</select>

Métodos que ajudam

A documentação do Smarty é excelente. Portanto, não tentarei reexplicar o que já existe, mas mostrar rapidamente funções úteis no dia-a-dia.

Para ajudar no entendimento, usarei formulários. Acredito que este seja o uso em que mais ajuda, quando você usa Smarty. Pressupõe que você já tenha incluído a classe do Smarty e instanciado (reveja o exemplo no tópico "Mãos à obra"). Não observem validações de código xHTML, pois não é a idéia central aqui.

Funções modificadoras de variável

São usadas, principalmente, para se modificar uma string. Funções do tipo capitalizar, contar caracteres, contar parágrafos, mudar para maiúsculas, indentar linhas, etc.

Veja um exemplo da função cat, que funciona concatenando 2 strings (veja todas as funções modificadoras de variável).

index.tpl:

<html>
<body>
{$nome|cat:" é o dono deste Blog."}
</body>
</html>

Funções internas

São funções utilizadas internamente pelos templates. Laços (loops), condicionais (if, else), inclusões (includes). Veja a lista completa de funções internas.

As funções condicionais, assim como em qualquer linguagem, são utilizadas quando se tem uma condição. Imagine que você possui um sistema com login feito em sessão. Se o usuário tiver logado, mostra o nome dele, caso contrário, mostra "Visitante". Veja como fazer isso usando os templates do Smarty:

{if $smarty.session.nome != ''}
{$smarty.session.nome}
{else}
Visitante
{/if}

Funções personalizadas

Foram criadas afim de se criar de forma automatizada, alguns trabalhos repetitivos. Em se tratando de formulários, é possível gerar checkboxes, menus drop-downs, radios, e menus drop-downs de data e hora, tudo isso podendo vir de um array estático ou dinâmico (preenchido via banco de dados, por exemplo).

Imagine que você tenha um array com os estados brasileiros (num arquivo .PHP) e deseja gerar um menu drop-down na tela. Use o método html_options. Além desta, existe dezenas de funções personalizadas.

formulario.php:

$arrayEstados = array(
'AC' => 'Acre',
'AL' => 'Alagoas',
'AM' => 'Amazonas',
'AP' => 'Amapá',
'BA' => 'Bahia',
'CE' => 'Ceará',
'DF' => 'Distrito Federal',
'ES' => 'Espírito Santo',
'GO' => 'Goiás',
'MA' => 'Maranhão',
'MG' => 'Minas Gerais',
'MS' => 'Mato Grosso do Sul',
'MT' => 'Mato Grosso',
'PA' => 'Pará',
'PB' => 'Paraíba',
'PE' => 'Pernambuco',
'PI' => 'Piauí',
'PR' => 'Paraná',
'RJ' => 'Rio de Janeiro',
'RN' => 'Rio Grande do Norte',
'RO' => 'Rondônia',
'RR' => 'Roraima',
'RS' => 'Rio Grande do Sul',
'SC' => 'Santa Catarina',
'SE' => 'Sergipe',
'SP' => 'São Paulo',
'TO' => 'Tocantins'
);
$smarty->assign('estados',$arrayEstados);

$smarty->display('formulario.tpl');

formulario.tpl:

<html>
<body>
<select name="estado">{html_options options=$estados}</select>
</body>
</html>

Conclusão

É notável o aumento da produtividade utilizando este sistema de templates. Além do mais, quando se trabalha em equipe, Designer e Programador com funções distintas, e neste caso, trabalhando juntos. Se o Designer quiser alterar um label de um campo do formulário, por exemplo, só precisará mexer no template.



<< 1 ..111 (112) 113 ..335 >>