Jump to content


Photo

Sistema De Templates Em Asp


  • Faça o login para participar
5 replies to this topic

#1 lbarbosa

lbarbosa

    Novato no fórum

  • Usuários
  • 5 posts
  • Sexo:Não informado

Posted 03/04/2004, 21:30

Ae pessoal, isso é um desafio :] , eu estive vendo como criar uma classe de template para separar os arquivos ASP do HTML e com isso tornar o código mais organizado. Portando eu já escreví o básico e funciona:

* Arquivo class_template.asp
<%
Class Template
Private CorpoTmp, RegVars

Public Sub Registrar(RegNome)
RegVars = split(RegNome,",")
End Sub

Public Sub Parse()
Dim Tmp, Itens
For Each Itens in RegVars
Tmp = Replace(CorpoTmp,"<#"+Itens+">",Session(Itens))
CorpoTmp = Tmp
Next
CorpoTmp = Tmp
End Sub

Public Sub Print()
Response.Write(CorpoTmp)
End Sub

Public Sub Arquivo(Nome)
Dim FSO, TS
Const Leitura = 1
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TS = FSO.OpenTexTFile(Nome, Leitura)
CorpoTmp = TS.ReadAll
TS.Close()
End Sub

End Class
%>


* Arquivo default.asp
<!-- #include file="class_template.asp" -->
<%
Dim Conteudo, Titulo

Session("Conteudo") = "lbarbosa@grupo5.com.br"
Session("Titulo") = "Testando Template"

Set Test = new Template
Test.Arquivo(Server.MapPath("test.html"))
Test.Registrar("Titulo,Conteudo")
Test.Parse
Test.Print
%>


* Arquivo test.html
<Html>
<head>
<title><#Titulo></title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<center>
<h1><#Conteudo></h1>
</center>

<body>

</body>
</html>

PS.: Bom até fácil, agora eu quero fazer um tipo assim:
<loop name="categorias">
<center>
<h1><#Conteudo></h1>
</center>
</loop>
sendo que "categorias" é o vetor no ASP registrado do template, oq a classe template vai fazer é saber quantos itens tem esse vetor e depois repetir ele nessas linhas:
<center>
<h1><#Conteudo></h1>
</center>
Jogando "<#Conteudo>" o conteúdo de cada vetor "Categorias" até terminar os itens


Será que alguém se aventura?
Deixei o código fonte em Anexo ae.

Obrigado pelo Espaço WMOnline
Abraços aos meus amigos wozniak, Tarkan e Salgado(kibe). (y)

Attached Files


' nome: Leandro da Silveira Barbosa
' profissão: G5 // Internet (desenvolvedor web)

#2 lbarbosa

lbarbosa

    Novato no fórum

  • Usuários
  • 5 posts
  • Sexo:Não informado

Posted 04/04/2004, 13:02

* Bom eu tive que resolver o problema :] portanto consegui realizar a segunda versão do nosso programa. Agora ele funciona em um laço de repetição e com IFS dentro do template :] pouco a pouco vamos melhorando a classe.

VERSION 1.1 Beta CLASS_TEMPLATE Autor: lbarbosa@grupo5.com.br

* class_template.asp
<%
'Classe de Template v1.1 Beta
'
' Programador: Leandro da S. B.
' E-mail: lbarbosa@grupo5.com.br
' Empresa: G5 Corporation
'
' Exemplo: (Não esquecer de carregar o arquivo da classe)
' (ASP)
' session("Titulo") = "Eu sou Demais? hehehe"
' Set Exemplo = new Template
' Exemplo.Arquivo(Server.MapPath("test.html"))
' Exemplo.Registrar("Titulo")
' Exemplo.Parse
' Exemplo.Print
'
' (HTML) teste.html
' Eu Digo : <#Titulo>
' Ps.: Toda variável do template registrada terá que está cadastrada por sessão como é o caso do título

Class Template

Private CorpoTmp, RegVars

Public Sub Registrar(RegNome)
RegVars = split(RegNome,",")
End Sub

Private Function ATaxe(Conteudo, Variaveis)
Dim Tmp, Itens
For Each Itens in Variaveis
Tmp = Replace(Conteudo,"<#"+Itens+">",Session(Itens))
Conteudo = Tmp
Session.Contents.Remove(Itens)
Next
ATaxe = Conteudo
End Function

Public Sub Parse()
CorpoTmp = ATaxe(CorpoTmp,RegVars)
End Sub

Public sub ParseLoop(Nome,Variaveis)
Dim Indices, Tmp, VetTmp, Topo, Rodape, Aux, NomeVars, NVars
Partes = split(CorpoTmp, "<#loop "+Nome+">")
Topo = Partes(0)
Tmp = Partes(1)
Rodape = Partes(2)
VetTmp = Session(Nome)
Session.Contents.Remove(Nome)
Aux = ""
For Each Indices in VetTmp
If (Indices <> "") then
NVars = split(Variaveis,",")
For Each NomeVars in NVars
Aux = Aux + Replace(Tmp,"<#"+NomeVars+">",Indices)
Next
End if
Next
CorpoTmp = (Topo + Aux + Rodape)
End Sub

Public sub ParseIf(Nome,Flag)
Dim Partes, Topo, Tmp, Rodape
Partes = split(CorpoTmp, "<#if "+Nome+">")
Topo = Partes(0)
Tmp = Partes(1)
Rodape = Partes(2)
If (Flag = true) then
CorpoTmp = (Topo + Tmp + Rodape)
Else
CorpoTmp = (Topo + Rodape)
End If
End Sub

Public Sub Print()
Response.Write(CorpoTmp)
End Sub

Public Sub Arquivo(Nome)
Dim FSO, TS
Const Leitura = 1
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TS = FSO.OpenTexTFile(Nome, Leitura)
CorpoTmp = TS.ReadAll
TS.Close()
End Sub

End Class
%>


* test.html
<Html>
<head>
<title><#Titulo></title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
Eu Digo que é
<#if SeVerd>Verdadeiro<#if SeVerd>
<#if SeFals>Falso<#if SeFals>

<table align="center" border="2">
<tr>
<#loop Vetor>
<td>
<h1><#Conteudo></h1>
</td>
<#loop Vetor>
</tr>
</table>
</body>
</html>


* default.asp
<!-- #include file="class_template.asp" -->
<%
Dim Conteudo, Titulo, ID, Vet(3)

Session("Titulo") = "Testando Template"
Vet(1) = "Ótimo"
Vet(2) = "Bom"
Vet(3) = "Demais"

session("Vetor") = Vet
session("Conteudo") = "Eu sou eu"

Set Test = new Template
Test.Arquivo(Server.MapPath("test.html"))
Test.Registrar("Titulo,Conteudo")
Test.ParseLoop "Vetor","Conteudo"
Test.ParseIf "SeVerd",true
Test.ParseIf "SeFals",false
Test.Parse
Test.Print
%>


PS.: Agora o desafio é fazer com que a classe template não trabalhe via SESSÂO por que isso torna a performace lenta, eu acho que tem um jeito de transportar uma variável local do default.asp referenciando a class_template.asp se alguém tiver a dica para resolver esse problema ou relatar erros.. por favor não hesite em contactar ou aquí no forum ou no meu email lbarbosa@grupo5.com.br


Fuuuuuiiiii próxima versão tou aí ;)
Anexo a versão mais atualizada! v1.1 Beta

Attached Files


' nome: Leandro da Silveira Barbosa
' profissão: G5 // Internet (desenvolvedor web)

#3 Tarkan

Tarkan

    Powered by Linux - Que inglês! ;)

  • Ex-Admins
  • 651 posts
  • Sexo:Masculino
  • Localidade:Copacabana - RJ

Posted 04/04/2004, 14:45

hehe...
Testei aqui em casa, cara...

Ficou muuuuuuuuito bom, Leo!

Parabéns!

Agora, os nomes podem ser puxados do banco de dados, né?
Ou seja, substituiria a Session pelo dado do BD...

Pegaria os dados dos clientes através do próprio BD, não pela Session.

Tá entendendo a pergunta?

Abraços!

:D
' nome: gustavo veiga
' profissão: ALOG Data Centers do Brasil (analista de sistemas)
' publicidade: ALOG Data Centers do Brasil

#4 lbarbosa

lbarbosa

    Novato no fórum

  • Usuários
  • 5 posts
  • Sexo:Não informado

Posted 04/04/2004, 14:57

Tarkan.. blz
É o seguinte vc teria que jogar todos os dados em um vetor e depois desse vetor atribuir em uma SESSION
e usar a propriedade:
.ParseLoop("nome_do_vetor_sesssion","campo1")
.ParseLoop("nome_do_vetor_session","campo2")
.ParseLoop("nome_do_vetor_session","campo3")
.ParseLoop("nome_do_vetor_session","campo4")
.Parse
.Print

Eu ainda estou analisando isso...
' nome: Leandro da Silveira Barbosa
' profissão: G5 // Internet (desenvolvedor web)

#5 Tarkan

Tarkan

    Powered by Linux - Que inglês! ;)

  • Ex-Admins
  • 651 posts
  • Sexo:Masculino
  • Localidade:Copacabana - RJ

Posted 04/04/2004, 15:14

Beleza... baixei o código e vou trabalhar em cima dele também!

Qualquer alteração, posta aqui!

Abração!

:D
' nome: gustavo veiga
' profissão: ALOG Data Centers do Brasil (analista de sistemas)
' publicidade: ALOG Data Centers do Brasil

#6 wozniak

wozniak

    Hands-On Founder

  • Usuários
  • 578 posts
  • Sexo:Masculino
  • Localidade:Rio de Janeiro / RJ

Posted 05/04/2004, 12:25

how sistema maneiro hein, hehe

t+




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq