คำอธิบายคลาสเทมเพลต ASP
: แบบฟอร์ม shaoyun www.devjs.com
เวลา: 17:05 10-12-2551
++การแนะนำฟังก์ชัน
--รองรับแท็กลูปชั้นเดียวและสามารถใช้ได้หลายครั้งในคลาสเพจ
--รองรับการแนะนำไฟล์เทมเพลต เมื่อโหลด เทมเพลตจะถูกรวมเข้าด้วยกัน
--คุณสามารถระบุพาธของไฟล์เทมเพลตได้ พาธเป็นพาธแบบสัมพันธ์ และค่าเริ่มต้นคือพาธของไฟล์ปัจจุบัน
--สำหรับผลลัพธ์สุดท้ายของบรรทัดว่าง ให้ลบ
แท็ก ++
{$tag$} แท็กธรรมดา
ออก
แท็กไฟล์เทมเพลต {$include:filename$}
<loop name="tagname">...</loop> loop tag แอตทริบิวต์ name คือชื่อแท็ก
คำอธิบายแท็กย่อย ++
ในแท็กลูป
:ใช้นิพจน์ทั่วไปเพื่อจับคู่และกรองแท็ก สามารถมีช่องว่างหลายช่องก่อนแอตทริบิวต์ name ในแท็กลูป และอาจมีแอตทริบิวต์อื่นๆ ก่อนและหลังชื่อได้ แอตทริบิวต์สามารถใส่เครื่องหมายคำพูดเดี่ยวและเครื่องหมายคำพูดคู่ได้ การตั้งค่าจะตรงกับ
คำอธิบายฟังก์ชัน ++
ตัวแรกเท่านั้นเมื่ออ่าน ให้ตรวจสอบแท็กไฟล์เทมเพลตที่ซ้อนกันในไฟล์เทมเพลต แทนที่เนื้อหาของแท็กไฟล์เทมเพลตที่ซ้อนกัน รวมไฟล์เทมเพลต และจัดเก็บไว้ใน
ฟังก์ชันกำหนดตัวแปรเพื่อวิเคราะห์แท็กเทมเพลต ให้เพิ่มลงในออบเจ็กต์ข้อมูล หากเป็นแท็กลูป ให้จัดเก็บไว้ใน อ็อบเจ็กต์ข้อมูลลูป หากเป็นอ็อบเจ็กต์แท็กลูป ให้แทนที่ ข้อมูลที่สะสมในวงจรจะถูกเพิ่มไปยัง
คลาสเทมเพลตฟังก์ชัน Flush ของอ
อบเจ็กต์วงจรจะดำเนินการแทนที่ภายในของบล็อกวงจรและสะสมและบันทึกข้อมูลวงจรแต่ละรอบ หลังจากเสร็จสิ้น จะต้องเรียกใช้ฟังก์ชัน Bulid
เพื่อเพิ่มข้อมูลลูปที่ยังไม่ได้บันทึกและบันทึกไว้ไปยังออบเจ็กต์ข้อมูล จากนั้นจึงส่งออกข้อมูลทั้งหมดใน วัตถุข้อมูลตามคำจำกัดความของเทมเพลต การแทนที่ป้ายกำกับธรรมดาจะเสร็จสมบูรณ์ในขั้นตอนนี้ โดยเฉพาะ
ฟังก์ชันการกำหนดมีความสะดวก วิธีการกำหนดคือการเรียกแอตทริบิวต์เริ่มต้นเพื่อกำหนดค่าให้มีผลเหมือนกัน ตัวอย่าง:
รหัสโปรแกรม
tp.assign("title", "news")
โค้ดโปรแกรม
วิธีการมอบหมายที่กระชับกว่านี้ได้
tp("title")="News"
tp เป็นวัตถุเทมเพลตอินสแตนซ์
รหัสเทมเพลตทั้งหมดมีดังนี้ (template.asp):
รหัสโปรแกรม
-
เทมเพลตคลาส
ส่วนตัว m_content,m_looptmp,tagData,loopdata,m_loop_content,m_Looptag,m_TplPath,m_SetTplPath
ส่วนตัว m_ClassName, m_Version, m_Copyright
ส่วนตัว Sub Class_Initialize()
m_content="" : m_looptmp="" : m_loop_content="" : m_looptag=""
m_ClassName = "คลาสเทมเพลต Shaoyun ASP" : m_Version = "1.0" : m_Copyright = "DevJS.com"
m_TplPath="./" : m_SetTplPath=false
ตั้งค่า tagData = Server.CreateObject("Scripting.Dictionary")
ตั้งค่า loopData = Server.CreateObject("Scripting.Dictionary")
สิ้นสุด
ย่อยส่วนตัวย่อย Class_Terminate()
m_content="" : m_looptmp="" : m_loop_content="" : m_looptag=""
m_TplPath="./" : m_SetTplPath=false
ตั้งค่า tagData = Nothing : ตั้งค่า loopData = Nothing
สิ้นสุด
ทรัพย์สินสาธารณะย่อยรับ ClassName
ชื่อคลาส = m_ClassName
End Property
ทรัพย์สินสาธารณะรับเวอร์ชัน
เวอร์ชัน = m_เวอร์ชัน
End Property
ทรัพย์สินสาธารณะได้รับลิขสิทธิ์
ลิขสิทธิ์ = m_ลิขสิทธิ์
คุณสมบัติสิ้นสุด
Rem เป็นคุณสมบัติเริ่มต้นของคลาสเทมเพลตเพื่อพิจารณาว่าเทมเพลตมีแท็กนี้หรือไม่
คุณสมบัติเริ่มต้นสาธารณะรับแท็ก (tagname)
แท็ก = InStr(m_content,"{$" & tagname & "$")>0
คุณสมบัติสิ้นสุด
Rem เรียกใช้ฟังก์ชันการกำหนดที่กำหนดไว้ คุณสมบัตินี้ใช้เพื่อลดความซับซ้อนในการดำเนินการกำหนด
ทรัพย์สินสาธารณะให้แท็ก (tagname, แทนที่สตริง)
กำหนดการโทร (tagname, แทนที่สตริง)
End Property
ทรัพย์สินสาธารณะรับ TplPath
TplPath = m_TplPath
End Property
Rem กำหนดเส้นทางของไฟล์เทมเพลต
ทรัพย์สินสาธารณะให้ TplPath (sTplPath)
ถ้า sTplPath<>"" ดังนั้น m_TplPath = sTplPath
ถ้าเป็นขวา(m_TplPath,1)<>"/" ดังนั้น m_TplPath = m_TplPath & "/"
ฟังก์ชั่นส่วนตัวสิ้นสุด
คุณสมบัติ LoadFromFile (sFilePath, sCharset)
LoadFromFile=false
ติ่ม oStream
ตั้งค่า oStream=Server.CreateObject("ADODB.Stream")
oStream.Type=2
oStream.Mode=3
oStream.เปิด
oStream.Charset=sCharset
oStream.Position=oStream.Size
oStream.LoadFromFile sFilePath
LoadFromFile=oStream.ReadText
oStream.ปิด
ตั้งค่า oStream=Nothing
ฟังก์ชั่นสิ้นสุด
ฟังก์ชั่นส่วนตัว FileExist (filespec)
เมื่อเกิดข้อผิดพลาด ดำเนินการต่อต่อไป
FileExist=เท็จ
Dim oFSO : ตั้งค่า oFSO = Server.CreateObject("Scripting.FileSystemObject")
FileExist=oFSO.FileExists(ข้อมูลจำเพาะของไฟล์)
ตั้งค่า oFSO=ไม่มีอะไร
End Function
Rem รับบล็อกลูป
ฟังก์ชั่นส่วนตัว GetTmpStr (tplstr, tagname, attname)
Dim regEx, การแข่งขัน, การแข่งขัน
ตั้งค่า regEx = RegExp ใหม่
regEx.Pattern = "<" & tagname & ".*?s+name=[""|']?" & attname & "[""|']?.*?>([s S.]*?)</" & ชื่อแท็ก & ">"
regEx.Global = เท็จ
regEx.IgnoreCase = จริง
ตั้งค่าการจับคู่ = regEx.Execute(tplstr)
สำหรับการแข่งขันแต่ละครั้งในการแข่งขัน
GetTmpStr=Match.Value
ต่อไป
ตั้งค่า regEx = ไม่มีเลย
End Function
Rem จะลบแท็ก HTML
ฟังก์ชั่นส่วนตัว RemoveTag (tagString, tagname)
หรี่นิพจน์ทั่วไป
ตั้งค่า regex=RegExp ใหม่
regEx.Pattern = "<[/]?" & แท็กชื่อ & ".*?>"
regEx.Global = จริง
regEx.IgnoreCase = จริง
RemoveTag = regEx.Replace(tagString,"")
ตั้งค่า regex=nothing
End Function
Rem ลบบรรทัดว่าง
ฟังก์ชั่นส่วนตัว RemoveSpace (tagString)
หรี่นิพจน์ทั่วไป
ตั้งค่า regex=RegExp ใหม่
regEx.Pattern = "ns*r"
regEx.Global = จริง
regEx.IgnoreCase = จริง
RemoveSpace = regEx.Replace(tagString,"")
ตั้งค่า regex=nothing
ฟังก์ชั่นสิ้นสุด
Rem อ่านไฟล์เทมเพลต ประมวลผลเทมเพลตที่ซ้อนกันในเวลาเดียวกัน และผสานเทมเพลต
ฟังก์ชั่นสาธารณะ LoadTpl (tplfile)
tplfile=Server.MapPath(tplfile)
ถ้าไม่ใช่ FileExist(tplfile) แล้ว
การตอบสนองเขียน "โหลดไฟล์เทมเพลตล้มเหลว!"
การตอบสนองสิ้นสุด
ออกจากฟังก์ชัน
สิ้นสุดถ้า
m_content=LoadFromFile(tplfile,"GB2312")
Dim regEx, แมตช์, แมตช์, fname, sContent
ตั้งค่า regEx = RegExp ใหม่
regEx.Pattern = "{$include:(.*?)$}"
regEx.Global = จริง
regEx.IgnoreCase = จริง
ตั้งค่าการจับคู่ = regEx.Execute(m_content)
สำหรับการแข่งขันแต่ละครั้งในการแข่งขัน
fname=Match.SubMatches(0)
fname=Server.MapPath(m_TplPath & fname)
ถ้า FileExist(fname) แล้ว
sContent=LoadFromFile(fname,"GB2312")
m_content=replace(m_content,Match.value,sContent)
สิ้นสุดถ้า
ต่อไป
ตั้งค่า regEx = ไม่มีเลย
ฟังก์ชั่นการเปลี่ยนการกำหนด
ฟังก์ชันสิ้นสุด
กำหนดฟังก์ชั่นสาธารณะ (tagname, แทนที่สตริง)
ถ้า tagname="" ให้ออกจากฟังก์ชัน
Rem หากเป็นป้ายกำกับแบบวนซ้ำ
ถ้า InStr(tagname,"/")>0 และ InStr(tagname,"/")<Len(tagname) แล้ว
Rem ได้รับชื่อป้ายกำกับลูป
m_curLooptag=ซ้าย(ชื่อแท็ก,InStrRev(ชื่อแท็ก,"/")-1)
ถ้า m_Looptag="" แล้ว
Rem หากตรวจพบป้ายกำกับลูปเป็นครั้งแรก ให้ตั้งค่าเริ่มต้นของตัวแปรที่จำเป็นสำหรับลูป
m_looptag=m_curLooptag : m_loop_content=""
m_looptmp=GetTmpStr(m_content,"ลูป",m_Looptag)
อื่น
ถ้า m_LoopTag<>m_curLooptag แล้ว
Rem หากป้ายกำกับลูปเปลี่ยนแปลง ตัวแปรลูปเริ่มต้น
m_content=แทนที่(m_content,m_looptmp,m_loop_content)
m_looptag=m_curLooptag : m_loop_content=""
m_looptmp=GetTmpStr(m_content,"ลูป",m_Looptag)
สิ้นสุดถ้า
สิ้นสุดถ้า
ถ้าไม่ใช่(loopData.Exists(tagname)) ให้loopData.Add tagname,replaceString
อื่น
Rem ฉลากทั่วไป
tagData.Add tagname,replaceString
สิ้นสุดถ้า
End Function
Rem ดำเนินการเปลี่ยนภายในบล็อก
ฟังก์ชั่นสาธารณะฟลัช()
ถ้า loopdata.count>0 แล้ว
ดิม ไอ
chgtmp=RemoveTag(m_looptmp,"ลูป")
arrtag=loopData.keys
arrval=loopData.items
สำหรับ i=0 ถึง loopData.count-1
chgtmp=replace(chgtmp,"{$" & arrtag(i) & "$}",arrval(i))
ต่อไป
Rem บันทึกข้อมูลในบล็อกไปยังตัวแปร
m_loop_content=m_loop_content & chgtmp
loopdata.RemoveAll
จบถ้า
End Function
Rem build ดำเนินการเปลี่ยนเทมเพลตขั้นสุดท้ายให้เสร็จสิ้น
ฟังก์ชั่นสาธารณะ Bulid()
m_content=แทนที่(m_content,m_looptmp,m_loop_content)
arrtag=tagData.keys
arrval=tagData.items
สำหรับ i=0 ถึง tagData.count-1
m_content=replace(m_content,"{$" & arrtag(i) & "$}",arrval(i))
ต่อไป
m_Content=RemoveSpace(m_Content)
การตอบสนองเขียน m_Content
ฟังก์ชันสิ้นสุด
คลาสสิ้นสุด
-
รหัสเทมเพลตเทมเพลตหลัก (default.tpl):
รหัสโปรแกรม
{$รวม:head.tpl$}
<h1 align=center>{$doc_title$}</h1>
<h3>{$news_title$}</h3>
<ul>
<ชื่อวง = "ข่าว">
<Li style="color:#F00">ชื่อข่าว: {$news/title$}--ผู้เขียน: {$news/author$}</Li>
</วนรอบ>
</ul>
<h3>{$lastest_news$}</h3>
<ul>
<!-- bing และจำนวนในลูปที่นี่มีไว้เพื่อการทดสอบเท่านั้นและไม่จำเป็น โปรดลบออกเมื่อใช้งานจริง -->
<ห่วงผูก = "id" ชื่อ = ศิลปะนับ = "15">
<Li>ชื่อบทความ: {$arts/title$}--ผู้เขียน: {$arts/author$}</Li>
</วนรอบ>
</ul>
{$รวม:foot.tpl$}
เทมเพลตย่อยที่ซ้อนกัน (head.tpl):
รหัสโปรแกรม
<title>{$doc_title$}</title>
เทมเพลตลูกที่ซ้อนกัน (foot.tpl):
รหัสโปรแกรม
<p align=center>ลิขสิทธิ์โดย DevJS.Com</p>
รหัสการโทร (default.asp):
รหัสโปรแกรม
<!--#include file="function/template.asp"-->
-
ตัวอย่างการใช้งานคลาสเทมเพลต Rem
ตั้งค่า tp = เทมเพลตใหม่
tp.tplpath="tpl"
tp.LoadTpl(tp.tplpath & "default.tpl")
tp.assign "doc_title", "ตัวอย่างกลไกเทมเพลต"
tp.มอบหมาย "news_title", "ข่าวในประเทศ"
สำหรับ i=0 ถึง 2
call tp.assign("arts/title","วิกฤตการณ์ทางการเงินส่งผลให้มีผู้ว่างงานจำนวนมาก")
โทร tp.assign("arts/author","NetEase")
tp.ฟลัช
ต่อไป
tp.มอบหมาย "lastest_news", "บทความล่าสุด"
Rem ใช้วิธีการมอบหมายงานแบบอื่นที่นี่
สำหรับ i=0 ถึง 2
tp("news/title")="ข่าวดีของรัฐบาลจะช่วยหนุนตลาดหุ้น"
tp("ข่าว/ผู้เขียน")="SOHU"
tp.ฟลัช
ต่อไป
tp.bulid
ตั้งค่า tp = ไม่มีเลย
-
บทความนี้มาจากบล็อกของ shaoyun http://www.devjs.com/ ที่อยู่เดิม: http://www.devjs.com/post/asp-template-class.html