Back-End

27 mar, 2007

MVC em PHP com Smarty – Parte 02

Publicidade

Olá leitores do iMasters.

Abro o artigo dessa semana agradecendo todos os e-mails que venho recebendo com dúvidas, críticas, sugestões e elogios. Saibam que estou a plena disposição para respondê-los. Muito Obrigado!!

Também peço desculpas pela demora em meus artigos, estive ocupado com alguns projetos. Mas…

I´m Back!!!

Então chega de papo e mãos na massa, ou melhor, mãos ao teclado!

Esse artigo é a segunda parte da série sobre MVC em PHP com Smarty. Durante nossa série trabalharemos na metodologia bottom-up, ou seja, começaremos trabalhando com a parte de visão do Smarty e subiremos (há quem diga que desceremos, mas tudo bem) para a tão esperada camada de controle (mas isso só próximo artigo, ok?!).

Hoje Faremos uso de algumas tags customizadas na camada view (visão) da nossa da aplicação.

Na primeira parte desse artigo (http://www.imasters.com.br/artigo/5399/php/mvc_em_php_com_smarty_-_parte_1/) iniciamos uma simples aplicação. Descartem-na. Começaremos outra mais completa. 😀

Para um correto acompanhamento de nossos artigos, peço que deêm uma lida em como instalar o Smarty em sua aplicação no site oficial do framework (http://smarty.php.net/). O site possui manual em português e a instalação é rápida e simples. Basta descompactar o arquivo “baixado” do site e setar permissões em alguns diretórios.

Vamos à nossa aplicação…

Imagine que você receba a seguinte tarefa do gerente de projeto de sua empresa ou diretamente de seu cliente.

“Querido Programador,.

Como parte da funcionalidade de nosso portal, gostaria que você implementasse um mecanismo de busca avançada. Onde em determinada tela fosse listado algumas opções de busca para meus pedidos e que não fosse preciso utilizar o refresh. Odeio esse tal de refresh. Gostaria que fosse igual àquele site que te mostrei, lembra?”.

Você pode se espantar com o nível de informalidade com que essa tarefa está descrita, mas para quem começou, ou quem está em pequenas empresas de desenvolvimento de software, sabe que esse tipo de informalidade acontece…

… e acontece muito!!

Para os mais “antenados”, uma rápida lida nessa especificação já trás implícito uma solução, não é mesmo?!

“Odeio refresh!”

AJAX nele!!!!

A citação do AJAX nesse ponto possui relevância, já que teremos que utiliza-lo para nos conectar a camada de visão com a camada de controle, efetuando algumas alterações no código do Smarty.

“O quê? Mexeremos no código do Smarty??!”

Pois é, essa modificação é necessária para conseguirmos conciliar o AJAX com Smarty. Mas não se preocupem, tudo ao seu tempo.

Voltando ao Smarty…

É através do Smarty que montamos a visualização do aplicativo com os dados retornados pela camada de controle.

“Como assim?”

Digamos que a camada de controle passe para a visão um conjunto de dados para serem mostrados em uma tabela. É necessário que o Smarty possua estruturas de laço e decisão para o processamento dessas informações.

E ele tem!

Com as tags foreach e if podemos interagir com os dados e fazer tomadas de decisão em tempo de execução.

Veja o exemplo do foreach:

A definição na camada de controle se parece com isso (pagina_controlador1.php)

pagina_controlador1.php

$clientes = array();
$cliente_1 = new Cliente("Erico");
$cliente_2 = new Cliente("Renato");
$clientes[] = $cliente_1;
$clientes[] = $cliente_2;

$smarty->assign("clientes", $clientes);

E a definição no HTML ficaria assim (pagina_visao1.html):

pagina_visao1.html

<table>
{foreach name=laco1 item=cliente from=$clientes}
<tr>
	<td>
	    Nome: {$cliente->nome}
	</td>
<tr>
{/foreach}

</table>

Com essa sistemática conseguimos a separação de código, definindo os dados na camada de controle e repassando a responsabilidade da visualização desses dados na camada de visão, no nosso caso, no HTML;

Podemos perceber três coisas no exemplo dado.

Primeiro é que as marcações do Smarty seguem a mesma filosofia do HTML e do XML, ou seja, abre-se a tag e fecha-se com uma barra “/”;

A segunda é que é possível a utilização da orientação a objetos na página de visão. Isso é ótimo para organização de código e estruturação da manutenção de software, além de todas as vantagens de se utilizar POO (Programação Orientada a Objetos);

Desaparece aqueles códigos “enrolados” com a mistura entre código PHP e HTML, chamados códigos de macarrão;

Além dessas marcações, o Smarty permite o uso de tag´s que formatam os componentes HTML. Isso é útil, por exemplo, quando utilizamos combobox em nossa aplicação, e que precisamos selecionar um dos valores por default. Algo como o exemplo a seguir:

Definição no controlador (pagina_controlador2php):

pagina_controlador2.php

$smarty = new Smarty;
$smarty->assign('nome_clientes', array(
			1001 => 'Erico Almeida',
			1002 => 'Renato Oliveira',
			1003 => 'Thiago Sergio',
			1004 => 'Carlos Breno'));
$smarty->assign('cliente_selecionado', 1001);
$smarty->display("pagina_visao2.html");

Página HTML (pagina_visao2.html)

<select name=cliente_id>
	{html_options options=$nome_clientes selected=$cliente_selecionado}
</select>

Nesse exemplo, criamos um array que será utilizado para compor os valores do combobox (select). Com a utilização do componente do Smarty para os options, é possível passar qual será o valor de seleção default para o select. Isso ajuda muito na construção de páginas para edição de dados;

Relembro que o Smarty possui diversas tags customizadas e que realmente vale a pena darmos atenção a esse framework e deixarmos de lado algumas manias que os programadores possuem desde do tempo do desenvolvimento procedural. De um código sem divisão de camadas, de difícil leitura e consequentemente de difícil manutenção.

Na próxima semana estaremos trabalhando a camada de controle (controller) e implementaremos a aplicação especificada nesse artigo. Lembro que essa é somente uma introdução do uso da View do Smarty e que foi abordado somente conceitos que serão melhor aplicados no decorrer do artigo. Para uma melhor noção das tags do Smarty, aconselho a leitura da documentação em português do framework no site oficial (http://smarty.php.net/manual/pt_BR/).

Uma boa semana para todos. Abraços!

“Não basta saber, é preciso também aplicar; não basta querer, é preciso também agir.”

Goethe