وصف فئة قالب ASP
: نموذج shaoyun www.devjs.com
الوقت: 17:05 2008-12-10
++مقدمة الوظيفة
- يدعم علامات الحلقة أحادية الطبقة ويمكن استخدامها عدة مرات في فئة الصفحة.
--يدعم إدخال ملفات القالب عند التحميل، سيتم دمج القوالب.
- يمكنك تحديد مسار ملف القالب، المسار هو مسار نسبي والافتراضي هو مسار الملف الحالي.
--للحصول على الإخراج النهائي للأسطر الفارغة، احذف
لتعريف علامة ++
{$tag$}.
علامة ملف القالب {$include:filename$}
<loop name="tagname">...</loop> علامة الحلقة، سمة الاسم هي اسم العلامة
وصف العلامة الفرعية ++
في علامة الحلقة
:استخدم التعبيرات العادية لمطابقة العلامات وتصفيتها. يمكن أن تكون هناك مسافات متعددة قبل سمة الاسم في علامة الحلقة، ويمكن أن تكون هناك سمات أخرى قبل الاسم وبعده يمكن التعرف على علامات الاقتباس المفردة وعلامات الاقتباس المزدوجة فقط.
تقرأ وظيفةLoadTPL
ملف القالب عند القراءة. استبدل محتوى علامة ملف القالب المتداخلة، وادمج ملفات القالب، وقم بتخزينها في
وظيفة تعيين المتغير لتحليل علامة القالب، وأضفها إلى كائن البيانات إذا كانت علامة حلقة، وقم بتخزينها فيها إذا كان كائن بيانات الحلقة، فاستبدله، ثم تتم إضافة البيانات المتراكمة في الدورة إلى
فئة قالب وظيفة Flush، وهي وظيفة مهمة جدًا تستخدم لمعالجة تسميات الدورة تقوم بإجراء استبدال داخلي لكتلة الدورة وتجميع بيانات الدورة وحفظها بعد الانتهاء، ويجب استدعاء وظيفة Bulid
لإضافة بيانات الحلقة غير المحفوظة والمحفوظة إلى كائن البيانات، ثم إخراج جميع البيانات فيها. كائن البيانات وفقًا لتعريف القالب، اكتمل استبدال التسميات العادية في هذه الخطوة، على وجه
الخصوص، تحتوي وظيفة التعيين على طريقة مناسبة لاستدعاء السمة الافتراضية لتعيين القيمة مثال:
كود البرنامج
tp.assi("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
Private 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")
تعيين بيانات الحلقة = Server.CreateObject("Scripting.Dictionary")
نهاية
Sub Class_Terminate الخاصة ()
m_content = "" : m_looptmp = "" : m_loop_content = "" : m_looptag = ""
m_TplPath="./" : m_SetTplPath=false
تعيين tagData = لا شيء: تعيين بيانات الحلقة = لا شيء
نهاية الملكية العامة الفرعية
احصل على ClassName
ClassName = m_ClassName
نهاية الملكية
الملكية العامة الحصول على النسخة
الإصدار = m_Version
نهاية الملكية
الملكية العامة الحصول على حقوق النشر
حقوق النشر = m_Copyright
End Property
Rem هي الخاصية الافتراضية لفئة القالب لتحديد ما إذا كان القالب يحتوي على هذه العلامة.
الملكية الافتراضية العامة احصل على العلامة (اسم العلامة)
العلامة = InStr(m_content,"{$" & tagname & "$")>0
خاصية End
Rem باستدعاء وظيفة التعيين المحددة. يتم استخدام هذه الخاصية لتبسيط عملية التعيين.
علامة السماح للملكية العامة (اسم العلامة، سلسلة الاستبدال)
تعيين المكالمة (اسم العلامة، استبدال السلسلة)
نهاية الملكية
الملكية العامة احصل على TplPath
TplPath = m_TplPath
تقوم End Property
Rem بتعيين مسار ملف القالب
الملكية العامة دع TplPath(sTplPath)
إذا كان sTplPath<>"" ثم m_TplPath = sTplPath
إذا كان Right(m_TplPath,1)<>"/" ثم m_TplPath = m_TplPath & "/"
نهاية الخاصية
الخاصة LoadFromFile(sFilePath,sCharset)
LoadFromFile=false
خافت أوستريم
تعيين 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.Close
اضبط oStream=لا شيء
وظيفة النهاية
الخاصة FileExist(filespec)
على خطأ استئناف التالي
FileExist=خطأ
Dim oFSO : تعيين oFSO = Server.CreateObject("Scripting.FileSystemObject")
FileExist=oFSO.FileExists(filespec)
ضبط oFSO = لا شيء
وظيفة النهاية
Rem تحصل على كتلة الحلقة
الوظيفة الخاصة GetTmpStr(tplstr,tagname,attname)
التعبير العادي الخافت، التطابقات، المطابقة
قم بتعيين regEx = New RegExp
regEx.Pattern = "<" & tagname & ".*?s+name=[""|']؟" & attname & "[""|']?.*?>([s S.]*?)</" & اسم العلامة & ">"
regEx.Global = خطأ
regEx.IgnoreCase = صحيح
تعيين التطابقات = regEx.Execute(tplstr)
لكل مباراة في المباريات
GetTmpStr=Match.Value
التالي
تعيين regEx = لا شيء
تعمل وظيفة النهاية
Rem على إزالة علامات HTML
وظيفة خاصة RemoveTag(tagString,tagname)
التعبير العادي الخافت
اضبط regex=RegExp الجديد
regEx.Pattern = "<[/]؟" & اسم العلامة & ".*?>"
regEx.Global = صحيح
regEx.IgnoreCase = صحيح
RemoveTag = regEx.Replace(tagString،"")
تعيين regex = لا شيء
وظيفة النهاية
Rem إزالة الأسطر الفارغة
وظيفة خاصة RemoveSpace(tagString)
التعبير العادي الخافت
اضبط regex=RegExp الجديد
regEx.Pattern = "ns*r"
regEx.Global = صحيح
regEx.IgnoreCase = صحيح
RemoveSpace = regEx.Replace(tagString،"")
تعيين regex = لا شيء
وظيفة النهاية
Rem تقرأ ملفات القالب، وتعالج القوالب المتداخلة في نفس الوقت، وتدمج القوالب
تحميل الوظيفة العامة Tpl(tplfile)
tplfile=Server.MapPath(tplfile)
إذا لم يكن FileExist(tplfile) إذن
Response.Write "فشل تحميل ملف القالب!"
الاستجابة.النهاية
وظيفة الخروج
نهاية إذا
m_content=LoadFromFile(tplfile،"GB2312")
التعبير العادي الخافت، التطابقات، المطابقة، fname، sContent
قم بتعيين regEx = New 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 = لا شيء
وظيفة
استبدال مهمة Rem
تعيين الوظيفة العامة (اسم العلامة، سلسلة الاستبدال)
إذا كان tagname = "" ثم اخرج من الوظيفة
Rem إذا كانت تسمية حلقة
إذا كان InStr(tagname,"/")>0 وInStr(tagname,"/")<Len(tagname) إذن
يحصل Rem على اسم تسمية الحلقة
m_curLooptag=Left(tagname,InStrRev(tagname,"/")-1)
إذا m_Looptag = "" ثم
Rem إذا تم اكتشاف تسمية الحلقة لأول مرة، فقم بتعيين القيمة الأولية للمتغيرات المطلوبة للحلقة.
m_looptag=m_curLooptag : m_loop_content = ""
m_looptmp=GetTmpStr(m_content،"loop"،m_Looptag)
آخر
إذا كان m_LoopTag<>m_curLooptag إذن
Rem إذا تغيرت تسمية الحلقة، فإن متغير الحلقة الأولي
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)
نهاية إذا
نهاية إذا
إذا لم يكن (loopData.Exists(tagname)) ثم loopData.Add tagname، استبدال String
آخر
ريم التسمية المشتركة
tagData.Add tagname،replaceString
نهاية إذا
وظيفة النهاية
Rem بالاستبدال داخل الكتلة
تدفق الوظيفة العامة ()
إذا كان حلقة البيانات. العد> 0 ثم
خافت ط
chgtmp=RemoveTag(m_looptmp،"loop")
arrtag=loopData.keys
arrval=loopData.items
من أجل i=0 إلى حلقة البيانات.count-1
chgtmp=replace(chgtmp,"{$" & arrtag(i) & "$}",arrval(i))
التالي
يقوم Rem بحفظ البيانات الموجودة في الكتلة إلى متغير
m_loop_content=m_loop_content & chgtmp
حلقة البيانات.إزالة الكل
انتهي إذا
إنهاء وظيفة
Rem build، إكمال الاستبدال النهائي للقالب
الوظيفة العامة Bulid()
m_content=replace(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=إزالة المساحة(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 وcount الموجودين في الحلقة هنا مخصصان للاختبار فقط وليسا ضروريين، يرجى حذفهما عند استخدامهما بالفعل -->
<loop bind="id" name=arts count="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
Set tp = new Template
tp.tplpath = "tpl"
tp.LoadTpl(tp.tplpath & "default.tpl")
tp.assistant "doc_title"، "مثال لآلية القالب"
tp.sign "news_title"، "الأخبار المحلية"
لأني = 0 إلى 2
call tp.assi("arts/title"،"الأزمة المالية أدت إلى ظهور عدد كبير من العاطلين عن العمل")
اتصل بـ tp.assis("arts/author"،"NetEase")
tp.flush
التالي
tp.assistant "lastest_news"، "أحدث مقال"
يستخدم Rem طريقة تعيين أخرى هنا
لأني = 0 إلى 2
tp("news/title")="الأخبار الجيدة من الحكومة ستساعد في تعزيز سوق الأسهم"
tp("news/author")="SOHU"
tp.flush
التالي
tp.bulid
تعيين t = لا شيء
%>
تأتي هذه المقالة من مدونة shaoyun http://www.devjs.com/ ، العنوان الأصلي: http://www.devjs.com/post/asp-template-class.html