Descripción de la clase de plantilla ASP
autor: shaoyun Formulario www.devjs.com
Hora: 17:05 2008-12-10
++Introducción a la función
: admite etiquetas de bucle de una sola capa y se puede usar varias veces en una clase de página.
--Admite la introducción de archivos de plantilla. Al cargar, las plantillas se fusionarán.
--Puede especificar la ruta del archivo de plantilla. La ruta es una ruta relativa y la ruta predeterminada es la ruta del archivo actual.
--Para el resultado final de líneas en blanco, elimine
la definición de etiqueta ++
{$tag$} etiquetas ordinarias
{$include:filename$} etiqueta de archivo de plantilla
<loop name="tagname">...</loop> etiqueta de bucle, el atributo de nombre es el nombre de la etiqueta
Descripción de la etiqueta subetiqueta ++
en la etiqueta de bucle
:use expresiones regulares para hacer coincidir y filtrar etiquetas. Puede haber varios espacios antes del atributo de nombre en la etiqueta de bucle, y puede haber otros atributos antes y después del nombre. Los atributos se pueden citar o no. Se reconocen comillas simples y dobles. La configuración solo coincide con la primera
descripción de la función ++
.La función LoadTPL lee el archivo de plantilla. Primero, verifique la etiqueta del archivo de plantilla anidada. reemplace el contenido de la etiqueta del archivo de plantilla anidada, combine los archivos de plantilla y guárdelo en la
función Asignar variable para analizar la etiqueta de plantilla, agréguela al objeto de datos. Si es una etiqueta de bucle, guárdela en. el objeto de datos del bucle, si es un objeto de etiqueta de bucle, reemplácelo, luego los datos acumulados en el ciclo se agregan a la
clase de plantilla de función de descarga del objeto de datos. Es una función muy importante que se utiliza para procesar etiquetas de ciclo. ciclo, realiza el reemplazo interno del bloque de ciclo y acumula y guarda los datos del ciclo. Después de completar cada ciclo, se debe llamar a la función Bulid
para agregar los datos del ciclo guardados y no guardados al objeto de datos, y luego generar todos los datos en. el objeto de datos de acuerdo con la definición de la plantilla. El reemplazo de etiquetas ordinarias se completa en este paso. En
particular, la función de asignación tiene un método de asignación conveniente para llamar al atributo predeterminado para asignar el valor. ejemplo:
código de programa
tp.assign("title","news")
puede utilizar este
código de programa
de método de asignación más conciso
tp("title")="Noticias"
tp es un objeto de plantilla instanciado.
El código completo de la plantilla es el siguiente (template.asp):
código de programa
<%
Plantilla de clase
privada m_content,m_looptmp,tagData,loopdata,m_loop_content,m_Looptag,m_TplPath,m_SetTplPath
Privado m_ClassName,m_Version,m_Copyright
Privado Sub Class_Initialize()
m_content="" : m_looptmp="" : m_loop_content="" : m_looptag=""
m_ClassName="Clase de plantilla ASP de Shaoyun": m_Version="1.0" : m_Copyright="DevJS.com"
m_TplPath="./" : m_SetTplPath=falso
Establecer tagData = Server.CreateObject("Scripting.Dictionary")
Establecer loopData = Server.CreateObject("Scripting.Dictionary")
Finalizar
subsubclase privada_Terminate()
m_content="" : m_looptmp="" : m_loop_content="" : m_looptag=""
m_TplPath="./" : m_SetTplPath=falso
Establecer tagData = Nada: Establecer loopData = Nada
de propiedad pública
secundaria
Obtener nombre de clase
Nombre de clase = m_Nombre de clase
Propiedad final
Propiedad pública Obtener versión
Versión = m_Version
Propiedad final
Propiedad pública Obtener derechos de autor
Derechos de autor = m_Copyright
End Property
Rem es la propiedad predeterminada de la clase de plantilla para determinar si la plantilla contiene esta etiqueta.
Propiedad pública predeterminada Obtener etiqueta (nombre de etiqueta)
Etiqueta = InStr(m_content,"{$" & nombre de etiqueta & "$")>0
End Property
Rem llama a la función de asignación definida. Esta propiedad se utiliza para simplificar la operación de asignación.
Etiqueta de propiedad pública Let (nombre de etiqueta, cadena de reemplazo)
Asignación de llamada (nombre de etiqueta, cadena de reemplazo)
Propiedad final
Propiedad pública Obtener TplPath
TplPath = m_TplPath
End Property
Rem establece la ruta del archivo de plantilla
Propiedad pública Let TplPath(sTplPath)
Si sTplPath<>"" Entonces m_TplPath = sTplPath
Si es correcto(m_TplPath,1)<>"/" Entonces m_TplPath = m_TplPath & "/"
Propiedad final
Función privada LoadFromFile(sFilePath,sCharset)
LoadFromFile=falso
Corriente tenue
Establecer oStream=Server.CreateObject("ADODB.Stream")
oStream.Type=2
oStream.Mode=3
oStream.Open
oStream.Charset=sCharset
oStream.Position=oStream.Tamaño
oStream.LoadFromFile sFilePath
LoadFromFile=oStream.ReadText
oStream.Cerrar
Establecer oStream=Nada
Función final
Función privada FileExist(filespec)
En caso de error Continuar siguiente
ArchivoExist=Falso
Dim ofSO: Establecer oFSO = Server.CreateObject("Scripting.FileSystemObject")
FileExist=oFSO.FileExists(espec.archivo)
Establecer oFSO=Nada
End Function
Rem obtiene el bloque de bucle
Función privada GetTmpStr(tplstr,tagname,attname)
Dim regEx, Coincidencias, Coincidencia
Establecer expresión regular = nueva expresión regular
regEx.Pattern = "<" & nombre de etiqueta & ".*?s+nombre=[""|']?" & nombre de etiqueta & "[""|']?.*?>([s S.]*?)</" & nombre de etiqueta & ">"
regEx.Global = Falso
regEx.IgnoreCase = Verdadero
Establecer coincidencias = regEx.Execute(tplstr)
Para cada partido en partidos
GetTmpStr=Coincidencia.Valor
Próximo
Establecer expresión regular = Nada
La función final
Rem elimina las etiquetas HTML
Función privada RemoveTag(tagString,tagname)
expresión regular tenue
Establecer expresión regular = Nueva expresión regular
regEx.Pattern = "<[/]?" & nombre de etiqueta & ".*?>"
regEx.Global = Verdadero
regEx.IgnoreCase = Verdadero
RemoveTag = regEx.Replace(tagString,"")
Establecer expresiones regulares = nada
Función final
Rem Eliminar líneas en blanco
Función privada RemoveSpace (tagString)
expresión regular tenue
Establecer expresión regular = Nueva expresión regular
regEx.Patrón = "ns*r"
regEx.Global = Verdadero
regEx.IgnoreCase = Verdadero
RemoveSpace = regEx.Replace(tagString,"")
Establecer expresiones regulares = nada
Función final
Rem lee archivos de plantilla, procesa plantillas anidadas al mismo tiempo y fusiona plantillas
Función pública LoadTpl (tplfile)
tplfile=Servidor.MapPath(archivotpl)
Si no es FileExist (tplfile) entonces
Response.Write "¡Error al cargar el archivo de plantilla!"
Respuesta.Fin
Función de salida
Terminar si
m_content=CargarDesdeArchivo(tplfile,"GB2312")
Dim regEx, Coincidencias, Coincidencia, fname, sContent
Establecer expresión regular = nueva expresión regular
regEx.Pattern = "{$incluir:(.*?)$}"
regEx.Global = Verdadero
regEx.IgnoreCase = Verdadero
Establecer coincidencias = regEx.Execute(m_content)
Para cada partido en partidos
fname=Coincidencia.SubMatches(0)
nombref=Servidor.MapPath(m_TplPath & nombref)
Si FileExist (fname) Entonces
sContent=LoadFromFile(fname,"GB2312")
m_content=reemplazar (m_content, Match.value, sContent)
Terminar si
Próximo
Establecer expresión regular = Nada
Función de reemplazo de asignación Rem
de función final
Asignación de función pública (nombre de etiqueta, cadena de reemplazo)
Si tagname="" entonces salga de la función
Rem si es una etiqueta de bucle
Si InStr(nombre de etiqueta,"/")>0 e InStr(nombre de etiqueta,"/")<Len(nombre de etiqueta) Entonces
Rem obtiene el nombre de la etiqueta del bucle.
m_curLooptag=Left(nombre de etiqueta,InStrRev(nombre de etiqueta,"/")-1)
Si m_Looptag="" Entonces
Rem Si se detecta la etiqueta del bucle por primera vez, establezca el valor inicial de las variables requeridas para el bucle.
m_looptag=m_curLooptag: m_loop_content=""
m_looptmp=GetTmpStr(m_content,"bucle",m_Looptag)
Demás
Si m_LoopTag<>m_curLooptag Entonces
Rem Si la etiqueta del bucle cambia, la variable del bucle inicial
m_content=reemplazar(m_content,m_looptmp,m_loop_content)
m_looptag=m_curLooptag: m_loop_content=""
m_looptmp=GetTmpStr(m_content,"bucle",m_Looptag)
Terminar si
Terminar si
Si no (loopData.Exists (nombre de etiqueta)) Entonces loopData.Agregar nombre de etiqueta, reemplazar cadena
Demás
etiqueta común rem
tagData.Agregar nombre de etiqueta, reemplazar cadena
Terminar si
La función final
Rem realiza el reemplazo dentro del bloque
Descarga de función pública()
Si loopdata.count>0 entonces
Yo tenue
chgtmp=EliminarEtiqueta(m_looptmp,"bucle")
arrtag=loopData.claves
arrval=loopData.items
Para i=0 Para loopData.count-1
chgtmp=reemplazar(chgtmp,"{$" & arrtag(i) & "$}",arrval(i))
Próximo
Rem guarda los datos del bloque en una variable.
m_loop_content=m_loop_content & chgtmp
loopdata.RemoveAll
terminar si
End Function
Rem build, completa el reemplazo final de la plantilla
Función pública Bulid()
m_content=reemplazar(m_content,m_looptmp,m_loop_content)
arrtag=tagData.claves
arrval=tagData.items
Para i=0 A tagData.count-1
m_content=replace(m_content,"{$" & arrtag(i) & "$}",arrval(i))
Próximo
m_Contenido=RemoveSpace(m_Contenido)
Respuesta.Escribir m_Contenido
Clase final
de función final
%>
Código de plantilla de plantilla principal (default.tpl):
código de programa
{$incluye:head.tpl$}
<h1 align=center>{$doc_title$}</h1>
<h3>{$news_title$}</h3>
<ul>
<nombre del bucle="noticias">
<Li style="color:#F00">Título de la noticia: {$news/title$}--Autor: {$news/author$}</Li>
</bucle>
</ul>
<h3>{$lastest_news$}</h3>
<ul>
<!-- El bing y el count en el bucle aquí son solo para prueba y no son necesarios elimínelos cuando realmente los use -->.
<loop bind="id" nombre=arts count="15">
<Li>Título del artículo: {$arts/title$}--Autor: {$arts/author$}</Li>
</bucle>
</ul>
{$incluye:pie.tpl$}
Subplantilla anidada (head.tpl):
código de programa
<título>{$doc_title$}</título>
Plantilla secundaria anidada (foot.tpl):
código de programa
<p align=center>Derechos de autor de DevJS.Com</p>
Código de llamada (predeterminado.asp):
código de programa
<!--#include file="función/template.asp"-->
<%
Ejemplo de uso de clase de plantilla Rem
Set tp = new Template
tp.tplpath="tpl"
tp.LoadTpl(tp.tplpath & "default.tpl")
tp.assign "doc_title","Ejemplo de mecanismo de plantilla"
tp.assign "news_title","noticias nacionales"
para i=0 a 2
call tp.assign("arts/title","La crisis financiera ha provocado un gran número de desempleados")
llame a tp.assign ("artes/autor", "NetEase")
tp.flush
próximo
tp.assign "lastest_news","Último artículo"
Rem usa otro método de asignación aquí.
para i=0 a 2
tp("news/title")="Las buenas noticias del gobierno ayudarán a impulsar el mercado de valores"
tp("noticias/autor")="SOHU"
tp.flush
próximo
tp.bulid
Establecer tp = nada
%>
Este artículo proviene del blog de shaoyun http://www.devjs.com/ , dirección original: http://www.devjs.com/post/asp-template-class.html