Description de la classe du modèle ASP
Auteur : Shaoyun Form www.devjs.com
Heure : 17h05 2008-12-10
++Introduction à la fonction
--Prend en charge les balises de boucle monocouche et peut être utilisée plusieurs fois dans une classe de page.
--Prend en charge l'introduction de fichiers modèles lors du chargement, les modèles seront fusionnés.
--Vous pouvez spécifier le chemin du fichier modèle. Le chemin est un chemin relatif et la valeur par défaut est le chemin du fichier actuel.
--Pour la sortie finale des lignes vides, supprimez
la définition de balise ++
{$tag$} balises ordinaires
{$include:filename$} balise de fichier modèle
Balise de boucle <loop name="tagname">...</loop>, l'attribut name est le nom de la balise
Description de la balise Subtag ++
dans la balise de boucle
:utilisez des expressions régulières pour faire correspondre et filtrer les balises. Il peut y avoir plusieurs espaces avant l'attribut name dans la balise de boucle, et il peut y avoir d'autres attributs avant et après, name. Les attributs peuvent être cités ou non. Les guillemets simples et doubles sont reconnus. Le paramètre ne correspond qu'à la première
description de la fonction ++
.La fonction LoadTPL lit le fichier modèle. Lors de la lecture, vérifiez d'abord la balise du fichier modèle. remplacez le contenu de la balise du fichier modèle imbriqué, fusionnez les fichiers modèles et stockez-le dans la
fonction d'affectation de variable pour analyser la balise du modèle. Pour les balises ordinaires, ajoutez-la à l'objet de données. S'il s'agit d'une balise de boucle, stockez-la dans. l'objet de données de boucle. S'il s'agit d'un objet de balise de boucle, remplacez-le, puis les données accumulées dans le cycle sont ajoutées à la
classe de modèle de fonction Flush de l'objet de données. C'est une fonction très importante utilisée pour traiter les étiquettes de cycle. cycle, il effectue le remplacement interne du bloc de cycle et accumule et enregistre les données du cycle. Une fois terminé, la fonction Bulid doit être appelée
pour ajouter les données de boucle non enregistrées et enregistrées à l'objet de données, puis afficher toutes les données dans l'objet de données selon la définition du modèle. Le remplacement des étiquettes ordinaires est effectué à cette étape. En
particulier, la fonction d'affectation a une méthode d'affectation pratique qui consiste à appeler l'attribut par défaut pour attribuer la valeur. exemple :
code de programme
tp.assign("title","news")
peut utiliser ce
code de programme
de méthode d'affectation plus concis
tp("title")="News"
tp est un objet modèle instancié.
L'intégralité du code du modèle est la suivante (template.asp) :
code de programme
<%
Modèle de classe
Privé m_content,m_looptmp,tagData,loopdata,m_loop_content,m_Looptag,m_TplPath,m_SetTplPath
Privé m_ClassName, m_Version, m_Copyright
Privé Sous-classe_Initialize()
m_content="" : m_looptmp="" : m_loop_content="" : m_looptag=""
m_ClassName="Classe de modèle ASP Shaoyun" : m_Version="1.0" : m_Copyright="DevJS.com"
m_TplPath="./" : m_SetTplPath=false
Définir tagData = Server.CreateObject("Scripting.Dictionary")
Définir loopData = Server.CreateObject("Scripting.Dictionary")
Fin du sous-
classe privée sous-classe_Terminate()
m_content="" : m_looptmp="" : m_loop_content="" : m_looptag=""
m_TplPath="./" : m_SetTplPath=false
Définir tagData = Rien : Définir loopData = Rien
Fin de la propriété publique Sub
Get ClassName
Nom de classe = m_Nom de classe
de fin Propriété
publique Obtenir la version
Version = m_Version
Fin de la propriété
Propriété publique Obtenir le droit d'auteur
Droit d'auteur = m_Copyright
End Property
Rem est la propriété par défaut de la classe de modèle pour déterminer si le modèle contient cette balise.
Propriété publique par défaut Get Tag(tagname)
Balise = InStr(m_content,"{$" & tagname & "$")>0
End Property
Rem appelle la fonction d'affectation définie. Cette propriété est utilisée pour simplifier l'opération d'affectation.
Propriété publique Let Tag(tagname,replaceString)
Appeler Assign(tagname,replaceString)
Propriété de fin
Propriété publique Obtenir TplPath
TplPath = m_TplPath
End Property
Rem définit le chemin du fichier modèle
Propriété publique Let TplPath(sTplPath)
Si sTplPath<>"" Alors m_TplPath = sTplPath
Si Right(m_TplPath,1)<>"/" Alors m_TplPath = m_TplPath & "/"
Fin de
la fonction privée de propriété LoadFromFile (sFilePath, sCharset)
LoadFromFile = faux
Atténuer oStream
Définir oStream=Server.CreateObject("ADODB.Stream")
oStream.Type=2
oStream.Mode=3
oStream.Ouvrir
oStream.Charset=sCharset
oStream.Position=oStream.Taille
oStream.LoadFromFile sFilePath
LoadFromFile=oStream.ReadText
oStream.Fermer
Définir oStream=Rien
Fonction de fin
Fonction privée FileExist (filespec)
En cas d'erreur, reprendre ensuite
FichierExiste=Faux
Dim oFSO : Définir oFSO = Server.CreateObject("Scripting.FileSystemObject")
FileExist=oFSO.FileExists(filespec)
Définir oFSO=Rien
End Function
Rem obtient le bloc de boucle
Fonction privée GetTmpStr(tplstr,tagname,attname)
Dim regEx,Correspondances,Correspondance
Définir regEx = Nouvelle RegExp
regEx.Pattern = "<" & tagname & ".*?s+name=[""|'] & attname & "[""|']?.*?>([s S.]*?)</" & nom de balise & ">"
regEx.Global = Faux
regEx.IgnoreCase = True
Définir les correspondances = regEx.Execute (tplstr)
Pour chaque match dans les matchs
GetTmpStr=Match.Value
Suivant
Définir regEx = Rien
End Function
Rem supprime les balises HTML
Fonction privée RemoveTag(tagString,tagname)
Faible expression régulière
Définir regex = Nouvelle RegExp
regEx.Pattern = "<[/]?" & nom de balise & ".*?>"
regEx.Global = Vrai
regEx.IgnoreCase = True
RemoveTag = regEx.Replace(tagString,"")
Définir regex = rien
End Function
Rem Supprimer les lignes vides
Fonction privée RemoveSpace (tagString)
Faible expression régulière
Définir regex = Nouvelle RegExp
regEx.Pattern = "ns*r"
regEx.Global = Vrai
regEx.IgnoreCase = True
RemoveSpace = regEx.Replace(tagString,"")
Définir regex = rien
End Function
Rem lit les fichiers de modèles, traite les modèles imbriqués en même temps et fusionne les modèles
Fonction publique LoadTpl (tplfile)
tplfile=Serveur.MapPath(tplfile)
Si ce n'est pas FileExist (tplfile) alors
Response.Write « Échec du chargement du fichier modèle ! »
Réponse.Fin
Fonction de sortie
Fin si
m_content=LoadFromFile(tplfile,"GB2312")
Dim regEx, Correspondances, Correspondance, fname, sContent
Définir regEx = Nouvelle RegExp
regEx.Pattern = "{$include:(.*?)$}"
regEx.Global = Vrai
regEx.IgnoreCase = True
Définir les correspondances = regEx.Execute (m_content)
Pour chaque match dans les matchs
fname=Match.SubMatches(0)
fname=Serveur.MapPath(m_TplPath & fname)
Si FileExist(fname) Alors
sContent=LoadFromFile(fname,"GB2312")
m_content=replace(m_content,Match.value,sContent)
Fin si
Suivant
Définir regEx = Rien
Fonction de fin de
fonction de remplacement d'affectation
Affectation de fonction publique (tagname, replaceString)
Si tagname="" Alors quittez la fonction
Rem si c'est une étiquette de boucle
Si InStr(tagname,"/")>0 et InStr(tagname,"/")<Len(tagname) Alors
Rem obtient le nom de l'étiquette de la boucle
m_curLooptag=Gauche(nom de balise,InStrRev(nom de balise,"/")-1)
Si m_Looptag="" Alors
Rem Si l'étiquette de boucle est détectée pour la première fois, définissez la valeur initiale des variables requises pour la boucle.
m_looptag=m_curLooptag : m_loop_content=""
m_looptmp=GetTmpStr(m_content,"loop",m_Looptag)
Autre
Si m_LoopTag<>m_curLooptag Alors
Rem Si l'étiquette de la boucle change, la variable de boucle initiale
m_content=remplacer(m_content,m_looptmp,m_loop_content)
m_looptag=m_curLooptag : m_loop_content=""
m_looptmp=GetTmpStr(m_content,"loop",m_Looptag)
Fin si
Fin si
Si ce n'est pas le cas (loopData.Exists (tagname)) Then loopData.Add tagname,replaceString
Autre
Étiquette commune Rem
tagData.Ajouter un nom de balise, remplacerString
Fin si
End Function
Rem effectue un remplacement intra-bloc
Fonction publique Flush()
Si loopdata.count>0 alors
Faible je
chgtmp=SupprimerTag(m_looptmp,"boucle")
arrtag=loopData.keys
arrval=loopData.items
Pour i=0 À loopData.count-1
chgtmp=replace(chgtmp,"{$" & arrtag(i) & "$}",arrval(i))
Suivant
Rem enregistre les données du bloc dans une variable
m_loop_content=m_loop_content & chgtmp
loopdata.RemoveAll
Terminer si
End Function
Rem build, terminez le remplacement final du modèle
Fonction publique Bulid()
m_content=remplacer(m_content,m_looptmp,m_loop_content)
arrtag=tagData.keys
arrval=tagData.items
Pour i=0 À tagData.count-1
m_content=replace(m_content,"{$" & arrtag(i) & "$}",arrval(i))
Suivant
m_Content=SupprimerEspace(m_Content)
Réponse.Write m_Content
Classe de fin de
fonction de fin
%>
Code du modèle de modèle parent (default.tpl) :
code de programme
{$include:head.tpl$}
<h1 align=center>{$doc_title$}</h1>
<h3>{$news_title$}</h3>
<ul>
<nom de la boucle="nouvelles">
<Li style="color:#F00">Titre de l'actualité : {$news/title$}--Auteur : {$news/author$}</Li>
</boucle>
</ul>
<h3>{$lastest_news$}</h3>
<ul>
<!-- Le bing et le count dans la boucle ici sont uniquement destinés aux tests et ne sont pas nécessaires. Veuillez les supprimer lorsque vous les utilisez réellement -->.
<boucle bind="id" name=arts count="15">
<Li>Titre de l'article : {$arts/title$}--Auteur : {$arts/author$}</Li>
</boucle>
</ul>
{$include:foot.tpl$}
Sous-modèle imbriqué (head.tpl) :
code de programme
<titre>{$doc_title$}</titre>
Modèle enfant imbriqué (foot.tpl) :
code de programme
<p align=center>Droit d'auteur par DevJS.Com</p>
Code d'appel (par défaut.asp) :
code de programme
<!--#include file="function/template.asp"-->
<%
Exemple d'utilisation de la classe de modèle Rem
Set tp = new Template
tp.tplpath="tpl"
tp.LoadTpl(tp.tplpath & "default.tpl")
tp.assign "doc_title","Exemple de mécanisme de modèle"
tp.assign "news_title", "actualités nationales"
pour i=0 à 2
call tp.assign("arts/title","La crise financière a conduit à un grand nombre de chômeurs")
appelez tp.assign("arts/author","NetEase")
tp.flush
suivant
tp.assign "lastest_news", "Dernier article"
Rem utilise ici une autre méthode d'affectation
pour i=0 à 2
tp("news/title")="Les bonnes nouvelles du gouvernement contribueront à dynamiser le marché boursier"
tp("news/auteur")="SOHU"
tp.flush
suivant
tp.bulid
Définir tp = rien
%>
Cet article provient du blog de Shaoyun http://www.devjs.com/ , adresse originale : http://www.devjs.com/post/asp-template-class.html