Этот шаблонизатор более удобен. Он сочетается с HTML. Код копирования следующий:
Шаблон класса
Частный c_Char, c_Path, c_FileName, c_Content, c_PageUrl, c_CurrentPage, c_PageStr, replacePageStr
Имя частного тега
' ****************************************
'Установить кодировку
' ****************************************
Открытая собственность Let Char(ByVal Str)
c_Char = Str
Конечная собственность
Общественная собственность Get Char
Символ = c_Char
Конечная собственность
' ****************************************
'Установить путь к папке шаблона
' ****************************************
Открытая собственность Let Path(ByVal Str)
c_Path = Стр
Конечная собственность
Путь получения публичной собственности
Путь = c_Path
Конечная собственность
' ****************************************
'Установить имя файла шаблона
' ****************************************
Открытое свойство Let FileName(ByVal Str)
c_FileName = Str
Конечная собственность
Публичная собственность Получить имя файла
ИмяФайла = c_ИмяФайла
Конечная собственность
' ****************************************
' Получаем конкретный путь к файлу шаблона
' ****************************************
Открытая собственность Получить FilePath
Если Len(Путь) > 0, Тогда Путь = Заменить(Путь, /, /)
Если Right(Path, 1) <> / Тогда Путь = Путь & /
FilePath = Путь и имя файла
Конечная собственность
' ****************************************
'Установить URL пейджинга
' ****************************************
Открытая собственность Let PageUrl(ByVal Str)
c_PageUrl = Стр
Конечная собственность
Публичная собственность Получить PageUrl
PageUrl = c_PageUrl
Конечная собственность
' ****************************************
'Установить пейджинг текущей страницы
' ****************************************
Открытое свойство Let CurrentPage(ByVal Str)
c_CurrentPage = Str
Конечная собственность
Открытая собственность Get CurrentPage
ТекущаяСтраница = c_CurrentPage
Конечная собственность
' ****************************************
'Выходной контент
' ****************************************
Государственная собственность набирает обороты
Response.Write(c_Content)
Конечная собственность
' ****************************************
'Инициализация класса
' ****************************************
Частный подкласс_инициализировать
Имя тега = pjblog
c_Char = UTF-8
ЗаменитьСтрокуСтраницы = Массив(, )
Конец субтитра
' ****************************************
' Фильтровать конфликтующие символы
' ****************************************
Частная функция doQuote(ByVal Str)
doQuote = Заменить(Str, Chr(34), )
Конечная функция
' ****************************************
'Завершение класса
' ****************************************
Частный подкласс_Terminate
Конец субтитра
' ****************************************
'Загрузить метод файла
' ****************************************
Частная функция LoadFromFile(ByVal cPath)
Тусклый объект
Установить obj = Server.CreateObject(ADODB.Stream)
С объектом
.Тип = 2
.Режим = 3
.Открыть
.Charset = Символ
.Позиция = .Размер
.LoadFromFile Server.MapPath(cPath)
ЗагрузитьИзФайла = .ЧитатьТекст
.закрывать
Конец с
Установить объект = Ничего
Конечная функция
'*********************************************
' Получаем обычный соответствующий объект
'*********************************************
Открытая функция GetMatch(ByVal Str, ByVal Rex)
Дим Рег, Мэг
Установить Reg = Новое RegExp
С Регом
.IgnoreCase = Истина
.Global=Истина
.Шаблон = Рекс
Установить Mag = .Execute(Str)
Если Mag.Count > 0 Тогда
Установите GetMatch = Mag
Еще
Установите GetMatch = Server.CreateObject(Scripting.Dictionary)
Конец, если
Конец с
Установить Рег = ничего
Конечная функция
' ****************************************
'Открыть документ
' ****************************************
Публичный саб открыт
c_Content = LoadFromFile(FilePath)
Конец субтитра
' ****************************************
'Буферизованное выполнение
' ****************************************
Публичный подбуфер
c_Content = GridView(c_Content)
Вызов ExecuteFunction
Конец субтитра
' ****************************************
'Гридвиев
' ****************************************
Частная функция GridView (ByVal o_Content)
Тусклые совпадения, подсовпадения, подтекст
Атрибут затемнения, контент
Установить совпадения = GetMatch(o_Content, /< & TagName & /:(/d+?)(.+?)/>([/s/S]+?)<// & TagName & /:/1/>)
Если Matches.Count > 0 Тогда
Для каждого субматча в матче
Атрибут = SubMatches.SubMatches(1) ' kocms
Content = SubMatches.SubMatches(2) ' <Columns>...</Columns>
SubText = Process(Attribute, Content) 'Возвращает результаты всех выполнений процесса
o_Content = replace(o_Content, SubMatches.value, < & SubText(2) & SubText(0) & > & SubText(1) & </ & SubText(2) & >, 1, -1, 1) ' Заменить переменную метки
Следующий
Конец, если
Установить совпадения = ничего
If Len(ReplacePageStr(0)) > 0 then ' Определите, имеет ли переменная метки значение, и замените его, если да.
o_Content = Заменить(o_Content, ЗаменитьСтрокуСтраницы(0), ЗаменитьСтрокуСтраницы(1), 1, -1, 1)
replacePageStr = Array(, ) 'Очистить переменную массива после замены
Конец, если
GridView = o_Content
Конечная функция
' ****************************************
'Определяем атрибуты
' ****************************************
Процесс частной функции (атрибут ByVal, содержимое ByVal)
Тусклые совпадения, подсовпадения, текст
Тусклый MatchTag, MatchContent
Источник данных Dim, имя, элемент, страница, идентификатор
источник данных =: Имя =: Элемент =: страница = 0: id =
Установить совпадения = GetMatch(Атрибут, /s(.+?)/=/(.+?)/)
Если Matches.Count > 0 Тогда
Для каждого субматча в матче
MatchTag = SubMatches.SubMatches(0) ' Получаем имя атрибута
MatchContent = SubMatches.SubMatches(1) 'Получаем значение атрибута
If Lcase(MatchTag) = name then Name = MatchContent 'Получаем значение атрибута name
If Lcase(MatchTag) = источник данных. Тогда источник данных = MatchContent'. Получите значение атрибута источника данных.
If Lcase(MatchTag) = element then Element = MatchContent 'Получаем значение атрибута элемента
If Lcase(MatchTag) = page then page = MatchContent 'Получаем значение атрибута страницы
If Lcase(MatchTag) = id then id = MatchContent 'Получаем значение атрибута id
Следующий
Если Len(Name) > 0 и Len(MatchContent) > 0, тогда
Text = Analysis(datasource, Name, Content, page, id) 'Выполнить анализ свойств
Если Len(источник данных) > 0, то Атрибут = Заменить(Атрибут, источник данных= & источник данных &, )
Если страница > 0, тогда атрибут = заменить (атрибут, страница = & страница &, )
Атрибут = Заменить (Атрибут, имя = & Имя &, , 1, -1, 1)
Атрибут = Заменить (Атрибут, элемент = & Элемент &, , 1, -1, 1)
Процесс = Массив (Атрибут, Текст, Элемент)
Еще
Процесс = Массив (Атрибут, , div)
Конец, если
Еще
Процесс = Массив (Атрибут, , div)
Конец, если
Установить совпадения = ничего
Конечная функция
' ****************************************
'Разбор
' ****************************************
Анализ частной функции (идентификатор ByVal, имя ByVal, содержимое ByVal, страница ByVal, PageID ByVal)
Тусклые данные
Select Case Lcase(Name) 'Выберите источник данных
Данные цикла Case = DataBind(id, Content, page, PageID)
Вариант для данных = DataFor(id, Content, page, PageID)
Конец выбора
Анализ=Данные
Конечная функция
' ****************************************
'Привязываем источник данных
' ****************************************
DataBind частной функции (идентификатор ByVal, содержимое ByVal, страница ByVal, страница ByVal)
Тусклый текст, совпадения, подсовпадения, подтекст
Execute Text = & id & (1) 'Загрузить источник данных
Установить совпадения = GetMatch(Content, /<Columns/>([/s/S]+)/<//Columns/>)
Если Matches.Count > 0 Тогда
Для каждого субматча в матче
SubText = ItemTemplate(SubMatches.SubMatches(0), Text, page, PageID)' Выполнить замену модуля
Содержимое = Заменить(Содержимое, Подсовпадения.значение, Подтекст, 1, -1, 1)
Следующий
Привязка данных = Содержание
Еще
Привязка Данных=
Конец, если
Установить совпадения = ничего
Конечная функция
' ****************************************
' Сопоставление экземпляра шаблона
' ****************************************
ItemTemplate частной функции (ByVal TextTag, ByVal Text, ByVal page, ByVal PageID)
Тусклые совпадения, SubMatches, SubMatchText
Дим СекМатч, СекСубМатч
Дим я, TempText
Тусклый TextLen, TextLeft, TextRight
Установить совпадения = GetMatch(TextTag, /<ItemTemplate/>([/s/S]+)/<//ItemTemplate/>)
Если Matches.Count > 0 Тогда
Для каждого субматча в матче
ПодСоответствиеТекст = Подсовпадения.Подсовпадения(0)
'---------------------------------------------
' Начинаем вложение циклов
'---------------------------------------------
СубMatchText = GridView(SubMatchText)
'---------------------------------------------
' Конец вложения циклов
'---------------------------------------------
Если UBound(Text, 1) = 0 Тогда
Темптекст=
Еще
Темптекст=
'--------------------------------------------------
'Начать пейджинг
'--------------------------------------------------
Если Len(страница) > 0 И страница > 0 Тогда
Если Len(CurrentPage) = 0 или CurrentPage = 0, то CurrentPage = 1
TextLen = UBound(Текст, 2)
TextLeft = (ТекущаяСтраница - 1) * страница
TextRight = Текущая страница * страница - 1
Если TextLeft < 0 Тогда TextLeft = 0
Если TextRight > TextLen Тогда TextRight = TextLen
c_PageStr = MultiPage(TextLen + 1, страница, CurrentPage, PageUrl, float:right, , False)
Если Int(Len(c_PageStr)) > 0 Тогда
replacePageStr = Array(<page: & Trim(PageID) & />, c_PageStr)
Еще
replacePageStr = Array(<page: & Trim(PageID) & />, )
Конец, если
Еще
ТекстЛефт = 0
TextRight = UBound(Текст, 2)
Конец, если
Для i = TextLeft To TextRight
TempText = TempText & ItemReSec(i, SubMatchText, Text) 'Загрузка содержимого шаблона
Следующий
Конец, если
Следующий
ItemTemplate = Темптекст
Еще
ItemTemplate =
Конец, если
Установить совпадения = ничего
Конечная функция
' ****************************************
'Заменить строку шаблона
' ****************************************
Частная функция ItemReSec (ByVal i, ByVal Text, ByVal Arrays)
Тусклые совпадения, подсовпадения
Установить совпадения = GetMatch(Text, /$(/d+?))
Если Matches.Count > 0 Тогда
Для каждого субматча в матче
Text = replace(Text, SubMatches.value, doQuote(Arrays(SubMatches.SubMatches(0), i)), 1, -1, 1) 'Выполнить замену
Следующий
ItemReSec = Текст
Еще
ItemReSec=
Конец, если
Установить совпадения = ничего
Конечная функция
' ****************************************
'Функция глобальной переменной
' ****************************************
Частная вспомогательная функция ExecuteFunction
Тусклые совпадения, подсовпадения, текст, ExeText
Установить совпадения = GetMatch(c_Content, /<function/:([0-9a-zA-Z_/.]*?)/((.*?)/(.+?)/(.*?)/)// />)
Если Matches.Count > 0 Тогда
Для каждого субматча в матче
Текст = SubMatches.SubMatches(0) & ( & SubMatches.SubMatches(1) & & SubMatches.SubMatches(2) & & SubMatches.SubMatches(3) & )
Выполнить ExeText= & Текст
c_Content = Заменить(c_Content, SubMatches.value, ExeText, 1, -1, 1)
Следующий
Конец, если
Установить совпадения = ничего
Конец субтитра
' ****************************************
' Обычная замена глобальных меток
' ****************************************
Открытые свойства Let Sets(ByVal t, ByVal s)
Тусклый SetMatch, Bstr, SetSubMatch
Set SetMatch = GetMatch(c_Content, (/<Set/:([0-9a-zA-Z_/.]*?)/(((.*?) & t & (.*?))?/)// />))
Если SetMatch.Count > 0 Тогда
Для каждого SetSubMatch в SetMatch
Выполнить Bstr = & SetSubMatch.SubMatches(1) & ( & SetSubMatch.SubMatches(3) & & s & & SetSubMatch.SubMatches(4) & )
c_Content = Заменить(c_Content, SetSubMatch.Value, Bstr, 1, -1, 1)
Следующий
Конец, если
Установить SetMatch = Ничего
Set SetMatch = GetMatch(c_Content, (/<Set/: & t & ///>))
Если SetMatch.Count > 0 Тогда
Для каждого SetSubMatch в SetMatch
c_Content = Заменить(c_Content, SetSubMatch.Value, s, 1, -1, 1)
Следующий
Конец, если
Установить SetMatch = Ничего
Конечная собственность
Конечный класс