der Beschreibung der ASP-Vorlagenklasse
: shaoyun Form www.devjs.com
Zeit: 17:05 10.12.2008
++Funktionseinführung
--Unterstützt einschichtige Schleifen-Tags und kann in einer Seitenklasse mehrfach verwendet werden.
--Unterstützt die Einführung von Vorlagendateien. Beim Laden werden die Vorlagen zusammengeführt.
--Sie können den Pfad der Vorlagendatei angeben. Der Pfad ist ein relativer Pfad und der Standardwert ist der aktuelle Dateipfad.
--Für die endgültige Ausgabe von Leerzeilen löschen Sie
die
normalen Tags der ++-Tag-Definition {$tag$}
{$include:filename$} Vorlagendatei-Tag
<loop name="tagname">...</loop> Schleifen-Tag, das Namensattribut ist der Tag-Name
++ Tag-Beschreibung
im Schleifen-Tag
:Verwenden Sie reguläre Ausdrücke, um Tags abzugleichen und zu filtern. Vor dem Namensattribut können im Schleifen-Tag mehrere Leerzeichen stehen, und vor und nach dem Namen können andere Attribute stehen Attribute können in Anführungszeichen gesetzt werden oder nicht. Die Einstellung entspricht nur der ersten
++-Funktionsbeschreibung
.Überprüfen Sie beim Lesen das verschachtelte Vorlagendatei-Tag. Ersetzen Sie den Inhalt des verschachtelten Vorlagendatei-Tags, führen Sie die Vorlagendateien zusammen und speichern Sie ihn in der Variablen
„Assign“-Funktion, um den Vorlagen-Tag zu analysieren. Wenn es sich um einen Schleifen-Tag handelt, speichern Sie ihn in Wenn es sich um ein Schleifen-Tag-Objekt handelt, werden die im Zyklus gesammelten Daten zur
Flush-Funktionsvorlagenklasse
hinzugefügtZyklus führt es eine interne Ersetzung des Zyklusblocks durch und sammelt und speichert die Zyklusdaten. Bei jedem einzelnen Zyklus muss die Bulid-Funktion aufgerufen werden,
um die nicht gespeicherten und gespeicherten Schleifendaten zum Datenobjekt hinzuzufügen und dann alle Daten auszugeben Das Ersetzen gewöhnlicher Beschriftungen wird in diesem Schritt abgeschlossen.
Die Zuweisungsmethode besteht darin, das Standardattribut aufzurufen, um den Wert zuzuweisen Beispiel:
Programmcode
tp.assign("title","news")
kann diesen prägnanteren
Programmcode
für die Zuweisungsmethode verwenden
tp("title")="News"
tp ist ein instanziiertes Vorlagenobjekt.
Der gesamte Vorlagencode lautet wie folgt (template.asp):
Programmcode
<%
Klassenvorlage
Privat m_content,m_looptmp,tagData,loopdata,m_loop_content,m_Looptag,m_TplPath,m_SetTplPath
Private m_ClassName,m_Version,m_Copyright
Private Sub Class_Initialize()
m_content="" : m_looptmp="" : m_loop_content="" : m_looptag=""
m_ClassName="Shaoyun ASP-Vorlagenklasse" : m_Version="1.0" : m_Copyright="DevJS.com"
m_TplPath="./" : m_SetTplPath=false
Setze tagData = Server.CreateObject("Scripting.Dictionary")
Setze loopData = Server.CreateObject("Scripting.Dictionary")
End Sub
Private Sub Class_Terminate()
m_content="" : m_looptmp="" : m_loop_content="" : m_looptag=""
m_TplPath="./" : m_SetTplPath=false
Setze tagData = Nothing: Setze loopData = Nothing
End Sub
Public Property Get ClassName
Klassenname = m_Klassenname
End-Eigenschaft
Öffentliches Eigentum Version abrufen
Version = m_Version
Ende des Eigentums,
öffentliches Eigentum, Urheberrecht erhalten
Urheberrecht = m_Copyright
End Property
Rem ist die Standardeigenschaft der Vorlagenklasse, um zu bestimmen, ob die Vorlage dieses Tag enthält.
Öffentliche Standardeigenschaft Get Tag(tagname)
Tag = InStr(m_content,"{$" & tagname & "$")>0
End Property
Rem ruft die definierte Zuweisungsfunktion auf. Diese Eigenschaft wird verwendet, um den Zuweisungsvorgang zu vereinfachen.
Öffentliche Eigenschaft Let Tag(tagname,replaceString)
Call Assign(tagname,replaceString)
End-Eigenschaft
Öffentliche Eigenschaft Get TplPath
TplPath = m_TplPath
End Property
Rem legt den Pfad der Vorlagendatei fest
Öffentliche Eigenschaft Let TplPath(sTplPath)
Wenn sTplPath<>"" Dann ist m_TplPath = sTplPath
If Right(m_TplPath,1)<>"/" Then m_TplPath = m_TplPath & "/"
End-Eigenschaft
Private Function LoadFromFile(sFilePath,sCharset)
LoadFromFile=false
oStream dimmen
Setze 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.Schließen
Setzen Sie oStream=Nothing
Endfunktion
Private Funktion FileExist(filespec)
Bei Fehler Weiter fortsetzen
FileExist=False
Dim oFSO: Set oFSO = Server.CreateObject("Scripting.FileSystemObject")
FileExist=oFSO.FileExists(filespec)
Stellen Sie oFSO=Nichts ein
End Function
Rem ruft den Schleifenblock ab
Private Funktion GetTmpStr(tplstr,tagname,attname)
Dimmen Sie regEx,Matches,Match
Setze regEx = New RegExp
regEx.Pattern = "<" & tagname & ".*?s+name=[""|']?" & attname & "[""|']?.*?>([s S.]*?)</" & tagname & ">"
regEx.Global = Falsch
regEx.IgnoreCase = True
Set Matches = regEx.Execute(tplstr)
Für jedes Spiel in Spielen
GetTmpStr=Match.Value
Nächste
Setze regEx = Nothing
End Function
Rem entfernt HTML-Tags
Private Funktion RemoveTag(tagString,tagname)
Regex abdunkeln
Setze regex=Neuer RegExp
regEx.Pattern = "<[/]?" & tagname & ".*?>"
regEx.Global = True
regEx.IgnoreCase = True
RemoveTag = regEx.Replace(tagString,"")
Setze regex=nothing
End Function
Rem Leerzeilen entfernen
Private Funktion RemoveSpace(tagString)
Regex abdunkeln
Setze regex=Neuer RegExp
regEx.Pattern = "ns*r"
regEx.Global = True
regEx.IgnoreCase = True
RemoveSpace = regEx.Replace(tagString,"")
Setze regex=nothing
End Function
Rem liest Vorlagendateien, verarbeitet gleichzeitig verschachtelte Vorlagen und führt Vorlagen zusammen
Öffentliche Funktion LoadTpl(tplfile)
tplfile=Server.MapPath(tplfile)
Wenn nicht FileExist(tplfile) Dann
Response.Write „Laden der Vorlagendatei fehlgeschlagen!“
Antwort.Ende
Exit-Funktion
Ende wenn
m_content=LoadFromFile(tplfile,"GB2312")
RegEx,Matches,Match,fname,sContent dimmen
Setze regEx = New RegExp
regEx.Pattern = "{$include:(.*?)$}"
regEx.Global = True
regEx.IgnoreCase = True
Set Matches = regEx.Execute(m_content)
Für jedes Spiel in Spielen
fname=Match.SubMatches(0)
fname=Server.MapPath(m_TplPath & fname)
Wenn FileExist(fname) Dann
sContent=LoadFromFile(fname,"GB2312")
m_content=replace(m_content,Match.value,sContent)
Ende wenn
Nächste
Setze regEx = Nothing
End Function
Rem-Zuweisungs-Ersetzungsfunktion
Öffentliche Funktion Assign(tagname,replaceString)
Wenn tagname="", dann Funktion beenden
Rem, wenn es sich um ein Loop-Label handelt
Wenn InStr(tagname,"/")>0 und InStr(tagname,"/")<Len(tagname) Dann
Rem erhält den Namen des Loop-Labels
m_curLooptag=Left(tagname,InStrRev(tagname,"/")-1)
Wenn m_Looptag="" Dann
Rem Wenn die Schleifenbezeichnung zum ersten Mal erkannt wird, legen Sie den Anfangswert der für die Schleife erforderlichen Variablen fest.
m_looptag=m_curLooptag : m_loop_content=""
m_looptmp=GetTmpStr(m_content,"loop",m_Looptag)
Anders
Wenn m_LoopTag<>m_curLooptag Dann
Rem Wenn sich die Schleifenbezeichnung ändert, ist dies die anfängliche Schleifenvariable
m_content=replace(m_content,m_looptmp,m_loop_content)
m_looptag=m_curLooptag : m_loop_content=""
m_looptmp=GetTmpStr(m_content,"loop",m_Looptag)
Ende wenn
Ende wenn
If Not(loopData.Exists(tagname)) Then loopData.Add tagname,replaceString
Anders
Rem gemeinsames Etikett
tagData.Tagnamen hinzufügen,String ersetzen
Ende wenn
End Function
Rem führt eine blockinterne Ersetzung durch
Öffentliche Funktion Flush()
Wenn loopdata.count>0 dann
Dim ich
chgtmp=RemoveTag(m_looptmp,"loop")
arrtag=loopData.keys
arrval=loopData.items
Für i=0 Zu loopData.count-1
chgtmp=replace(chgtmp,"{$" & arrtag(i) & "$}",arrval(i))
Nächste
Rem speichert die Daten im Block in einer Variablen
m_loop_content=m_loop_content & chgtmp
loopdata.RemoveAll
Ende wenn
End Function
Rem Build, schließen Sie den endgültigen Ersatz der Vorlage ab
Öffentliche Funktion Bulid()
m_content=replace(m_content,m_looptmp,m_loop_content)
arrtag=tagData.keys
arrval=tagData.items
Für i=0 bis tagData.count-1
m_content=replace(m_content,"{$" & arrtag(i) & "$}",arrval(i))
Nächste
m_Content=RemoveSpace(m_Content)
Response.Write m_Content
Endfunktion
Endklasse
%>
Vorlagencode der übergeordneten Vorlage (default.tpl):
Programmcode
{$include:head.tpl$}
<h1 align=center>{$doc_title$}</h1>
<h3>{$news_title$}</h3>
<ul>
<loop name="news">
<Li style="color:#F00">Nachrichtentitel: {$news/title$}--Autor: {$news/author$}</Li>
</loop>
</ul>
<h3>{$lastest_news$}</h3>
<ul>
<!-- Die Bing- und Count-Werte in der Schleife dienen nur zu Testzwecken und sind nicht erforderlich, wenn Sie sie tatsächlich verwenden -->
<loop bind="id" name=arts count="15">
<Li>Artikeltitel: {$arts/title$}--Autor: {$arts/author$}</Li>
</loop>
</ul>
{$include:foot.tpl$}
Verschachtelte Untervorlage (head.tpl):
Programmcode
<title>{$doc_title$}</title>
Verschachtelte untergeordnete Vorlage (foot.tpl):
Programmcode
<p align=center>Copyright by DevJS.Com</p>
Aufrufcode (default.asp):
Programmcode
<!--#include file="function/template.asp"-->
<%
Beispiel für die Verwendung der Rem-Vorlagenklasse.
Setze tp = neue Vorlage
tp.tplpath="tpl"
tp.LoadTpl(tp.tplpath & „default.tpl“)
tp.assign „doc_title“, „Beispiel für Vorlagenmechanismus“
tp.assign „news_title“, „inländische Nachrichten“
für i=0 bis 2
call tp.assign("arts/title","Die Finanzkrise hat zu einer großen Zahl von Arbeitslosen geführt")
Rufen Sie tp.assign("arts/author","NetEase") auf
Tp.Spülung
nächste
tp.assign „lastest_news“, „Neuester Artikel“
Rem verwendet hier eine andere Zuweisungsmethode
für i=0 bis 2
tp("news/title")="Gute Nachrichten von der Regierung werden dazu beitragen, den Aktienmarkt anzukurbeln"
tp("news/author")="SOHU"
Tp.Spülung
nächste
tp.bulid
Setze tp = nichts
%>
Dieser Artikel stammt aus Shaoyuns Blog http://www.devjs.com/ , Originaladresse: http://www.devjs.com/post/asp-template-class.html