HUFERSIL.WEBDEVELOPER - Soluções com qualidade - Hugo Ferreira da Silva

Lumine - Tutorial 6 - Integrando com o Smarty Qui, 01 de maio de 2008 - as 11h44 - 4 comentários

Hoje vamos ao primeiro tutorial de Lumine integrando com Smarty.

Vamos nos prender somente as configurações básicas do Smarty, pois ele também possui diversos tipos de opções para que você possa trabalhar da maneira que se sentir mais confortável e que possam atender as características de seu servidor de hospedagem.

Neste primeiro exemplo, vamos mostrar como montar uma tabela listando as notícias e quais categorias elas pertencem.

Para realizar este tutorial, é interessante que você tenha feitos os tutoriais anteriores.

Organizando o projeto no Eclipse.

Para facilitar, coloque a pasta onde você salvou o Smarty no include path do Eclipse (veja como fazer no primeiro tutorial - Preparando arquivos).

Crie também duas pastas dentro do seu projeto:
- templates
- templates_c

Elas servirão para gravar os arquivos em HTML (templates) e os arquivos compilados pelo Smarty (templates_c).

Importante: dê permissão de escrita para o usuário que está executando o PHP / Apache na pasta templates_c. Geralmente, é dada a permissão máxima (0777).

Seu projeto deverá ficar semelhante ao abaixo:

Alterando o arquivo de configuração

Agora, é necessário que façamos a inclusão do Smarty em nossos arquivos para que possamos trabalhar com as classes do mesmo.
Para facilitar, vamos incluir em nosso arquivo de configuração geral, para que sempre que precisarmos do Smarty, basta chamarmos este arquivo.

Abra o arquivo config.php.

Ele deverá ficar semelhante ao abaixo:

<?php

// importa a biblioteca do Lumine
require_once 'lumine/Lumine.php';
// importa as configurações do Lumine
require_once 'lumine-conf.php';

// inicia as configurações do lumine
$cfg = new Lumine_Configuration($lumineConfig);

// importa a biblioteca do Smarty (altere para o local onde voce salvou o Smarty)
require_once 'Smarty/libs/Smarty.class.php';

/**
 * pasta base das aplicações 
 */
define('BASEDIR', dirname(__FILE__));

//////////////////////////////////////////////////
// Configurações para o Smarty
//////////////////////////////////////////////////
/**
 * pasta dos templates
 */
define('TEMPLATES_PATH', BASEDIR . '/templates');
/**
 * pasta dos templates compilados
 */
define('TEMPLATES_C', BASEDIR . '/templates_c');


Salve e feche o arquivo.

A linha onde define a constante BASEDIR irá encontrar a pasta onde está gravado o arquivo de configuração (config.php) e fazer com que a mesma seja a pasta raiz da aplicação. Lembre-se que no primeiro tutorial, gravamos este arquivo dentro da raiz do projeto!

Após isso, definimos ainda outras duas constantes, que são os locais onde o Smarty deverá procurar os templates e onde ficarão os templates compilados.

Criando o arquivo PHP

Configurações prontas, é hora de fazer nosso primeiro arquivo usando Smarty e Lumine.

Abaixo o conteúdo do arquivo:

<?php

// carrega as configurações
require_once 'config.php';

// importa as classes necessárias
Lumine::import('Noticia', 'Categoria');

// inicia os objetos necessarios
$smarty = new Smarty();
$noticia = new Noticia();
$categoria = new Categoria();

// ajustando as configurações do Smarty
$smarty->template_dir = TEMPLATES_PATH;
$smarty->compile_dir  = TEMPLATES_C;

// Agora, vamos consultar todas as 
// noticias colocando o nome da categoria 
// que ela pertence
$noticia->alias('n')
    ->join($categoria,'inner','c')
    ->select('n.codnoticia, n.titulo, c.nome as nomecategoria, n.data_cadastro')
    ->order('n.data_cadastro desc')
    ->find();

// Vamos colocar todos os resultados dentro do Smarty como array
$smarty->assign('lista', $noticia->allToArray());

// Exibe o resultado
$smarty->display('smarty1.html');

Salve o arquivo como smarty.php

Vejamos algumas operações que fizemos neste arquivo:

  • Definimos qual era a pasta de template e pasta onde gravar os arquivos compilados para o Smarty (linhas 15 e 16);
  • Efetuamos uma consulta união para recuperar as notícias com o nome da categoria que ela pertencia (linhas 21 a 25);
  • Atribuimos aos Smarty uma variável chamada lista contendo uma matriz multidimensional contendo todos os registros encontrados na busca das notícias (linha 28). Veja mais sobre o método allToArray.
  • Finalmente, dizemos ao Smarty para exibir o resultado baseado no arquivo 'smarty1.html' (linha 31).

A variável lista que colocamos no Smarty com o método assign estará visível dentro no nosso arquivo de visualização (smarty1.html) que iremos criar a seguir.

Criando o arquivo de visualização

Um arquivo de visualização pode ser qualquer arquivo texto com as tags do Smarty. Lembre-se que um arquivo HTML é um arquivo texto, somente com uma extensão diferente.
Geralmente, a maioria dos tutoriais de Smarty colocam a nomenclatura dos arquivos de template com a extensão TPL. Particularmente, eu prefiro colocar HTML, por ficar mais fácil a edição nas IDE's que trabalho. Fique a vontade para colocar a extensão que preferir, lembrando somente de alterar nos arquivos que estamos fazendo.

Abaixo, meu arquivo XHTML criado como exemplo:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>HUFERSIL - Exemplo Smarty 1</title>
</head>
<body>

<h1>Listando not&iacute;cias cadastradas</h1>

<table cellpadding="2" cellspacing="1" border="1">
  <tr>
   <th align="left">T&iacute;tulo da not&iacute;cia</th>
   <th align="left">Categoria</th>
   <th align="left">Data de cadastro</th>
  </tr>
  
  {foreach from=$lista item=item}
  <tr>
   <td>{$item.titulo}</td>
   <td>{$item.nomecategoria}</td>
   <td>{$item.data_cadastro}</td>
  </tr>
  {/foreach}
  
</table>
</body>
</html>

Salve com o nome de smarty1.html dentro da pasta templates.

Veja que fizemos um laço foreach usando a variável lista que atribuimos ao Smarty no arquivo smarty.php. Dizemos também que cada item dentro daquela lista deverá ser representado pela variável item.

Como o método allToArray envia uma matriz multidimensional associativa pelo nome dos campos, assim fica mais fácil para acessarmos as propriedades de cada registro dentro do Smarty, bastando colocar somente $item.nome_da_propriedade.

Pronto!

Agora acesse através de seu navegador o arquivo smarty.php. Você deverá ver um resultado semelhante ao abaixo:

@braços e fiquem com Deus!

Comentários

Por cliff Oliveira enviado em 02 de abril de 2009, as 21:57 uma duvida, para um conteúdo mais diversificado, seria necessário criar um template sempre, ou tem como chamar para o corpo de minha aplicação cada formulário necessário ?
Por Yuri enviado em 27 de outubro de 2008, as 16:09 Mais uma vez parabéns.
Por Fernando enviado em 01 de maio de 2008, as 14:52 Corrigindo:

Até à integração do Lumine com o Smarty.

:)
Por Fernando enviado em 01 de maio de 2008, as 14:20 Parabéns pela série de artigos publicados, no começo imaginei que seria apenas alguns poucos exemplos de casos com o Lumine, mas chegou até à integração com o Lumine, muito bom mesmo.
Aproveito também para deixar uma pequena sugestão ao seu site, a criação de um feed de RSS para as notícias que você posta, isso seria muito interessante.
Abraços.

Deixe seu comentário