vim dizer que demorei 3 dias para pensar em como fazer esse algoritmo hehehe...
mas cabei de realizar a versão 1.2 Stable já em uso agora.. do nosso sistema que separa o ASP do HTML
ATENÇÃO: Antes de executar o código crie uma pasta no caminho do seu IIS
chamado exec
exemplo: c:\inetpub\exec
Feito isso vc terá que dá permissão no IIS de executar e gravar script nessa pasta
Pronto agora é só rodar e ver ;]
* class_template.asp
<%
'Classe de Template v1.2 Stable
'
' Programador: Leandro da S. B.
' E-mail: lbarbosa@grupo5.com.br
' Empresa: G5 Corporation
'
' Exemplo no site: http://www.grupo5.co...sa/template.zip
'
Class Template
Private CorpoTmp, RegVars
Public Sub Registrar(RegNome)
RegVars = split(RegNome,",")
End Sub
Private Function ATaxe(Conteudo, Variaveis)
Dim Tmp, Itens
If (Not isNull(Variaveis)) then
For Each Itens in Variaveis
Tmp = Replace(Conteudo,"<#"+Itens+">",Session(Itens))
Conteudo = Tmp
Session.Contents.Remove(Itens)
Next
ATaxe = Conteudo
End If
End Function
Public Sub Parse()
Dim Swap
If (Not IsNull(RegVars)) then
Swap = ATaxe(CorpoTmp,RegVars)
CorpoTmp = Swap
Else
Response.write("<pre>Registre uma variável antes de utilizar o Parse</pre>")
End If
End Sub
Public sub ParseLoop(Nome,Variaveis)
Dim Fim, Topo, Meio, Tmp, Indices, Sessoes, Vet()
Dim ContA, ContB, A, B, Sessao, Valor, Out, Tswap
Partes = split(CorpoTmp, "<#loop "+Nome+">")
Topo = Partes(0)
Meio = Partes(1)
Fim = Partes(2)
Tmp = split(Variaveis,",")
ContA = 1
ContB = 1
Redim Vet(ubound(tmp)+1,ubound(session(tmp(0)))+2)
For each Sessoes in Tmp
Vet(ContA,1) = Sessoes
ContB = 2
For each Indices in session(Sessoes)
If Indices <> "" then
Vet(ContA,ContB) = Indices
ContB = ContB + 1
End If
Next
ContA = ContA + 1
Next
ContA = ContA - 1
ContB = ContB - 1
Out = ""
For Y=2 to ContB
Swap = Meio
For F = 1 to ContA
Sessao = Vet(F,1)
Valor = Vet(F,Y)
Tswap = Replace(Swap,"<#"+Sessao+">",Valor)
Swap = Tswap
Next
Out = Out + Tswap
Next
CorpoTmp = (Topo + Out + Fim)
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()
Exec(CorpoTmp)
End Sub
Public Function LerArquivo(Nome)
Dim FSO, TS, Temp
Const Leitura = 1
Set FSO = CreateObject("Scripting.FileSystemObject")
If (FSO.FileExists(Nome)) then
Set TS = FSO.OpenTexTFile(Nome, Leitura)
Temp = TS.ReadAll
TS.Close()
LerArquivo = Temp
Else
Response.write("<pre>O Caminho do arquivo "+Nome+" está incorreto!")
End If
End Function
Public Sub Arquivo(Nome)
CorpoTmp = LerArquivo(Nome)
End Sub
Public Sub Exec(strExe)
Dim FSO, TS, Temp
Const Gravacao = 1
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TS = FSO.CreateTexTFile("c:\inetpub\exec\tmp.asp", Gravacao)
TS.Write(strExe)
TS.Close
Server.Execute("\exec\tmp.asp")
End Sub
End Class
%>
* default.asp
<!-- #include file="class_template.asp" -->
<%
Dim Titulo, Vet(3)
session("Titulo") = "Testando Template"
Vet(1) = "Ótimo"
Vet(2) = "Bom"
Vet(3) = "Demais"
session("Campo1") = Vet
Vet(1) = "PHP"
Vet(2) = "ASP"
Vet(3) = "ASP.NeT"
session("Campo2") = Vet
Vet(1) = "leo_bs@hotmail.com"
Vet(2) = "lbarbosa@grupo5.com.br"
Vet(3) = "whohoox@hotmail.com"
session("Campo3") = Vet
Set Pagina = new Template
Pagina.Arquivo(Server.MapPath("test.html"))
session("modulo") = Pagina.LerArquivo(Server.MapPath("test1.asp"))
Pagina.Registrar("Titulo,modulo")
Pagina.ParseLoop "Vetor","Campo1,Campo2,Campo3"
Pagina.ParseIf "SeVerd",true
Pagina.ParseIf "SeFals",false
Pagina.Parse
Pagina.Print
%>
* test1.asp
<%
Response.write("Outro Módulo Aquí em ASP ou HTML ;]")
%>
* 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="1">
<#loop Vetor>
<tr>
<td>
<h1>Campo1</h1>
</td>
<td>
<h1><#Campo1></h1>
</td>
<td>
<h2>Campo2</h2>
</td>
<td>
<h2><#Campo2></h2>
</td>
<td>
<h3>Campo3</h3>
</td>
<td>
<h3><#Campo3></h3>
</td>
</tr>
<#loop Vetor>
</table>
<marquee><#modulo></marquee>
</body>
</html>
PS.: Bom agora nossa etapa é:
* Arrumar um jeito de não usar variável de sessão pois isso torna lento a performace do programa.
* Outro detalhe agora.. eu acho que afeta a segurança.. teremos que ver isso com alguém q fuça falhas... pois eu fiz uma injeção de código ASP via Server.execute
gravando o nome do file em temporário... teríamos que ver se existe outro meio de corrigir isso pois eu tive que adotar essa metodologia.. pois não conseguia fazer um link com outra página em ASP num mesmo código.
Ufa.. essa foi complicado mas.. fiz..
Bom.. agora estou aberto a discussão sobre o código..
qualquer bug relatar para meu email ou aquí no forum lbarbosa@grupo5.com.br
Fui......










