Este mecanismo de modelo é mais conveniente. É combinado com HTML. O código de cópia é o seguinte:
Modelo de aula
Privado c_Char, c_Path, c_FileName, c_Content, c_PageUrl, c_CurrentPage, c_PageStr, ReplacePageStr
Nome da etiqueta privada
'***************************************
'Definir codificação
'***************************************
Propriedade pública Let Char(ByVal Str)
c_Char = Str
Fim da propriedade
Propriedade Pública Obter Char
Caráter = c_Char
Fim da propriedade
'***************************************
'Definir caminho da pasta do modelo
'***************************************
Propriedade pública Let Path (ByVal Str)
c_Path = Str
Fim da propriedade
Caminho de obtenção de propriedade pública
Caminho = c_Path
Fim da propriedade
'***************************************
'Define o nome do arquivo do modelo
'***************************************
Propriedade pública Let FileName(ByVal Str)
c_NomeArquivo = Str
Fim da propriedade
Propriedade pública Obter FileName
NomeArquivo = c_NomeArquivo
Fim da propriedade
'***************************************
'Obtém o caminho específico do arquivo de modelo
'***************************************
Propriedade pública Obter FilePath
Se Len(Caminho) > 0 Então Caminho = Substituir(Caminho, /, /)
If Right(Path, 1) <> / Then Path = Path & /
FilePath = Caminho e Nome do Arquivo
Fim da propriedade
'***************************************
'Definir URL de paginação
'***************************************
Propriedade pública Let PageUrl(ByVal Str)
c_PageUrl = Str
Fim da propriedade
Propriedade pública Obter PageUrl
PageUrl = c_PageUrl
Fim da propriedade
'***************************************
'Definir paginação da página atual
'***************************************
Propriedade pública Let CurrentPage(ByVal Str)
c_CurrentPage = Str
Fim da propriedade
Propriedade pública Obter CurrentPage
PáginaAtual = c_PáginaAtual
Fim da propriedade
'***************************************
'Conteúdo de saída
'***************************************
Propriedade pública é liberada
Resposta.Write(c_Content)
Fim da propriedade
'***************************************
'Inicialização da classe
'***************************************
Subclasse Privada_Initialize
NomeTag = pjblog
c_Char = UTF-8
SubstituirPageStr = Array(, )
Finalizar sub
'***************************************
' Filtra caracteres conflitantes
'***************************************
Função privada doQuote (ByVal Str)
doQuote = Substituir(Str, Chr(34), )
Função final
'***************************************
'Terminação de classe
'***************************************
Subclasse Privada_Terminate
Finalizar sub
'***************************************
'Método de carregar arquivo
'***************************************
Função privada LoadFromFile (ByVal cPath)
Escurecer objeto
Definir obj = Server.CreateObject(ADODB.Stream)
Com objeto
.Tipo = 2
.Modo = 3
.Abrir
.Charset = Caractere
.Posição = .Tamanho
.LoadFromFile Servidor.MapPath(cPath)
LoadFromFile = .ReadText
.fechar
Terminar com
Definir obj = Nada
Função final
'*********************************************
'Obtém o objeto correspondente regular
'*********************************************
Função pública GetMatch (ByVal Str, ByVal Rex)
Dim Reg, Mag.
Definir Reg = Novo RegExp
Com registro
.IgnoreCase = Verdadeiro
.Global = Verdadeiro
.Padrão = Rex
Definir Mag = .Execute(Str)
Se Mag.Count > 0 Então
Definir GetMatch = Mag
Outro
Definir GetMatch = Server.CreateObject(Scripting.Dictionary)
Terminar se
Terminar com
Definir Reg = nada
Função final
'***************************************
'Abrir documento
'***************************************
Sub público aberto
c_Content = LoadFromFile (Caminho do Arquivo)
Finalizar sub
'***************************************
'Execução em buffer
'***************************************
Sub-buffer público
c_Content = GridView(c_Content)
Chame ExecuteFunction
Finalizar sub
'***************************************
'GridView
'***************************************
Função privada GridView (ByVal o_Content)
Escurecer correspondências, subcorrespondências, subtexto
Atributo Dim, Conteúdo
Definir correspondências = GetMatch(o_Content, /< & TagName & /:(/d+?)(.+?)/>([/s/S]+?)<// & TagName & /:/1/>)
Se Matches.Count > 0 Então
Para cada subpartida nas partidas
Atributo = SubMatches.SubMatches(1) 'kocms
Conteúdo = SubMatches.SubMatches(2) ' <Colunas>...</Colunas>
SubText = Process(Attribute, Content) 'Retorna os resultados de todas as execuções do processo
o_Content = Replace(o_Content, SubMatches.value, < & SubText(2) & SubText(0) & > & SubText(1) & </ & SubText(2) & >, 1, -1, 1) ' Substituir variável de rótulo
Próximo
Terminar se
Definir correspondências = nada
If Len(ReplacePageStr(0)) > 0 Then ' Determine se a variável de rótulo tem um valor e substitua-a se tiver.
o_Content = Substituir(o_Content, ReplacePageStr(0), ReplacePageStr(1), 1, -1, 1)
ReplacePageStr = Array(, ) 'Limpa a variável do array após a substituição
Terminar se
GridView = o_Conteúdo
Função final
'***************************************
'Determina atributos
'***************************************
Processo de função privada (atributo ByVal, conteúdo ByVal)
Escurecer correspondências, subcorrespondências, texto
Dim MatchTag, MatchContent
Dim fonte de dados, nome, elemento, página, id
fonte de dados =: Nome =: Elemento =: página = 0: id =
Definir correspondências = GetMatch(Atributo, /s(.+?)/=/(.+?)/)
Se Matches.Count > 0 Então
Para cada subpartida nas partidas
MatchTag = SubMatches.SubMatches(0) 'Obtém o nome do atributo
MatchContent = SubMatches.SubMatches(1) 'Obtém o valor do atributo
If Lcase(MatchTag) = name Then Name = MatchContent ' Obtém o valor do atributo name
If Lcase(MatchTag) = datasource Then datasource = MatchContent' Obtém o valor do atributo datasource
If Lcase(MatchTag) = element Then Element = MatchContent ' Obtém o valor do atributo do elemento
If Lcase(MatchTag) = page Then page = MatchContent ' Obtém o valor do atributo da página
If Lcase(MatchTag) = id Then id = MatchContent ' Obtém o valor do atributo id
Próximo
Se Len(Nome) > 0 E Len(MatchContent) > 0 Então
Text = Analysis(datasource, Name, Content, page, id) 'Executa análise de propriedades
Se Len(fonte de dados) > 0 Então Atributo = Substituir(Atributo, fonte de dados= & fonte de dados & , )
Se página > 0 Então Atributo = Substituir(Atributo, página= & página &, )
Atributo = Substituir (Atributo, nome = & Nome & , , 1, -1, 1)
Atributo = Substituir (Atributo, elemento = & Elemento & , , 1, -1, 1)
Processo = Array(Atributo, Texto, Elemento)
Outro
Processo = Array(Atributo, , div)
Terminar se
Outro
Processo = Array(Atributo, , div)
Terminar se
Definir correspondências = nada
Função final
'***************************************
' Analisar
'***************************************
Análise de função privada (ByVal id, ByVal Name, ByVal Content, ByVal page, ByVal PageID)
Escurecer dados
Select Case Lcase(Nome) 'Selecionar fonte de dados
Loop de caso Dados = DataBind(id, Conteúdo, página, PageID)
Caso para Dados = DataFor(id, Conteúdo, página, PageID)
Finalizar seleção
Análise=Dados
Função final
'***************************************
'Vincular fonte de dados
'***************************************
Função privada DataBind (ByVal id, ByVal Content, ByVal page, ByVal PageID)
Texto escuro, correspondências, subcorrespondências, subtexto
Execute Text = & id & (1) 'Carregar fonte de dados
Definir correspondências = GetMatch(Content, /<Columns/>([/s/S]+)/<//Columns/>)
Se Matches.Count > 0 Então
Para cada subpartida nas partidas
SubText = ItemTemplate(SubMatches.SubMatches(0), Text, page, PageID)' Executar substituição do módulo
Conteúdo = Substituir(Conteúdo, SubMatches.value, SubTexto, 1, -1, 1)
Próximo
DataBind = Conteúdo
Outro
DataBind =
Terminar se
Definir correspondências = nada
Função final
'***************************************
'Corresponde à instância do modelo
'***************************************
Função privada ItemTemplate (ByVal TextTag, ByVal Text, ByVal page, ByVal PageID)
Dim Correspondências, SubMatches, SubMatchText
Dim SecMatch, SecSubMatch
Dim i, TempText
Escurecer TextLen, TextLeft, TextRight
Definir correspondências = GetMatch(TextTag, /<ItemTemplate/>([/s/S]+)/<//ItemTemplate/>)
Se Matches.Count > 0 Então
Para cada subpartida nas partidas
SubMatchText = SubMatches.SubMatches(0)
'----------------------------------------------------------
' Inicia o aninhamento do loop
'----------------------------------------------------------
SubMatchText = GridView(SubMatchText)
'----------------------------------------------------------
' Fim do aninhamento do loop
'----------------------------------------------------------
Se UBound(Texto, 1) = 0 Então
TextoTemp=
Outro
TextoTemp=
'----------------------------------------------------------------
'Iniciar paginação
'----------------------------------------------------------------
Se Len(página) > 0 E página > 0 Então
Se Len(CurrentPage) = 0 ou CurrentPage = 0 Então CurrentPage = 1
TextLen = UBound(Texto, 2)
TextLeft = (Página Atual - 1) * página
TextRight = PáginaAtual * página - 1
Se TextLeft < 0 Então TextLeft = 0
Se TextRight > TextLen Então TextRight = TextLen
c_PageStr = MultiPage(TextLen + 1, página, CurrentPage, PageUrl, float:right, , False)
Se Int(Len(c_PageStr)) > 0 Então
SubstituirPageStr = Array(<página: & Trim(PageID) & />, c_PageStr)
Outro
ReplacePageStr = Array(<página: & Trim(PageID) & />, )
Terminar se
Outro
TextoEsquerda = 0
TextRight = UBound(Texto, 2)
Terminar se
Para i = TextLeft para TextRight
TempText = TempText & ItemReSec(i, SubMatchText, Text) 'Carregar conteúdo do modelo
Próximo
Terminar se
Próximo
ItemTemplate = TempText
Outro
ItemTemplate =
Terminar se
Definir correspondências = nada
Função final
'***************************************
'Substitui a string do modelo
'***************************************
Função privada ItemReSec (ByVal i, ByVal Text, ByVal Arrays)
Escurecer correspondências, subcorrespondências
Definir correspondências = GetMatch(Text, /$(/d+?))
Se Matches.Count > 0 Então
Para cada subpartida nas partidas
Text = Replace(Text, SubMatches.value, doQuote(Arrays(SubMatches.SubMatches(0), i)), 1, -1, 1) 'Executar substituição
Próximo
ItemReSec = Texto
Outro
ItemReSec =
Terminar se
Definir correspondências = nada
Função final
'***************************************
'Função variável global
'***************************************
Função SubExecutar Privada
Escurecer correspondências, subcorrespondências, texto, ExeText
Definir correspondências = GetMatch(c_Content, /<function/:([0-9a-zA-Z_/.]*?)/((.*?)/(.+?)/(.*?)/)// />)
Se Matches.Count > 0 Então
Para cada subpartida nas partidas
Texto = SubMatches.SubMatches(0) & ( & SubMatches.SubMatches(1) & & SubMatches.SubMatches(2) & & SubMatches.SubMatches(3) & )
Execute ExeText= & Texto
c_Content = Substituir(c_Content, SubMatches.value, ExeText, 1, -1, 1)
Próximo
Terminar se
Definir correspondências = nada
Finalizar sub
'***************************************
'Substituição comum de rótulos globais
'***************************************
Propriedade pública Let Sets(ByVal t, ByVal s)
Dim SetMatch, Bstr, SetSubMatch
Definir SetMatch = GetMatch(c_Content, (/<Set/:([0-9a-zA-Z_/.]*?)/(((.*?) & t & (.*?))?/)// />))
Se SetMatch.Count > 0 Então
Para cada SetSubMatch em SetMatch
Execute Bstr = & SetSubMatch.SubMatches(1) & ( & SetSubMatch.SubMatches(3) & & s & & SetSubMatch.SubMatches(4) & )
c_Content = Substituir(c_Content, SetSubMatch.Value, Bstr, 1, -1, 1)
Próximo
Terminar se
Definir SetMatch = Nada
Definir SetMatch = GetMatch(c_Content, (/<Set/: & t & ///>))
Se SetMatch.Count > 0 Então
Para cada SetSubMatch em SetMatch
c_Content = Substituir(c_Content, SetSubMatch.Value, s, 1, -1, 1)
Próximo
Terminar se
Definir SetMatch = Nada
Fim da propriedade
Fim da aula