[SP-pm] Templates com CGI puro

Andre Carneiro andregarciacarneiro at gmail.com
Thu Aug 27 06:07:28 PDT 2009


2009/8/27 Adimir <adimircolen at gmail.com>

> Andre Carneiro
> eu quis dizer o seguinte, tenho padrões de telas tipo tabelas, formularios,
> e a idea seria fazer uma template com uma lógica interna para que eu pudesse
> passar o numero de colunas, e os resultados independente se a tabela fosse
> ex. somente de Nome e Telefone ou se fosse de Nome, telefone, endereço e
> email. entendeu ?
>

Sim, isso já é possível nesse exemplo que eu dei, você só precisa construir
a lógica disso utilizando a meta-linguagem do template-toolkit, que inclui
estruturas de decisão, loops etc. Com isso, pode lidar com estruturas de
dados complexas em perl, iterando, acessando chaves e valores de hashes. Daí
você pode decidir quando colocar uma coluna na tabela que é de telefone, ou
nome, baseando-se num padrão de nomes, ou algo que valha,  enviados no
conjunto de dados que você enviaria para o template-toolkit processar. Desse
modo, você cria um 'grid' de dados dinâmico.

Ou você pode usar coisas prontas como JQuery, ou ExtJS etc., que monta grids
dinâmicos(com gráficos bonitinhos), automaticamente e de forma
assíncrona(AJAX), trabalhando apenas os parâmetros das colunas com o
template-toolkit.

Esse é um jeito de fazer. Imagino que devem haver outros. Pessoal !? Mais
sugestões, por favor!


Cheers!



> E quero analisar os problemas que isso pode gerar futuramente.
>
> my $cgi = CGI->new();
> print $cgi->header;
>
> my $template_config = { INTERPOLATE => 0}; #RTFM em Template para mais
> detalhes.
> my $template = Template->new($template_
> config);
> my $template_file = '/path/to/template/file_inteligente.tmpl'; #tmpl é uma
> espécie de 'padrão clássico'(opcional).
> my $dados = algum_metodo_recuperador_de_dados();
>
> algum_metodo_recuperador_de_dados(); # que pode
> _________________
> |    |                       |
> |    |    template 1    |
> |    |                       |
> |    |_____________|
> |                            |
> |       template2       |
> |________________|
>
> como se a template 1 fosse utilisada em varias telas e os
> "algum_metodo_recuperador_de_dados" retornariam dados diferentes como um
> hash{titulo_coluna} = @elementos_da coluna, alguns metodos retornariam nome
> e telefone e outro retornaria nome, telefone, end. por ex.
>

> ex: hash{nome} = @nomes
> hash{telefone} = @nomes
>
>
> ##########
> #::Adimir::#
> ##########
>
>
> 2009/8/26 Andre Carneiro <andregarciacarneiro at gmail.com>
>
>
>>
>> 2009/8/26 Adimir <adimircolen at gmail.com>
>>
>>> Ola lista, seguinte não é problema exclusivamente, gostaria de opiniões
>>> sobre usar "use Template" em um sistema que já tem como base o uso de CGI
>>> básico, emitindo htmls no meio do código, a ideia base e principal seria a
>>> de separar os htmls totalmente dos codigos perl, e quanto a componentização
>>> de templates ?
>>
>>
>> A sua colocação está um pouco estranha. CGI é uma coisa, template é outra,
>> mas podem(e devem) trabalhar juntos. Mas estou supondo que você quer dizer
>> que o teu código CGI está gerando HTML sem o uso de templates(espero estar
>> enganado ;)).
>>
>> A idéia básica é separar o código do HTML mesmo. Templates é uma das
>> ferramentas que você deve usar para implementar esse tipo de arquitetura.
>> Outra ferramenta que você deve dar uma olhada é uma metodologias muito
>> utilizada hoje:  MVC(Model View Controler - http://
>> pt.wikipedia.org/wiki/MVC<http://www.google.com.br/url?&ei=8imVSvWLMuCFmQepheytDA&sig2=-Nsh8TJkfsQ6AjJplw4MrA&q=http://pt.wikipedia.org/wiki/MVC&ei=8imVSvWLMuCFmQepheytDA&sa=X&oi=define&ct=&cd=1&usg=AFQjCNGv4UXfV_-9HOJxBGeCnQO0weuhzw>).
>>
>> Existem frameworks baseados em MVC que você pode utilizar, e estão
>> disponíveis na maioria das linguagens modernas. Em Perl o mais utilizado e
>> famoso é o Catalyst ( http://www.catalystframework.org ).
>>
>> Outra coisa que você deve olhar é o suporte básico a orientação a
>> objetos(perldoc perlobj - e os módulos  Class, Class::MOB etc.). Depois
>> seria módulo de extensão ao suporte de orientação a objetos, o módulo Moose(
>> http://www.iinteractive.com/moose/ ).
>>
>> Aproveitando, existem canais muito legais que podem ajudar você a
>> esclarecer suas dúvidas de maneira mais rápida, e também ajuda você a se
>> integrar melhor na comunidade. Para isso utilizamos o canal IRC -
>> http://p
>>
>>
>>
>>>
>>> Ex: templates de listagem (tabelas) que teriam alguma logica embarcada
>>> para poder ser reutilizada em diferentes tipos de tabelas.
>>> Essa conponentização não acarreta em problemas ? complicações futuras e
>>> limitações ?
>>>
>>>
>> O que você quis dizer com 'lógica embarcada' ??? Desculpe a ignorância...
>>
>> Não entendi exatamente o seu problema. Gostaria que explicasse melhor
>> exatamente o que você precisa fazer(se puder).
>>
>>
>> Exemplo simples abaixo:
>>
>> <code>
>> #! /usr/bin/perl
>>
>> use strict;
>> use Template;
>> use CGI;
>>
>>
>> my $cgi = CGI->new();
>> print $cgi->header;
>>
>> my $template_config = { INTERPOLATE => 0}; #RTFM em Template para mais
>> detalhes.
>> my $template = Template->new($template_config);
>> my $template_file = '/path/to/template/file.tmpl'; #tmpl é uma espécie de
>> 'padrão clássico'(opcional).
>> my $dados = algum_metodo_recuperador_de_dados();
>>
>> $template->process($template_file,{texto_h1 => 'TESTE',dados => $dados});
>> #aqui você pode passar qualquer coisa para o template. Ele suporta as
>> estruturas de dados existentes em perl, portanto você pode iterá-las caso
>> necessário dentro do próprio template, através de uma meta-linguagem
>> própria. Mais detalhes e exemplos em -
>> http://template-toolkit.org/docs/manual/VMethods.html
>>
>> sub algum_metodo_recuperador_de_dados {
>> #extrema preguiça de escrever isso!
>> }
>>
>>
>> </code>
>>
>>
>> #Enquanto isso lá no template...
>>
>>
>> <code>
>>
>> <HTML>
>> <HEADER><!-- um montao de coisa aqui --></HEADER>
>> <BODY>
>> <H1>[%texto_h1%]</H1>
>>
>> <TABLE>
>> [% FOREACH item IN dados%]
>>    <TR>
>>          <td>item.algummetodoouatributo</td>
>>    </TR>
>> [% END %]
>> </TABLE>
>>
>> </BODY>
>> </HTML>
>>
>> </code>
>>
>>
>> Como vc pode ver, existe um FOREACH dentro do template. Isso faz parte da
>> meta-linguagem q eu mencionei. Ele itera o objeto que eu passei através do
>> método 'process'. Qq dúvida escreva aqui, ou entre no irc - irc.perl.org- canal #
>> sao-paulo.pm
>>
>>
>>
>> Cheers!
>>
>>
>>
>>
>>>
>>> ##########
>>> #::Adimir::#
>>> ##########
>>>
>>> _______________________________________________
>>> SaoPaulo-pm mailing list
>>> SaoPaulo-pm at pm.org
>>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>>
>>
>>
>>
>> --
>> André Garcia Carneiro
>> Analista/Desenvolvedor Perl
>>
>>
>> _______________________________________________
>> SaoPaulo-pm mailing list
>> SaoPaulo-pm at pm.org
>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>
>
>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm at pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>



-- 
André Garcia Carneiro
Analista/Desenvolvedor Perl
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20090827/1c60ff60/attachment-0001.html>


More information about the SaoPaulo-pm mailing list