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.
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:

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.
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:
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.
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ícias cadastradas</h1>
<table cellpadding="2" cellspacing="1" border="1">
<tr>
<th align="left">Título da notí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!