Описание класса шаблона ASP
Автор: shaoyun Форма www.devjs.com
Время: 17:05 10.12.2008
++Введение в функцию
--Поддерживает однослойные теги цикла и может использоваться несколько раз в классе страницы.
--Поддерживает введение файлов шаблонов. При загрузке шаблоны будут объединены.
--Вы можете указать путь к файлу шаблона. Путь является относительным, а по умолчанию используется текущий путь к файлу.
--Для окончательного вывода пустых строк удалите
определение тега ++
{$tag$} обычные теги
Тег файла шаблона {$include:filename$}
<loop name="tagname">...</loop> тег цикла, атрибут name — это имя тега
Описание тега Subtag ++
в теге цикла
:используйте регулярные выражения для сопоставления и фильтрации тегов. Перед атрибутом name в теге цикла может быть несколько пробелов, а до и после имени name могут быть другие атрибуты. Атрибуты могут быть заключены в кавычки или нет. Распознаются одинарные и двойные кавычки. Параметр соответствует только первому
описанию функции
.Функция LoadTPL считывает файл шаблона. Сначала проверьте вложенный тег файла шаблона. замените содержимое вложенного тега файла шаблона, объедините файлы шаблона и сохраните его в переменной
функции Assign для анализа тега шаблона. Для обычных тегов добавьте его в объект данных. Если это тег цикла, сохраните его. объект данных цикла. Если это объект тега цикла, замените его, тогда данные, накопленные в цикле, добавляются в
класс шаблона функции очистки. Это очень важная функция, используемая для обработки меток цикла. цикле он выполняет внутреннюю замену блока цикла, накапливает и сохраняет данные цикла. Каждый отдельный цикл. После завершения необходимо вызвать функцию 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
Частный подкласс_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")
Завершить подчастный
подкласс_Terminate()
m_content="" : m_looptmp="" : m_loop_content="" : m_looptag=""
m_TplPath="./" : m_SetTplPath=false
Установить tagData = Ничего: Установить циклические данные = Ничего
Завершить
общедоступное свойство Sub. Получить имя класса.
ИмяКласса = m_ИмяКласса
Конечная собственность
Публичная собственность Получить версию
Версия = m_Version
Конечная собственность
Общественная собственность Получить авторские права
Авторское право = m_Copyright
End Property
Rem — это свойство по умолчанию класса шаблона, определяющее, содержит ли шаблон этот тег.
Открытое свойство по умолчанию Get Tag (имя тега)
Тег = InStr(m_content,"{$" & тэг & "$")>0
End Property
Rem вызывает определенную функцию присваивания. Это свойство используется для упрощения операции присваивания.
Открытое свойство Let Tag (имя тега, replaceString)
Назначить вызов (имя тега, replaceString)
Конечная собственность
Публичная собственность Получить TplPath
ТплПат = m_ТплПат
End Property
Rem устанавливает путь к файлу шаблона.
Открытая собственность Let TplPath(sTplPath)
Если sTplPath<>"" Тогда m_TplPath = sTplPath
Если Right(m_TplPath,1)<>"/" Тогда m_TplPath = m_TplPath & "/"
конечного свойства
LoadFromFile(sFilePath,sCharset)
LoadFromFile=ложь
Тусклый поток
Set 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: Set oFSO = Server.CreateObject("Scripting.FileSystemObject")
FileExist=oFSO.FileExists(filespec)
Установить oFSO=Ничего
Конечная функция
Rem получает блок цикла
Частная функция GetTmpStr(tplstr,tagname,attname)
Тусклое регулярное выражение, совпадения, совпадение
Установить регулярное выражение = Новое регулярное выражение
regEx.Pattern = "<" & tagname & ".*?s+name=[""|']?" & attname & "[""|']?.*?>([s S.]*?)</" & тэг & ">"
regEx.Global = Ложь
regEx.IgnoreCase = Истина
Установить совпадения = regEx.Execute(tplstr)
За каждый матч в матчах
GetTmpStr=Матч.Значение
Следующий
Установить регулярное выражение = Ничего
Конечная функция
Rem удаляет HTML-теги
Частная функция RemoveTag(tagString,tagname)
Тусклое регулярное выражение
Установить регулярное выражение = Новое регулярное выражение
regEx.Pattern = "<[/]?" & tagname & ".*?>"
regEx.Global = Истина
regEx.IgnoreCase = Истина
RemoveTag = regEx.Replace(tagString,"")
Установить регулярное выражение = ничего
End Function
Rem Удалить пустые строки
Частная функция RemoveSpace(tagString)
Тусклое регулярное выражение
Установить регулярное выражение = Новое регулярное выражение
regEx.Pattern = "ns*r"
regEx.Global = Истина
regEx.IgnoreCase = Истина
RemoveSpace = regEx.Replace(tagString,"")
Установить регулярное выражение = ничего
Конечная функция
Rem считывает файлы шаблонов, одновременно обрабатывает вложенные шаблоны и объединяет шаблоны.
Открытая функция LoadTpl(tplfile)
tplfile=Server.MapPath(tplfile)
Если не FileExist(tplfile) Тогда
Ответ.Напишите «Не удалось загрузить файл шаблона!»
Ответ.Конец
Выход из функции
Конец, если
m_content = LoadFromFile(tplfile, «GB2312»)
Тусклое регулярное выражение, совпадения, совпадение, fname, sContent
Установить регулярное выражение = Новое регулярное выражение
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)
Конец, если
Следующий
Установить регулярное выражение = Ничего
Конечная функция
Функция замены назначения Rem
Назначение открытой функции (имя тега, replaceString)
Если tagname="" то выйдите из функции
Rem, если это метка цикла
Если InStr(имя-тега,"/")>0 и InStr(имя-тега,"/")<Len(имя-тега) Тогда
Рем получает имя метки цикла
m_curLooptag=Left(имя тега,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,"loop",m_Looptag)
Конец, если
Конец, если
Если нет(loopData.Exists(имя тега)) Тогда циклData.Добавить имя тега, replaceString
Еще
Общая метка Rem
tagData.Добавить тэг, replaceString
Конец, если
Конечная функция
Rem выполняет замену внутри блока.
Открытая функция Flush()
Если циклические данные.count>0, то
Дим я
chgtmp=RemoveTag(m_looptmp,"цикл")
arrtag=loopData.keys
arrval=loopData.items
Для i=0 Для циклаData.count-1
chgtmp=replace(chgtmp,"{$" & arrtag(i) & "$}",arrval(i))
Следующий
Rem сохраняет данные в блоке в переменную
m_loop_content=m_loop_content и chgtmp
циклические данные.RemoveAll
Конец, если
Завершить
сборку Function Rem, завершить окончательную замену шаблона
Открытая функция 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)
Response.Write m_Content
Конечная функция
Конечный класс
%>
Код шаблона родительского шаблона (default.tpl):
программный код
{$include:head.tpl$}
<h1 align=center>{$doc_title$}</h1>
<h3>{$news_title$}</h3>
<ул>
<loop name="новости">
<Li style="color:#F00">Название новости: {$news/title$} – Автор: {$news/author$}</Li>
</цикл>
</ul>
<h3>{$lastest_news$}</h3>
<ул>
<!-- Bing и count в цикле предназначены только для тестирования и не требуются. Удалите их при фактическом использовании -->
<loopbind="id" name=arts count="15">
<Li>Название статьи: {$arts/title$} — Автор: {$arts/author$}</Li>
</цикл>
</ul>
{$include: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 = новый шаблон
tp.tplpath="tpl"
tp.LoadTpl(tp.tplpath & «default.tpl»)
tp.assign "doc_title", "Пример механизма шаблонов"
tp.assign "news_title", "внутренние новости"
для я = от 0 до 2
вызовите tp.assign("arts/title","Финансовый кризис привел к большому количеству безработных")
вызовите tp.assign("arts/author","NetEase")
tp.flush
следующий
tp.assign "lastest_news", "Последняя статья"
Здесь Рем использует другой метод присваивания.
для я = от 0 до 2
tp("news/title")="Хорошие новости от правительства помогут поднять фондовый рынок"
tp("новости/автор")="SOHU"
tp.flush
следующий
tp.bulid
Установить тп = ничего
%>
Эта статья взята из блога shaoyun http://www.devjs.com/ , исходный адрес: http://www.devjs.com/post/asp-template-class.html.