da descrição da classe do modelo ASP
: formulário shaoyun www.devjs.com
Horário: 17h05 10/12/2008
++Introdução à função
--Suporta tags de loop de camada única e pode ser usado várias vezes em uma classe de página.
--Suporta a introdução de arquivos de modelo Ao carregar, os modelos serão mesclados.
--Você pode especificar o caminho do arquivo de modelo. O caminho é um caminho relativo e o padrão é o caminho do arquivo atual.
--Para a saída final de linhas em branco, exclua
a definição da tag ++
{$tag$} tags comuns
Tag de arquivo de modelo {$include:filename$}
<loop name="tagname">...</loop> tag de loop, o atributo name é o nome da tag
Descrição da tag subtag ++
na tag loop
:Use expressões regulares para combinar e filtrar tags. Pode haver vários espaços antes do atributo name na tag loop e pode haver outros atributos antes e depois do nome. Os atributos podem ser citados ou não. Aspas simples e duplas são reconhecidas. A configuração corresponde apenas à primeira
descrição da função ++
.A função LoadTPL lê o arquivo de modelo. substitua o conteúdo da tag do arquivo de modelo aninhado, mescle os arquivos de modelo e armazene-o na variável
Atribuir função para analisar a tag do modelo. Para tags comuns, adicione-o ao objeto de dados. Se for uma tag de loop, armazene-o em. o objeto de dados de loop. Se for um objeto de tag de loop, substitua-o e os dados acumulados no ciclo são adicionados à
classe de modelo de função Flush. É uma função muito importante usada para processar rótulos de ciclo. ciclo, ele executa a substituição interna do bloco de ciclo e acumula e salva os dados do ciclo. Após a conclusão, a função Bulid deve ser chamada
para adicionar os dados de loop não salvos e salvos ao objeto de dados e, em seguida, gerar todos os dados. o objeto de dados de acordo com a definição do modelo. A substituição dos rótulos comuns é concluída nesta etapa. Em
particular, a função de atribuição tem um método de atribuição conveniente. exemplo:
código do programa
tp.assign("title","news")
pode usar este
código de programa
de método de atribuição mais conciso
tp("title")="News"
tp é um objeto de modelo instanciado.
Todo o código do modelo é o seguinte (template.asp):
código do programa
<%
Modelo de classe
Privado m_content,m_looptmp,tagData,loopdata,m_loop_content,m_Looptag,m_TplPath,m_SetTplPath
Privado m_ClassName,m_Version,m_Copyright
Privado SubClass_Initialize()
m_content="": m_looptmp="": m_loop_content="": m_looptag=""
m_ClassName = "Classe de modelo Shaoyun ASP": m_Version = "1.0": m_Copyright = "DevJS.com"
m_TplPath="./" : m_SetTplPath=falso
Definir tagData = Server.CreateObject("Scripting.Dictionary")
Definir loopData = Server.CreateObject("Scripting.Dictionary")
Fim Sub
Privado Sub Class_Terminate()
m_content="": m_looptmp="": m_loop_content="": m_looptag=""
m_TplPath="./" : m_SetTplPath=falso
Definir tagData = Nada: Definir loopData = Nada
End Sub
Propriedade Pública Obter ClassName
NomeDaClasse = m_NomeDaClasse
Propriedade final
Propriedade pública Obter versão
Versão = m_Versão
Fim da propriedade
Propriedade pública Obtenha direitos autorais
Direitos autorais = m_Copyright
End Property
Rem é a propriedade padrão da classe de modelo para determinar se o modelo contém esta tag.
Tag de obtenção de propriedade padrão pública (tagname)
Tag = InStr(m_content,"{$" & tagname & "$")>0
End Property
Rem chama a função de atribuição definida. Esta propriedade é usada para simplificar a operação de atribuição.
Propriedade pública Let Tag(tagname,replaceString)
Chame Atribuir(tagname,replaceString)
Propriedade final
Propriedade pública Obter TplPath
CaminhoTpl = m_CaminhoTpl
End Property
Rem define o caminho do arquivo de modelo
Propriedade pública Let TplPath(sTplPath)
Se sTplPath<>"" Então m_TplPath = sTplPath
Se Right(m_TplPath,1)<>"/" Então m_TplPath = m_TplPath & "/"
da propriedade final
LoadFromFile(sFilePath,sCharset)
LoadFromFile=falso
Escurecer oStream
Definir oStream=Server.CreateObject("ADODB.Stream")
oStream.Type=2
oStream.Mode=3
oStream.Open
oStream.Charset=sCharset
oStream.Position=oStream.Size
oStream.LoadFromFile sFilePath
LoadFromFile=oStream.ReadText
oStream.Close
Definir oStream=Nada
Função final
Função privada FileExist (filespec)
Em caso de erro, retomar o próximo
ArquivoExist=Falso
Dim oFSO: Definir oFSO = Server.CreateObject("Scripting.FileSystemObject")
FileExist=oFSO.FileExists(filespec)
Definir oFSO=Nada
End Function
Rem obtém o bloco de loop
Função privada GetTmpStr(tplstr,tagname,attname)
Dim regEx,Correspondências,Correspondência
Definir regEx = Novo RegExp
regEx.Pattern = "<" & tagname & ".*?s+name=[""|']?" & attname & "[""|']?.*?>([s S.]*?)</" & tagname & ">"
regEx.Global = Falso
regEx.IgnoreCase = Verdadeiro
Definir correspondências = regEx.Execute(tplstr)
Para cada partida nas partidas
GetTmpStr=Match.Value
Próximo
Definir regEx = Nada
End Function
Rem remove tags HTML
Função privada RemoveTag(tagString,tagname)
Regex escuro
Definir regex=Novo RegExp
regEx.Pattern = "<[/]?" & tagname & ".*?>"
regEx.Global = Verdadeiro
regEx.IgnoreCase = Verdadeiro
RemoveTag = regEx.Replace(tagString,"")
Definir regex = nada
Função Final
Rem Remover linhas em branco
Função privada RemoveSpace(tagString)
Regex escuro
Definir regex=Novo RegExp
regEx.Pattern = "ns*r"
regEx.Global = Verdadeiro
regEx.IgnoreCase = Verdadeiro
RemoveSpace = regEx.Replace(tagString,"")
Definir regex = nada
End Function
Rem lê arquivos de modelo, processa modelos aninhados ao mesmo tempo e mescla modelos
Função pública LoadTpl(tplfile)
tplfile = Servidor.MapPath (tplfile)
Se não for FileExist (tplfile) então
Response.Write "Falha ao carregar arquivo de modelo!"
Resposta.Fim
Função de saída
Terminar se
m_content=LoadFromFile(tplfile,"GB2312")
Dim regEx,Matchs,Match,fname,sContent
Definir regEx = Novo RegExp
regEx.Pattern = "{$include:(.*?)$}"
regEx.Global = Verdadeiro
regEx.IgnoreCase = Verdadeiro
Definir correspondências = regEx.Execute(m_content)
Para cada partida nas partidas
fname=Match.SubMatches(0)
fname=Server.MapPath(m_TplPath & fname)
Se FileExist(fname) Então
sContent=LoadFromFile(fname,"GB2312")
m_content=substituir(m_content,Match.value,sContent)
Terminar se
Próximo
Definir regEx = Nada
Função final
Função de substituição de atribuição Rem
Atribuição de função pública (tagname, replaceString)
Se tagname = "" Então saia da função
Rem se for um rótulo de loop
Se InStr(tagname,"/")>0 e InStr(tagname,"/")<Len(tagname) Então
Rem obtém o nome do rótulo do loop
m_curLooptag=Left(tagname,InStrRev(tagname,"/")-1)
Se m_Looptag="" Então
Rem Se o rótulo do loop for detectado pela primeira vez, defina o valor inicial das variáveis necessárias para o loop.
m_looptag = m_curLooptag: m_loop_content = ""
m_looptmp=GetTmpStr(m_content,"loop",m_Looptag)
Outro
Se m_LoopTag<>m_curLooptag Então
Rem Se o rótulo do loop mudar, a variável inicial do loop
m_content=substituir(m_content,m_looptmp,m_loop_content)
m_looptag = m_curLooptag: m_loop_content = ""
m_looptmp=GetTmpStr(m_content,"loop",m_Looptag)
Terminar se
Terminar se
If Not(loopData.Exists(tagname)) Então loopData.Add tagname,replaceString
Outro
Rótulo comum Rem
tagData.Adicionar tagname,substituirString
Terminar se
End Function
Rem realiza substituição intra-bloco
Função pública Flush()
Se loopdata.count>0 então
Escureça eu
chgtmp=RemoverTag(m_looptmp,"loop")
arrtag=loopData.keys
arrval=loopData.items
Para i=0 Para loopData.count-1
chgtmp=replace(chgtmp,"{$" & arrtag(i) & "$}",arrval(i))
Próximo
Rem salva os dados do bloco em uma variável
m_loop_content = m_loop_content & chgtmp
loopdata.RemoveAll
Terminar se
Finalizar função
Rem build, concluir a substituição final do modelo
Função Pública Bulid()
m_content=substituir(m_content,m_looptmp,m_loop_content)
arrtag=tagData.keys
arrval=tagData.items
Para i=0 Para tagData.count-1
m_content=replace(m_content,"{$" & arrtag(i) & "$}",arrval(i))
Próximo
m_Content=RemoverEspaço(m_Content)
Resposta.Write m_Content
Função Final
Classe Final
%>
Código do modelo do modelo pai (default.tpl):
código do programa
{$include:head.tpl$}
<h1 align=center>{$doc_title$}</h1>
<h3>{$news_title$}</h3>
<ul>
<loop name="notícias">
<Li style="color:#F00">Título da notícia: {$news/title$}--Autor: {$news/author$}</Li>
</loop>
</ul>
<h3>{$lastest_news$}</h3>
<ul>
<!-- O bing e a contagem no loop aqui são apenas para teste e não são necessários. Exclua-os quando realmente usá-los -->.
<loop bind="id" name=arts count="15">
<Li>Título do artigo: {$arts/title$}--Autor: {$arts/author$}</Li>
</loop>
</ul>
{$incluir:foot.tpl$}
Submodelo aninhado (head.tpl):
código do programa
<título>{$doc_title$}</title>
Modelo filho aninhado (foot.tpl):
código do programa
<p align=center>Direitos autorais de DevJS.Com</p>
Código de chamada (default.asp):
código do programa
<!--#include file="function/template.asp"-->
<%
Exemplo de uso de classe de modelo Rem
Set tp = novo modelo
tp.tplpath="tpl"
tp.LoadTpl(tp.tplpath & "default.tpl")
tp.assign "doc_title","Exemplo de mecanismo de modelo"
tp.assign "news_title","notícias nacionais"
para i = 0 a 2
ligue para tp.assign("arts/title","A crise financeira levou a um grande número de desempregados")
chame tp.assign("artes/autor","NetEase")
tp.flush
próximo
tp.assign "lastest_news","Artigo mais recente"
Rem usa outro método de atribuição aqui
para i = 0 a 2
tp("news/title")="Boas notícias do governo ajudarão a impulsionar o mercado de ações"
tp("notícia/autor")="SOHU"
tp.flush
próximo
tp.bulid
Defina tp = nada
%>
Este artigo vem do blog de shaoyun http://www.devjs.com/ , endereço original: http://www.devjs.com/post/asp-template-class.html