Conteudo Dinâmico com Smarty e Array
por Gustavo Soares

Veremos neste artigo como podemos utilizar as funções dessa poderesa classe para templates que e a Smarty, para trabalhar um conteudo dinâmico utilizando array.



O que é Smarty?

Compile PHP Template Engine Smarty, ou simplesmente Smarty, é a biblioteca de template para PHP mais popular atualmente. Mais especificamente, ela fornece uma maneira fácil de controlar a separação da aplicação lógica e o conteúdo de sua apresentação. Isso é melhor descrito em uma situação onde o programador da aplicação e o designer executam diferentes funções ou, na maioria dos casos, não são a mesma pessoa.

Um dos aspectos únicos do Smarty é seu sistema de compilação. O Smarty lê os arquivos de template e cria scripts PHP a partir deles. Uma vez criados eles são executados sem ser necessário uma outra compilação. Com isso, os arquivos não são 'parseados'(analisados) toda vez que um template é solicitado, e cada template tem a total vantagem de soluções de cache do compilador PHP, tais como: Zend Accelerator ( http://www.zend.com/) ou PHP Accelerator (http://www.php-accelerator.co.uk).

Neste artigo não vou falar sobre instalação, configuração da Smarty. Você pode saber mais sobre isso em:

http://smarty.php.net/manual/pt_BR/installation.php
http://www.phpbrasil.com/articles/article.php/id/629

Supondo que você já tenha instalado a biblioteca Smarty, vamos ao que interessa.



Vejamos um simples exemplo de utilização da biblioteca Smarty:

arquivo index.php

<?php
// carrega a biblioteca do Smarty 
require('smarty/Smarty.class.php');

$smarty = new Smarty

$smarty->template_dir '/diretoriohome/exemplo/templates/';
$smarty->compile_dir '/diretoriohome/exemplo/templates_c/';
$smarty->config_dir '//diretoriohome/exemplo/configs/'
$smarty->cache_dir '/diretoriohome/exemplo/cache/';

$smarty->assign('Titulo','Exemplo Smarty');
$smarty->assign('Nome','Gustavo Soares');
$smarty->display('index.tpl');
?>


No arquivo de exemplo index.php, instanciamos um novo objeto $smarty, definimos os diretórios:


template_dir
compile_dir
config_dir
cache_dir


isso para que a Smarty possa ler e compilar o seu template e até mesmo fazer cachê caso você habilite esta opção.

Logo abaixo utilizamos o método "assign" que é utilizado para setar valor a uma variavel que será enviada ao template.

A sintaxe padrão dela é:
$smarty->assign('NomeVariavel','Valor da Variavel');

A linha
$smarty->display('index.tpl');
utiliza o método display, onde você especifica qual será o arquivo de template do seu script.

- -

arquivo index.tpl

<html>
<head>
    <title>{$Titulo}</title>
</head>
<body>
    <h3>Olá, {$Nome}!</h3>
</body> 
</html>


Observe que temos um simples arquivo HTML.

Note que na tag <title> temos um valor {$Titulo}. Se você voltar no arquivo index.php, veja que atribuímos um valor "Exemplo Smarty" à variável de template "Titulo". Quando executarmos este arquivo index.php no servidor, na barra de titulos aparecerá o valor "Exemplo Smarty", porque ele pegará essas informações no arquivo de template.

O mesmo acontece com a variável "Nome": ela aparecera na frase: Olá, {$Nome}! que na exibição mostrará: Olá, Gustavo Soares!

Viu como é facil?
Partiremos agora para a utilização de um conteúdo dinâmico dentro da smarty utilizando array, o que é o objetivo deste artigo.

Agora veremos a melhor parte do artigo, como trabalhar conteúdo dinâmico utilizando smarty e array.

Utilizaremos a função "foreach", uma alternativa para loops.
"Foreach" é usado para pegar cada elemento de uma matriz associativa simples.

A sintaxe para foreach é muito simples. Tags foreach devem ter seu par /foreach. Os parâmetros requeridos são from e item.
O nome do loop foreach pode ser qualquer coisa que você queira, feito de letras, números e sublinhados.

Exemplo:
A "key" contém a chave para cada valor do loop

A definição pode ser feita assim:


<?php
$smarty
->assign("contatos", array(
    array(
"fone" => "1""fax" => "2""cel" => "3"),
    array(
"fone" => "111-2222""fax" => "333-4444""cel" => "555-6666")
)); 
?>

{foreach name=teste item=contato from=$contatos}
  {foreach key=key item=item from=$contato}
    {$key}: {$item}<br>
  {/foreach}
{/foreach}


O resultado seria:

fone: 1<br>
fax: 2<br>
cel: 3<br>
fone: 111-2222<br> 
fax: 333-4444<br>
cel: 555-6666<br>


Com estas informações, você já deve ser capaz de trabalhar conteúdos dinâmicos em seus scripts, utilizando essa poderosa ferramenta para templates que é a smarty.
That's all, folks!

Gustavo Soares.
euusolinux@gmail.com
Uberlândia-MG

Referencias:
http://www.php.net
http://smarty.php.net
http://www.smartybook.com