Jump to content


lbarbosa

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

Topics I've Started

Classe De Template V2.0

04/05/2004, 00:32

Como venho, novamente trago novidades, nossa classe de template ainda mais séria e com os problemas solucionados da versão 1.5

:: O que tem de novo?
1 - Arrancado Variáveis de Sessões deixando o projeto muito mais rápido.
2 - Código Enxuto
3 - Arrancado e Solucionado Problema de Inclusão de Partes Topo Meio e Fim de um Html (Chamadas de ASP dentro de ASP)

Quem tiver alguma dúvida ou quiser participar do código está livre de alterações e discussões:

CLASS_TEMPLATE.ASP
<%
' Versão 2.0 (Unstable)
'
' Classe de Template em ASP
'
' Autor:  Leandro da S. B.
' E-mail: lbarbosa@grupo5.com.br
' ICQ:    89433360
' MSN:    leo_bs@hotmail.com
'
Class Template

	Private CorpoTmp,RegVars,RegVarsValue
	
	Public Sub Registrar(RegNome)
  RegVars = split(trim(RegNome),",")	
  Redim RegVarsValue(ubound(RegVars))
	End Sub 	 

	Private Sub ErroVar(Tag)
  Response.write("<pre>A Tag <#"+Tag+"> Não foi Encontrada!" _
  & vbCrlf+"Obs.: A Classe template é Sensível a Letras" _
  & "Maiúsculas e Minúsculas.</pre>")
	End Sub

	Public Property Let ParseVar(VarReg,inString)
  i = 0
  For Each Itens in RegVars
 	 If (Itens = VarReg) Then
    RegVarsValue(i) = inString
 	 End If
 	 i = i + 1
  Next
	End Property

	Public Sub Parse()
  Dim Swap
  If (Not IsNull(RegVars)) then
 	 Swap = ATaxe(CorpoTmp,RegVarsValue,RegVars) 	 
 	 CorpoTmp = Swap
  Else
 	 Response.write("<pre>Registre uma variável antes de utilizar o Parse</pre>")
  End If
	End Sub

	Private Function ATaxe(Conteudo, Vetor, Variaveis)
  Dim Tmp, Itens, i
  i = 0
  For Each Itens in Variaveis
 	 Tmp = Replace(Conteudo,"<#"+Itens+">",Vetor(i))
 	 If (Tmp = Conteudo) Then
    ErroVar(Itens)
 	 End If
 	 i = i + 1
 	 Conteudo = Tmp
  Next
  ATaxe = Conteudo
	End Function
	
	Public Property Let ParseLoop(Nome,Variavel,InString)	
  Partes = split(CorpoTmp, "<#loop "+Nome+">")
  Topo = Partes(0)
  Meio = Partes(1)
  Fim = Partes(2)    
  Out = ""
  For Conteudos=lbound(InString,2) to ubound(InString,2)
 	 Swap = Meio 	 
 	 'Response.write("Campo="+Campos+"<br>")
 	 Indices = 0
 	 For Each Campos in Variavel
    If (Not isArray(InString(Indices,Conteudos))) Then
   	 'Response.write("---- "+InString(Indices,Conteudos)+"<BR>")
   	 Tswap = Replace(trim(Swap),"<#"+Campos+">",InString(Indices,Conteudos))
   	 If (trim(Swap) = Tswap) Then
      ErroVar(Campos)
   	 End If
   	 Swap = Tswap
   	 Indices = Indices + 1
    End If    
 	 Next
 	 Out = Out + Tswap 	 
  Next
  CorpoTmp = (Topo + Out + Fim)
	End Property
	
	Public sub ParseIf(Nome,Flag)
  Partes = split(trim(CorpoTmp), "<#if "+Nome+">")
  If (isArray(Partes) and (Ubound(Partes)>1)) Then
 	 Topo = Partes(0)
 	 Tmp = Partes(1)
 	 Rodape = Partes(2)  
 	 If (Flag = true) then 	 
    CorpoTmp = (Topo + Tmp + Rodape)
 	 Else
    CorpoTmp = (Topo + Rodape)
 	 End If
  End If
	End Sub
	
	Public Sub Print()
  Response.write(CorpoTmp)
  Erase RegVars
  Erase RegVarsValue
  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!</pre>")
  End If
	End Function

	Public Function Arquivo(Nome)
  If (CorpoTmp = "") Then
 	 CorpoTmp = trim(LerArquivo(Nome))  
  Else
 	 CorpoTmp = CorpoTmp + trim(LerArquivo(Nome))
  End If
	End Function
	
End Class
%>

DEFAULT.ASP

<!-- #include file="class_template.asp" -->
<%
Dim Titulo, VetName(2),VetValue(2,2)

VetName(0) = "Campo1"
VetValue(0,0) = "leo"
VetValue(0,1) = "lua"
VetValue(0,2) = "li"

VetName(1) = "Campo2"
VetValue(1,0) = "Katia"
VetValue(1,1) = "Taisa"
VetValue(1,2) = "Carla"

VetName(2) = "Campo3"
VetValue(2,0) = "jorge"
VetValue(2,1) = "luiz"
VetValue(2,2) = "roberto"

Set Pagina = new Template
Pagina.Arquivo(Server.MapPath("test.html"))
Pagina.Registrar("Titulo")
Pagina.ParseVar("Titulo") = "Testando Template"
Pagina.ParseLoop("Vetor",VetName) = VetValue
Pagina.ParseIf "SeVerd",true
Pagina.ParseIf "SeFals",false
'Registrando conteúdo de todas as TAGS do Template do file test.html
'e guardando na memória
Pagina.Parse

'Include no Código
%>
<!-- #include file="test1.asp" -->
<%

'Imprimindo no Html
Pagina.Print
%>


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


TEST1.ASP

<%
Pagina.Arquivo(Server.MapPath("test1.html"))
Pagina.Registrar("texto")
Pagina.ParseVar("texto") = "Olha que lega vc pode ter include dentro de tags de templates. :]"
Pagina.Parse
%>


TEST1.HTML

<marquee><#texto></marquee>
</center>
</body>
</html>


Para quem não sabe eu utilizo essa classe aos meus projetos que tem banco de dados e funciona perfeitamente... :] grato...


Outro dia passo ae... denovo ;]

Template Em Asp V1.2stable

10/04/2004, 00:02

:P Olá Amigos..
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.. :P a versão anteriores continham bugs e algumas coisas não funcionavam como queriamos era o caso do <#loop> agora vc pode colocar a saída do seu SQL em vetor jogar ele em sessão e depois apontar ele no template... isso torna nosso projeto mais organizado.. além tbm da vantagem de, se vc quer fazer um projeto e que seu cliente não veja o código usamos um cold para deixar encriptado o ASP e o html separado.. para assim o cliente quiser mudar o visual na mão só mexer no html.. porém no asp ele nem vai ter acesso... ;]

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

Sistema De Templates Em Asp

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)

IPB Skin By Virteq