Ce moteur de modèle est plus pratique. Il est combiné avec HTML. Le code de copie est le suivant :
Modèle de classe
C_Char privé, c_Path, c_FileName, c_Content, c_PageUrl, c_CurrentPage, c_PageStr, ReplacePageStr
Nom de balise privée
' **************************************
'Définir l'encodage
' **************************************
Propriété publique Let Char (ByVal Str)
c_Char = Str
Propriété de fin
Propriété publique Get Char
Char = c_Char
Propriété de fin
' **************************************
'Définir le chemin du dossier de modèles
' **************************************
Chemin de location de propriété publique (ByVal Str)
c_Path = Chaîne
Propriété de fin
Propriété publique Obtenir le chemin
Chemin = c_Chemin
Propriété de fin
' **************************************
'Définir le nom du fichier modèle
' **************************************
Propriété publique Let FileName (ByVal Str)
c_FileName = Chaîne
Propriété de fin
Propriété publique Obtenir le nom du fichier
NomFichier = c_NomFichier
Propriété de fin
' **************************************
'Obtenir le chemin spécifique du fichier modèle
' **************************************
Propriété publique Obtenir FilePath
Si Len(Chemin) > 0 Alors Chemin = Remplacer(Chemin, /, /)
Si Right(Chemin, 1) <> / Alors Chemin = Chemin & /
FilePath = Chemin et nom de fichier
Propriété de fin
' **************************************
'Définir l'URL de pagination
' **************************************
Propriété publique Let PageUrl (ByVal Str)
c_PageUrl = Chaîne
Propriété de fin
Propriété publique Obtenir l'URL de la page
PageUrl = c_PageUrl
Propriété de fin
' **************************************
'Définir la page actuelle de pagination
' **************************************
Propriété publique Let CurrentPage (ByVal Str)
c_CurrentPage = Chaîne
Propriété de fin
Propriété publique Obtenir la page actuelle
PageActuelle = c_PageActuelle
Propriété de fin
' **************************************
'Contenu de sortie
' **************************************
Propriété publique
Réponse.Write(c_Content)
Propriété de fin
' **************************************
'Initialisation de la classe
' **************************************
Sous-classe privée_Initialize
Nom de la balise = pjblog
c_Char = UTF-8
RemplacerPageStr = Tableau (, )
Fin du sous-marin
' **************************************
' Filtrer les caractères en conflit
' **************************************
Fonction privée doQuote (ByVal Str)
doQuote = Remplacer (Str, Chr (34), )
Fonction de fin
' **************************************
" Fin de cours
' **************************************
Sous-classe privée_Terminate
Fin du sous-marin
' **************************************
'Méthode de chargement du fichier
' **************************************
Fonction privée LoadFromFile (ByVal cPath)
Obj obscur
Définir obj = Server.CreateObject (ADODB.Stream)
Avec obj
.Type = 2
.Mode = 3
.Ouvrir
.Charset = Char
.Position = .Taille
.LoadFromFile Server.MapPath(cPath)
LoadFromFile = .ReadText
.fermer
Terminer par
Définir obj = Rien
Fonction de fin
'*********************************************
'Obtenir l'objet correspondant régulier
'*********************************************
Fonction publique GetMatch (ByVal Str, ByVal Rex)
Dim Reg, Mag
Définir Reg = Nouvelle RegExp
Avec Reg
.IgnoreCase = Vrai
.Global=Vrai
.Motif = Rex
Définir Mag = .Execute(Str)
Si Mag.Count > 0 Alors
Définir GetMatch = Mag
Autre
Définir GetMatch = Server.CreateObject (Scripting.Dictionary)
Fin si
Terminer par
Définir Reg = rien
Fonction de fin
' **************************************
'Ouvrir le document
' **************************************
Sous-public ouvert
c_Content = LoadFromFile (FilePath)
Fin du sous-marin
' **************************************
'Exécution tamponnée
' **************************************
Sous-tampon public
c_Content = GridView(c_Content)
Appeler ExecuteFunction
Fin du sous-marin
' **************************************
'GrilleView
' **************************************
Fonction privée GridView (ByVal o_Content)
Dim Correspondances, Sous-correspondances, Sous-texte
Attribut Dim, contenu
Définir les correspondances = GetMatch(o_Content, /< & TagName & /:(/d+?)(.+?)/>([/s/S]+?)<// & TagName & /:/1/>)
Si Matches.Count > 0 Alors
Pour chaque sous-correspondance dans les correspondances
Attribut = SubMatches.SubMatches(1) ' kocms
Contenu = SubMatches.SubMatches(2) ' <Colonnes>...</Colonnes>
SubText = Process(Attribute, Content) 'Renvoie les résultats de toutes les exécutions de processus
o_Content = Replace(o_Content, SubMatches.value, < & SubText(2) & SubText(0) & > & SubText(1) & </ & SubText(2) & >, 1, -1, 1) ' Remplacer la variable d'étiquette
Suivant
Fin si
Définir des correspondances = rien
If Len(ReplacePageStr(0)) > 0 Then ' Détermine si la variable d'étiquette a une valeur et remplace-la si c'est le cas.
o_Content = Remplacer(o_Content, ReplacePageStr(0), ReplacePageStr(1), 1, -1, 1)
ReplacePageStr = Array(, ) 'Effacer la variable du tableau après le remplacement
Fin si
GridView = o_Contenu
Fonction de fin
' **************************************
' Déterminer les attributs
' **************************************
Processus de fonction privée (attribut ByVal, contenu ByVal)
Dim Correspondances, Sous-correspondances, Texte
Dim MatchTag, MatchContent
Dim source de données, nom, élément, page, identifiant
source de données = : Nom = : Élément = : page = 0 : id =
Définir les correspondances = GetMatch(Attribut, /s(.+?)/=/(.+?)/)
Si Matches.Count > 0 Alors
Pour chaque sous-correspondance dans les correspondances
MatchTag = SubMatches.SubMatches(0) 'Obtenir le nom de l'attribut
MatchContent = SubMatches.SubMatches(1) 'Obtenir la valeur de l'attribut
If Lcase(MatchTag) = name Then Name = MatchContent ' Récupère la valeur de l'attribut name
Si Lcase(MatchTag) = datasource Then datasource = MatchContent' Récupère la valeur de l'attribut de la source de données
If Lcase(MatchTag) = element Then Element = MatchContent 'Obtenir la valeur de l'attribut de l'élément
Si Lcase(MatchTag) = page Then page = MatchContent ' Récupère la valeur de l'attribut de la page
Si Lcase(MatchTag) = id Then id = MatchContent 'Obtenir la valeur de l'attribut id
Suivant
Si Len(Nom) > 0 Et Len(MatchContent) > 0 Alors
Text = Analysis(datasource, Name, Content, page, id) 'Effectuer l'analyse des propriétés
Si Len (source de données) > 0 Alors Attribut = Remplacer (Attribut, source de données = & source de données & , )
Si page > 0 Alors Attribut = Remplacer (Attribut, page= & page &, )
Attribut = Remplacer (Attribut, nom = & Nom & , , 1, -1, 1)
Attribut = Remplacer (Attribut, élément = & Élément & , , 1, -1, 1)
Processus = Tableau (Attribut, Texte, Élément)
Autre
Processus = Tableau (Attribut, , div)
Fin si
Autre
Processus = Tableau (Attribut, , div)
Fin si
Définir des correspondances = rien
Fonction de fin
' **************************************
' Analyser
' **************************************
Analyse de fonction privée (ID ByVal, nom ByVal, contenu ByVal, page ByVal, PageID ByVal)
Faibles données
Select Case Lcase(Name) 'Sélectionner la source de données
Boucle de cas Data = DataBind (id, Content, page, PageID)
Cas pour Data = DataFor (id, Content, page, PageID)
Fin de la sélection
Analyse=Données
Fonction de fin
' **************************************
'Lier la source de données
' **************************************
Fonction privée DataBind (identifiant ByVal, contenu ByVal, page ByVal, ID de page ByVal)
Dim Texte, Correspondances, Sous-Correspondances, Sous-Texte
Exécuter le texte = & id & (1) 'Charger la source de données
Définir les correspondances = GetMatch(Content, /<Columns/>([/s/S]+)/<//Columns/>)
Si Matches.Count > 0 Alors
Pour chaque sous-correspondance dans les correspondances
SubText = ItemTemplate(SubMatches.SubMatches(0), Text, page, PageID)' Effectuer le remplacement du module
Contenu = Remplacer (Contenu, SubMatches.value, Sous-texte, 1, -1, 1)
Suivant
DataBind = Contenu
Autre
Liaison de données=
Fin si
Définir des correspondances = rien
Fonction de fin
' **************************************
' Mettre en correspondance l'instance de modèle
' **************************************
ItemTemplate de fonction privée (ByVal TextTag, ByVal Text, ByVal page, ByVal PageID)
Dim Correspondances, Sous-Correspondances, SubMatchText
Dim SecMatch, SecSubMatch
Dim je, TempText
Dim TextLen, TextLeft, TextRight
Définir les correspondances = GetMatch(TextTag, /<ItemTemplate/>([/s/S]+)/<//ItemTemplate/>)
Si Matches.Count > 0 Alors
Pour chaque sous-correspondance dans les correspondances
SubMatchText = SubMatches.SubMatches(0)
'---------------------------------------------
' Démarrer l'imbrication de la boucle
'---------------------------------------------
SubMatchText = GridView (SubMatchText)
'---------------------------------------------
' Imbrication de fin de boucle
'---------------------------------------------
Si UBound(Texte, 1) = 0 Alors
TexteTemp=
Autre
TexteTemp=
'-------------------------------------------------
'Démarrer la recherche
'-------------------------------------------------
Si Len(page) > 0 Et page > 0 Alors
Si Len(CurrentPage) = 0 Ou CurrentPage = 0 Alors CurrentPage = 1
TextLen = UBound (Texte, 2)
TextLeft = (CurrentPage - 1) * page
TextRight = PageActuelle * page - 1
Si TextLeft < 0 Alors TextLeft = 0
Si TextRight > TextLen Alors TextRight = TextLen
c_PageStr = MultiPage (TextLen + 1, page, CurrentPage, PageUrl, float:right, , False)
Si Int(Len(c_PageStr)) > 0 Alors
RemplacerPageStr = Array(<page : & Trim(PageID) & />, c_PageStr)
Autre
ReplacePageStr = Array(<page: & Trim(PageID) & />, )
Fin si
Autre
TexteGauche = 0
TextRight = UBound (Texte, 2)
Fin si
Pour i = TextLeft Vers TextRight
TempText = TempText & ItemReSec(i, SubMatchText, Text) 'Charger le contenu du modèle
Suivant
Fin si
Suivant
ItemTemplate = TempText
Autre
Modèle d'élément =
Fin si
Définir des correspondances = rien
Fonction de fin
' **************************************
'Remplacer la chaîne du modèle
' **************************************
Fonction privée ItemReSec (ByVal i, ByVal Text, ByVal Arrays)
Correspondances faibles, sous-correspondances
Définir les correspondances = GetMatch(Texte, /$(/d+?))
Si Matches.Count > 0 Alors
Pour chaque sous-correspondance dans les correspondances
Text = Replace(Text, SubMatches.value, doQuote(Arrays(SubMatches.SubMatches(0), i)), 1, -1, 1) 'Effectuer le remplacement
Suivant
ItemReSec = Texte
Autre
ArticleReSec=
Fin si
Définir des correspondances = rien
Fonction de fin
' **************************************
'Fonction variable globale
' **************************************
Fonction d'exécution secondaire privée
Correspondances Dim, sous-correspondances, texte, ExeText
Définir les correspondances = GetMatch(c_Content, /<function/:([0-9a-zA-Z_/.]*?)/((.*?)/(.+?)/(.*?)/)// />)
Si Matches.Count > 0 Alors
Pour chaque sous-correspondance dans les correspondances
Texte = SubMatches.SubMatches(0) & ( & SubMatches.SubMatches(1) & & SubMatches.SubMatches(2) & & SubMatches.SubMatches(3) & )
Exécuter ExeText= & Texte
c_Content = Remplacer (c_Content, SubMatches.value, ExeText, 1, -1, 1)
Suivant
Fin si
Définir des correspondances = rien
Fin du sous-marin
' **************************************
' Remplacement ordinaire des étiquettes globales
' **************************************
Ensembles de propriétés publiques (ByVal t, ByVal s)
Dim SetMatch, Bstr, SetSubMatch
Set SetMatch = GetMatch(c_Content, (/<Set/:([0-9a-zA-Z_/.]*?)/(((.*?) & t & (.*?))?/)// />))
Si SetMatch.Count > 0 Alors
Pour chaque SetSubMatch dans SetMatch
Exécuter Bstr = & SetSubMatch.SubMatches(1) & ( & SetSubMatch.SubMatches(3) & & s & & SetSubMatch.SubMatches(4) & )
c_Content = Remplacer (c_Content, SetSubMatch.Value, Bstr, 1, -1, 1)
Suivant
Fin si
Définir SetMatch = Rien
Définir SetMatch = GetMatch(c_Content, (/<Set/: & t & ///>))
Si SetMatch.Count > 0 Alors
Pour chaque SetSubMatch dans SetMatch
c_Content = Remplacer (c_Content, SetSubMatch.Value, s, 1, -1, 1)
Suivant
Fin si
Définir SetMatch = Rien
Propriété de fin
Fin du cours