Este motor de plantilla es más conveniente. Se combina con HTML. El código de copia es el siguiente:
plantilla de clase
Privado c_Char, c_Path, c_FileName, c_Content, c_PageUrl, c_CurrentPage, c_PageStr, ReemplazarPageStr
Nombre de etiqueta privada
' **************************************
'Establecer codificación
' **************************************
Propiedad pública Let Char (ByVal Str)
c_Char = Cadena
Propiedad final
Propiedad pública obtener Char
Carbón = c_Carbón
Propiedad final
' **************************************
'Establecer ruta de carpeta de plantilla
' **************************************
Ruta de alquiler de propiedad pública (ByVal Str)
c_Path = Cadena
Propiedad final
Ruta de obtención de propiedad pública
Ruta = c_Path
Propiedad final
' **************************************
'Establecer nombre de archivo de plantilla
' **************************************
Propiedad pública Let FileName(ByVal Str)
c_FileName = Cadena
Propiedad final
Propiedad pública Obtener nombre de archivo
Nombre de archivo = c_Nombre de archivo
Propiedad final
' **************************************
'Obtiene la ruta específica del archivo de plantilla
' **************************************
Propiedad pública Obtener FilePath
Si Len(Ruta) > 0 Entonces Ruta = Reemplazar(Ruta, /, /)
Si es correcto(Ruta, 1) <> / Entonces Ruta = Ruta & /
FilePath = Ruta y nombre de archivo
Propiedad final
' **************************************
'Establecer URL de paginación
' **************************************
Propiedad pública Let PageUrl (ByVal Str)
c_PageUrl = Cadena
Propiedad final
Propiedad pública Obtener URL de página
URL de página = c_Url de página
Propiedad final
' **************************************
'Establecer paginación de la página actual
' **************************************
Propiedad pública Let CurrentPage (ByVal Str)
c_CurrentPage = Cadena
Propiedad final
Propiedad pública Obtener página actual
PáginaActual = c_PáginaCurrent
Propiedad final
' **************************************
'Contenido de salida
' **************************************
La propiedad pública se vacia
Respuesta.Escribir(c_Content)
Propiedad final
' **************************************
'Inicialización de clase
' **************************************
Subclase privada_Inicializar
Nombre de etiqueta = pjblog
c_Car = UTF-8
ReemplazarPageStr = Matriz(, )
Subtítulo final
' **************************************
' Filtrar caracteres conflictivos
' **************************************
Función privada doQuote (ByVal Str)
doQuote = Reemplazar(Str, Chr(34), )
Función final
' **************************************
'Terminación de clase
' **************************************
Subclase privada_Terminar
Subtítulo final
' **************************************
'Cargar método de archivo
' **************************************
Función privada LoadFromFile (ByVal cPath)
objeto oscuro
Establecer obj = Server.CreateObject(ADODB.Stream)
con objeto
.Tipo = 2
.Modo = 3
.Abierto
.Charset = Carácter
.Posición = .Tamaño
.LoadFromFile Server.MapPath(cPath)
LoadFromFile = .ReadText
.cerca
Terminar con
Establecer objeto = Nada
Función final
'************************************************
'Obtiene el objeto coincidente regular
'************************************************
Función pública GetMatch (ByVal Str, ByVal Rex)
Reg tenue, mag
Establecer registro = nueva expresión regular
con reg
.IgnoreCase = Verdadero
.Global=Verdadero
.Patrón = Rex
Establecer Mag = .Ejecutar (Str)
Si Mag.Count > 0 Entonces
Establecer GetMatch = Mag
Demás
Establecer GetMatch = Server.CreateObject(Scripting.Dictionary)
Terminar si
Terminar con
Establecer registro = nada
Función final
' **************************************
'Abrir documento
' **************************************
Sub público abierto
c_Contenido = LoadFromFile(RutaDeArchivo)
Subtítulo final
' **************************************
'Ejecución almacenada en buffer
' **************************************
Subbúfer público
c_Contenido = GridView(c_Contenido)
Llamar a la función de ejecución
Subtítulo final
' **************************************
'GridView
' **************************************
Función privada GridView (ByVal o_Content)
Coincidencias tenues, subcoincidencias, subtexto
Atributo tenue, contenido
Establecer coincidencias = GetMatch(o_Content, /< & TagName & /:(/d+?)(.+?)/>([/s/S]+?)<// & TagName & /:/1/>)
Si Matches.Count > 0 Entonces
Para cada subpartido en partidos
Atributo = SubMatches.SubMatches(1) ' kocms
Contenido = SubMatches.SubMatches(2) ' <Columnas>...</Columnas>
SubTexto = Proceso(Atributo, Contenido) 'Devuelve los resultados de todas las ejecuciones del proceso
o_Content = Reemplazar(o_Content, SubMatches.value, < & SubText(2) & SubText(0) & > & SubText(1) & </ & SubText(2) & >, 1, -1, 1) ' Reemplazar variable de etiqueta
Próximo
Terminar si
Establecer coincidencias = Nada
Si Len(ReplacePageStr(0)) > 0 Entonces ' Determine si la variable de etiqueta tiene un valor y reemplácelo si es así.
o_Contenido = Reemplazar(o_Contenido, ReemplazarPáginaStr(0), ReemplazarPáginaStr(1), 1, -1, 1)
ReemplazarPageStr = Array(, ) 'Borrar la variable de matriz después del reemplazo
Terminar si
GridView = o_Contenido
Función final
' **************************************
' Determinar atributos
' **************************************
Proceso de función privada (atributo ByVal, contenido ByVal)
Coincidencias tenues, subcoincidencias, texto
Etiqueta de coincidencia atenuada, contenido de coincidencia
Fuente de datos tenue, nombre, elemento, página, identificación
fuente de datos = : Nombre = : Elemento = : página = 0 : id =
Establecer coincidencias = GetMatch(Atributo, /s(.+?)/=/(.+?)/)
Si Matches.Count > 0 Entonces
Para cada subpartido en partidos
MatchTag = SubMatches.SubMatches(0) 'Obtiene el nombre del atributo
MatchContent = SubMatches.SubMatches(1) 'Obtener valor de atributo
Si Lcase(MatchTag) = nombre Entonces Nombre = MatchContent 'Obtiene el valor del atributo de nombre
Si Lcase(MatchTag) = fuente de datos Entonces fuente de datos = MatchContent' Obtenga el valor del atributo de fuente de datos
Si Lcase(MatchTag) = elemento Entonces Elemento = MatchContent ' Obtener valor del atributo del elemento
Si Lcase(MatchTag) = página Entonces página = MatchContent 'Obtiene el valor del atributo de la página
Si Lcase(MatchTag) = id Entonces id = MatchContent 'Obtiene el valor del atributo id
Próximo
Si Len(Nombre) > 0 y Len(MatchContent) > 0 Entonces
Texto = Análisis (fuente de datos, nombre, contenido, página, identificación) 'Realizar análisis de propiedades
Si Len(fuente de datos) > 0 Entonces Atributo = Reemplazar(Atributo, fuente de datos= & fuente de datos &,)
Si página> 0 Entonces Atributo = Reemplazar (Atributo, página = & página &,)
Atributo = Reemplazar (Atributo, nombre = & Nombre &, , 1, -1, 1)
Atributo = Reemplazar (Atributo, elemento = & Elemento &, , 1, -1, 1)
Proceso = Matriz (Atributo, Texto, Elemento)
Demás
Proceso = Matriz (Atributo, , div)
Terminar si
Demás
Proceso = Matriz (Atributo, , div)
Terminar si
Establecer coincidencias = Nada
Función final
' **************************************
' Analizar
' **************************************
Análisis de función privada (ID de ByVal, Nombre de ByVal, Contenido de ByVal, Página de ByVal, ID de página de ByVal)
Datos oscuros
Seleccione Caso Lcase(Nombre) 'Seleccione fuente de datos
Datos del bucle de casos = DataBind(id, Contenido, página, PageID)
Caso de datos = DataFor(id, Contenido, página, PageID)
Seleccionar fin
Análisis=Datos
Función final
' **************************************
'Vincular fuente de datos
' **************************************
Función privada DataBind (ID de ByVal, Contenido de ByVal, página de ByVal, ID de página de ByVal)
Texto atenuado, coincidencias, subcoincidencias, subtexto
Ejecutar Texto = & id & (1) 'Cargar fuente de datos
Establecer coincidencias = GetMatch(Contenido, /<Columns/>([/s/S]+)/<//Columns/>)
Si Matches.Count > 0 Entonces
Para cada subpartido en partidos
SubText = ItemTemplate(SubMatches.SubMatches(0), Text, page, PageID)' Realizar reemplazo del módulo
Contenido = Reemplazar (Contenido, SubMatches.value, SubText, 1, -1, 1)
Próximo
Enlace de datos = Contenido
Demás
Enlace de datos =
Terminar si
Establecer coincidencias = Nada
Función final
' **************************************
'Coincide con la instancia de la plantilla
' **************************************
Plantilla de elemento de función privada (etiqueta de texto ByVal, texto ByVal, página ByVal, ID de página ByVal)
Coincidencias tenues, subcoincidencias, submatchtext
Atenuar SecMatch, SecSubMatch
Atenuar i, TempText
Atenuar TextLen, TextLeft, TextRight
Establecer coincidencias = GetMatch(TextTag, /<ItemTemplate/>([/s/S]+)/<//ItemTemplate/>)
Si Matches.Count > 0 Entonces
Para cada subpartido en partidos
SubMatchText = SubPartidas.SubPartidas(0)
'------------------------------------------------------
'Iniciar anidamiento de bucle
'------------------------------------------------------
SubMatchText = GridView(SubMatchText)
'------------------------------------------------------
' Fin del anidamiento del bucle
'------------------------------------------------------
Si UBound(Texto, 1) = 0 Entonces
Texto Temporal=
Demás
Texto Temporal=
'-------------------------------------------------
'Iniciar paginación
'-------------------------------------------------
Si Len(página) > 0 y página > 0 Entonces
Si Len(CurrentPage) = 0 o CurrentPage = 0, entonces CurrentPage = 1
TextLen = UBound(Texto, 2)
TextoIzquierdo = (Página actual - 1) * página
TextoDerecha = PáginaActual * página - 1
Si TextoIzquierdo < 0 Entonces TextoIzquierdo = 0
Si TextRight > TextLen Entonces TextRight = TextLen
c_PageStr = MultiPage(TextLen + 1, página, CurrentPage, PageUrl, float:right, , False)
Si Int(Len(c_PageStr)) > 0 Entonces
ReemplazarPageStr = Array(<página: & Trim(PageID) & />, c_PageStr)
Demás
ReemplazarPageStr = Array(<página: & Trim(PageID) & />,)
Terminar si
Demás
Texto izquierdo = 0
TextoDerecha = UBound(Texto, 2)
Terminar si
Para i = TextoIzquierdo a TextoDerecho
TempText = TempText & ItemReSec(i, SubMatchText, Text) 'Cargar contenido de la plantilla
Próximo
Terminar si
Próximo
Plantilla de elemento = Texto temporal
Demás
Plantilla de artículo =
Terminar si
Establecer coincidencias = Nada
Función final
' **************************************
'Reemplazar cadena de plantilla
' **************************************
Función privada ItemReSec (ByVal i, ByVal Text, ByVal Arrays)
Partidos oscuros, subpartidos
Establecer coincidencias = GetMatch(Texto, /$(/d+?))
Si Matches.Count > 0 Entonces
Para cada subpartido en partidos
Texto = Reemplazar (Texto, SubMatches.value, doQuote(Arrays(SubMatches.SubMatches(0), i)), 1, -1, 1) 'Realizar reemplazo
Próximo
ItemReSec = Texto
Demás
ItemReSec=
Terminar si
Establecer coincidencias = Nada
Función final
' **************************************
'Función variable global
' **************************************
Función de ejecución secundaria privada
Coincidencias tenues, subcoincidencias, texto, texto ejecutable
Establecer coincidencias = GetMatch(c_Content, /<function/:([0-9a-zA-Z_/.]*?)/((.*?)/(.+?)/(.*?)/)// />)
Si Matches.Count > 0 Entonces
Para cada subpartido en partidos
Texto = SubMatches.SubMatches(0) & ( & SubMatches.SubMatches(1) & & SubMatches.SubMatches(2) & & SubMatches.SubMatches(3) & )
Ejecutar ExeText= & Texto
c_Content = Reemplazar (c_Content, SubMatches.value, ExeText, 1, -1, 1)
Próximo
Terminar si
Establecer coincidencias = Nada
Subtítulo final
' **************************************
' Reemplazo ordinario de etiquetas globales
' **************************************
Conjuntos de propiedad pública Let (ByVal t, ByVal s)
Atenuar SetMatch, Bstr, SetSubMatch
Establecer SetMatch = GetMatch(c_Content, (/<Set/:([0-9a-zA-Z_/.]*?)/(((.*?) & t & (.*?))?/)// />))
Si SetMatch.Count > 0 Entonces
Para cada SetSubMatch en SetMatch
Ejecutar Bstr = & SetSubMatch.SubMatches(1) & ( & SetSubMatch.SubMatches(3) & & s & & SetSubMatch.SubMatches(4) & )
c_Content = Reemplazar(c_Content, SetSubMatch.Value, Bstr, 1, -1, 1)
Próximo
Terminar si
Establecer SetMatch = Nada
Establecer SetMatch = GetMatch(c_Content, (/<Set/: & t & ///>))
Si SetMatch.Count > 0 Entonces
Para cada SetSubMatch en SetMatch
c_Content = Reemplazar(c_Content, SetSubMatch.Value, s, 1, -1, 1)
Próximo
Terminar si
Establecer SetMatch = Nada
Propiedad final
Fin de clase