Jump to content


lbarbosa

Member Since 13/03/2004
Offline Last Active 11/05/2004, 12:31
-----

Posts I've Made

In Topic: Sistema De Templates Em Asp

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

In Topic: Sistema De Templates Em Asp

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

IPB Skin By Virteq