-2

Usando Blocos Dinâmicos com a Classe FastTemplate (Parte 1)

criado por Olavo Alexandrino em 09/01/2003 9:53pm
Andei pesquisando sobre Templates e achei muita coisa na Net e em alguns livros. Mesclando os dados, resolvi publicar esse artigo que esclarece alguns pontos básicos para se criar templates com blocos dinâmicos usando a classe FastTemplate.

As vezes é interessante separar a lógica do designer do site. E o motivo é simples: um desenhita gráfico não precisaria ter a necessidade de entender da lógica da linguagem usada pelo programdor do projeto. Dessa forma, poderia mudar o visual de uma página de forma praticamente independente.Isso levaria a otimização dos custos e o tempo de implementação de um sistema/site.

Por isso a técnica de usar Templates é muito bem vinda quando se trata de sites onde o "update", principalmente o visual, é constatemente atualizado. Ainda mais se você tiver um sistema com um visual e o seu próximo cliente pedir personalizado. Você teria que reescrever boa parte do código. Mas se você usa a técnica dos templates irá economizar bastante tempo e também dinheiro!!!

Irei utilizar a Classe FastTemplate por ser de simples uso e de ser uma das mais usadas no PHP!!!

PASSO 1

Bem o primeiro passo fazer o download em:
http://www.thewebmasters.net/php/FastTemplate.phtml

PASSO 2

Depois de você descompactar os arquivos e configure um diretório de includes no seu servidor, para de qualquer que seja o local que você esteja não precise colocar o caminho completo da Classe.

PASSO 3

O Uso (arquivo: cria_template.php):
Coloque uma include para a classe para que TODOS os métodos da classe estejam disponíveis no arquivo cria_template.php!

<?php
# include para o Classe FastTemplate
include ("class.FastTemplate.php3");
?>

PASSO 4

No mesmo arquivo (cria_template.php) crie uma instância para um novo objeto.

<?php
# cria uma nova Instância de objeto para a Classe
$template = new FastTemplate('.');
?>

O parâmetro => '.' deve ser o caminho onde estará os templates. Nesse caso na mesma pasta do arquivo "cria_template.php". Se, por acaso fosse no diretório modelos deveria obedecer a sintaxe:

<?php
$template = new FastTemplate('modelos');
?>

PASSO 5

Criar o objeto de template referenciando o arquivo de template:

<?php
$template->define(array("pagina"=>"pagina.tpl"));
?>

No casso acima o nome "pagina" será a referência do objeto para o arquivo de template "pagina.tpl". A extensão poderia ser HTML, mas é aconselhável manter o "*.tpl" para sabermos que é um template.

PASSO 6

Devemos agora criar outro template: O dinâmico. Aquele que considerá um bloco dinâmico para que seja usado apenas uma arquivo de template.

<?php
$template->define_dynamic("linhas","pagina");
# associa o modelo dinâmico "linhas" para o template página
# o nome "linhas" referes-e a um bloco dinâmico do mesmo nome na
# página do template definida em "pagina.tpl"
?>

PASSO 7

Construir um Loop de exibição de dados do Bloco dinâmico na página de Template. No caso usei o MySQL, mas pode-se usar qualquer Banco de Dados ou até mesmo, por exemplo, um loop para construnção de um drop down de MÊS/DIA/ANO.

<?php
$dados=mysql_query("SELECT nome,fone from tabela ORDER BY nome");
while (list($nome,$fone)=mysql_fetch_row($dados)) {
    $template->assign(array("{NOME}" => $nome, {FONE}" => $fone ));
    $template->parse('LINHAS','.linhas');
}
?>

No caso acima o Template Dinâmico tem apenas duas CONSTANTES. Que são campos retornados duma pesquisa SQL feita no MySQL e armazenada na variável $dados.

Deverá ser feita uma atribuição aos valores das contantes: {NOME} e {FONE}. A Classe percorrerá o arquivo "pagina.tpl" e onde encontrar essas constantes a substituirá pelo conteúdo retornado pela consulta SQL.

Depois é feita uma "concatenação" dos resultados da pesquisa no bloco dinâmico "linhas" definido no passo 6. O 1º argumento ,'LINHAS', pode ser qualquer nome. Mas é preferível colocar nomes sugestivos.

PASSO 8

Agora deverá ser feita a atribuição do resultado do bloco no primeiro template que é a página completa do Template:

<?php
$template->parse("SAIDA",'pagina');
$template->FastPrint("SAIDA");	
?>

O 1º argumento ,'SAIDA', pode ser qualquer nome. Mas é preferível colocar nomes sugestivos

PASSO 9

O ARQUIVO "pagina.tpl"!!!!
Esse arquivo não deverá conter nenhuma TAQ PHP, deverá conter apenas HTML puro e logicamente as constante definidas na página "cria_template.php". No caso apresentado será exibido os dados numa tabela de forma que a parte dinâmica, as linhas, estarão definidas DENTRO do BLOCO DINÂMICO. O bloco dinâmico é delimitado pelos comentários HTML!

<!-- BEGIN DYNAMIC BLOCK: linhas -->
      ...corpo...
<!-- END DYNAMIC BLOCK: linhas -->

Deverá ser seguida munuciosamente as palavras do comentários. Ou seja, é case sensitive. Por isso mesmo coloque tudo em MAIÚSCULA!!

<table width="100%" border="0" align="center" class="fonte_tabela">
  <!-- BEGIN DYNAMIC BLOCK: linhas -->
  <tr>
    <td width='100%' colspan='0' rowspan='0'>
      {NOME}<br>
      {FONE}<br>
    </td>
  <tr> 
  <!-- END DYNAMIC BLOCK: linhas -->
</table> 	

Bem pessoal é isso aí!!
Qualquer dúvida falem comigo!!!

Olavo Alexandrino
Recife - PE
www.recifeminhacidade.hpg.com.br

PS:
Se você teve dificuldade no entendimento desse artigo, é aconselhável que primeiramente dê uma olhada nos artigos do Fábio Berbert de Paula, são muito bons!!

http://phpbrasil.com/articles/article.php/id/247 (Parte I)
http://phpbrasil.com/articles/article.php/id/266 (Parte II)

Comentários:

Mostrando 1 - 6 de 6 comentários
Acredito que a FastTemplate e Smarty junto também com a PHPLib seja as mais conhecidas até mesmo pela facilidade de se encontrar artigos em livros e internet.

A FastTemplate por exemplo você encontra também nos seguintes livros:

Professional PHP Programando
http://www.phpbrasil.com/books/book.php/id/5

PHP 4: Guia do Programador
http://www.phpbrasil.com/books/book.php/id/2

Segundo

http://pukomuko.esu.lt/phemplate/benchmark/

a FastTemplate se apresenta como uma das menos eficientes, mas não sei até que ponto aquilo é verdade até pelo fato dela existir documentada em tantos lugares como nesses livros.

Lá existe uma porção de classes inclusive a Smarty.

inté
Olavo
22/01/2003 6:37am (~22 anos atrás)

Rafael Zanoni disse:
Dei uma olhada no smarty e vi que ele é muito extenso, algumas funções são desnecessárias. Você conhece algum outro template que seja simples e eficaz?
22/01/2003 5:37am (~22 anos atrás)

Bem Rafael para utilizar esse procedimento você necessitaria da técnica de ANINHAMENTO de blocos dinâmicos. Onde você poderá mesclar quantos WHILEs dinâmicos quiser.

Já postei o Segundo Módulo do artigo. Falta a liberação do João para publicação. Então aguarde que em breve ele irá postar no ar.

Mas se quiser por você mesmo descobrir como faz isso. Veja os artigos de Fábio Berbert de Paula I e II que juntamento com o meu irão dá um luz de como se faz isso.

;)
20/01/2003 6:23am (~22 anos atrás)

aí você tem que configurar outra página de template apenas para exibição nesse caso.

ex.:

if (mysql_num_rows($dados)>0):

$template-> define (array("pagina"=>"pagina.html"));
$template-> define_dynamic("dinamico","pagina");

while (list($nome,$fone)=mysql_fetch_row($dados)) {
$template->assign(array("{NOME}" => $nome, {FONE}" => $fone ));
$template->parse('LINHAS','.linhas');
}

else:

$template-> define (array("pagina"=>"pagina_vazia.html"));
$template-> define_dynamic("dinamico","pagina");

endif;

15/01/2003 6:24am (~22 anos atrás)

João K. disse:
Já testei vários class templates mas no final eu acabei RE-aproveitando o class template do phpBB hehehhe

Esse site
http://pukomuko.esu.lt/phemplate/benchmark/
tem um programinha fazendo as comparações do benchmark de várias class. Quem tiver interessado no assunto pode dar uma olhada.
14/01/2003 10:54am (~22 anos atrás)

Os sistemas de templates são realmente uma mão na roda. Utilizei para geração de emails de resposta e é realmente fabuloso.
Sobrando um tempo vou postar aqui.
Por acaso você já mecheu com o Smart Engine Templates também?
10/01/2003 7:11am (~22 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)