[ Наверх ]
[ Проекты ]
[ Templates ]
[ InterSearch ]
[ Job ]

Контакт
kes@narod.ru

Процессор шаблонов

Вход:

Выход:

  • Результат

Формат файла шаблона

Каждая директива процессора шаблонов располагается между признаком начала директивы и признаком конца директивы.

Признак начала директивы: <%

Признак конца директивы: %>

<%Директива%>

Выражения

<Выражение> := <Константа> | <Имя переменной> | <Унарный оператор> <Выражение> | <Выражение> <Бинарный оператор> <Выражение> | <Функция> ( <Параметры> )

<Константа> := <Число> | <Строка> | <Булевая константа>

<Строка> := "(<Символ>)" | '(<Символ>)'

<Булевая константа> := TRUE | FALSE

<Унарный оператор> := NOT | !

<Бинарный оператор> := AND | OR | || | AND | && | <> | != | == | <= | >= | < | > | + | - | / | *

<Функция> := STR | VAL | FILE | EXISTS | RANDOM | VAR | EVAL

<Параметры> := <Параметр> (,<Параметр>)

<Параметр> := <Выражение>

Функции

ФункцияОписание
STR(Parameter)Преобразует параметр Parameter к строковому типу
VAL(Parameter)Преобразует параметр Parameter к числовому типу
FILE(Parameter)Преобразует параметр Parameter к файловому типу
EXISTS(Parameter)TRUE, если переменная с именем Parameter определена
FALSE, иначе
RANDOM(A,B)Возвращает псевдослучайное целое число из диапазона [A,B]
VAR(Parameter)Возвращает значение переменной с именем Parameter
EVAL(Parameter)Вычисляет значение выражения Parameter

Пример. Функция EVAL.

ШаблонДанные
Выбери себе:
<%Objects EXISTS(EVAL(Exp))%>
<%=Objects.INDEX%>. <%=EVAL(Exp)%>
<%/%>
<?xml version="1.0" encoding="windows-1251"?>
<xml>
<data anchor="1">
<Exp>Objects.Object</Exp>
<Objects>
<Object index="1">Велосипед</Object>
<Object index="2">Мотоцикл</Object>
</Objects>
</data>
<data anchor="2">
<Exp>VAR("Objects.Object"+Objects.INDEX)</Exp>
<Object1>Велосипед</Object1>
<Object2>Мотоцикл</Object2>
<Object3>Машина</Object3>
</data>
</xml>
Результат (Набор данных #1)
Выбери себе:
1. Велосипед
2. Мотоцикл
Результат (Набор данных #2)
Выбери себе:
1. Велосипед
2. Мотоцикл
3. Машина

Вставка выражения

<%=Expression%>

где

Expression - выражение.

Включение файла

<%=FILE(Expression)%>

Где результатом вычисления выражения Expression является строка, содержащая имя файла.

Блоки

При помощи блоков организуются циклы.

Формат блока:

<%BlockName%>
Тело блока
<%/%>

где

BlockName - имя блока.

В файле данных должна быть определена переменная с именем BlockName. Значение этой переменной указывает количество повторений тела блока.

Пример. Блоки.

ШаблонДанные
<%Object%>
Привет с большого <%=Object.Text%>.
<%/%>
<?xml version="1.0" encoding="windows-1251"?>
<xml>
<data>
<Object>2</Object>
<Object>
<Text index="1">бодуна</Text>
<Text index="2">застолья</Text>
</Object>
</data>
</xml>
Результат
Привет с большого бодуна.
Привет с большого застолья.

Блоки могут быть вложенными.

Пример. Вложенные блоки.

ШаблонДанные
<%Size%>
<%Object%>
Привет с <%=Size.Text%> <%=Object.Text%>.
<%/%>
<%/%>
<?xml version="1.0" encoding="windows-1251"?>
<xml>
<data>
<Size>2</Size>
<Size>
<Text index="1">большого</Text>
<Text index="2">маленького</Text>
</Size>
<Object>2</Object>
<Object>
<Text index="1">бодуна</Text>
<Text index="2">застолья</Text>
</Object>
</data>
</xml>
Результат
Привет с большого бодуна.
Привет с большого застолья.
Привет с маленького бодуна.
Привет с маленького застолья.

Переменная INDEX

В каждом блоке определена переменная INDEX строкового типа, которой автоматически присваивается номер текущей итерации цикла.

Пример. Переменная INDEX.

ШаблонДанные
Выбери себе:
<%Objects%>
<%=Objects.INDEX%>. <%=VAR("Object"+Objects.INDEX)%>
<%/%>
<?xml version="1.0" encoding="windows-1251"?>
<xml>
<data>
<Objects>3</Objects>
<Object1>Велосипед</Object1>
<Object2>Мотоцикл</Object2>
<Object3>Машина</Object3>
</data>
</xml>
Результат
Выбери себе:
1. Велосипед
2. Мотоцикл
3. Машина

Условные блоки

С помощью условных блоков организуются циклы с предусловием (while) (когда количество итераций неизвестно заранее).

Формат условного блока:

<%BlockName Condition%>
Тело блока
<%/%>

где

BlockName - имя блока,
Condition - условие.

Тело блока повторяется до тех пор, пока выражение Condition имеет значение TRUE.

Пример. Условные блоки.

ШаблонДанные
Выбери себе:
<%Objects EXISTS(VAR("Objects.Object"+Objects.INDEX))%>
<%=Objects.INDEX%>. <%=VAR("Objects.Object"+Objects.INDEX)%>
<%/%>
<?xml version="1.0" encoding="windows-1251"?>
<xml>
<data anchor="1">
<Objects>
<Object1>Велосипед</Object1>
<Object2>Мотоцикл</Object2>
</Objects>
</data>
<data anchor="2">
<Objects>
<Object1>Велосипед</Object1>
<Object2>Мотоцикл</Object2>
<Object3>Машина</Object3>
</Objects>
</data>
</xml>
Результат (Набор данных #1)
Выбери себе:
1. Велосипед
2. Мотоцикл
Результат (Набор данных #2)
Выбери себе:
1. Велосипед
2. Мотоцикл
3. Машина

Условный оператор

С помощью условного оператора осуществляются ветвления.

Формат условного оператора:

<%IF Condition%>
TrueText
[ <%ELSE%>
FalseText ]
<%/%>

где

Condition - булевое выражение.

Если значение выражения Condition - истина (TRUE), то процессором обрабатывается TrueText, иначе (FALSE) - если присутствует директива ELSE, то процессором обрабатывается FalseText.

Пример. Условный оператор.

ШаблонДанные
Начало
<%IF EXISTS(Include)%>
<%=FILE(Include)%>
<%/%>
Конец
<?xml version="1.0" encoding="windows-1251"?>
<xml>
<data anchor="1">
<Include>text.txt</Include>
</data>
<data anchor="2">
</data>
</xml>
Файл text.txt
Привет с большого бодуна.
Результат (Набор данных #1)
Начало
Привет с большого бодуна.
Конец
Результат (Набор данных #2)
Начало
Конец

Пример. Условный оператор с частью ELSE.

ШаблонДанные
Начало
<%IF EXISTS(Include)%>
<%=FILE(Include)%>
<%ELSE%>
Кина не будет
<%/%>
Конец
<?xml version="1.0" encoding="windows-1251"?>
<xml>
<data anchor="1">
<Include>text.txt</Include>
</data>
<data anchor="2">
</data>
</xml>
Файл text.txt
Привет с большого бодуна.
Результат (Набор данных #1)
Начало
Привет с большого бодуна.
Конец
Результат (Набор данных #2)
Начало
Кина не будет
Конец

Блок PRE

Формат:

<%PRE%>Text<%/%>

Внутри блока PRE удаление невидимых символов не производится даже при задании опции процессора /i.

То же относится и к включаемым внутрь этого блока файлам.

Формат файла данных

Данные представляются в формате XML.

<xml>
<data>
Общие данные для всех наборов
</data>
<data anchor="1">
Набор данных #1
</data>
...
<data anchor="i">
Набор данных #i
</data>
</xml>

Файл данных должен содержать корневой тег.

Файл данных может содержать более одного набора данных.

Каждый набор данных содержится внутри тега data.

Атрибут anchor тега data определяет номер набора данных.

Внутри тега data с пустым значением атрибута anchor находятся общие для всех наборов данные.

Пример. Использование простых переменных.

ШаблонДанные
Привет с <%=Size%> <%=Object%>. <?xml version="1.0" encoding="windows-1251"?>
<xml>
<data>
<Size>большого</Size>
<Object>бодуна</Object>
</data>
</xml>
Результат
Привет с большого бодуна.

Переменная может иметь значение, состоящее из нескольких строк.

Пример. Использование мультистроковых значений.

ШаблонДанные
<%=Text%> <?xml version="1.0" encoding="windows-1251"?>
<xml>
<data>
<Text><![CDATA[Столько
строк,
сколько
надо.]]></Text>
</data>
</xml>
Результат
Столько
строк,
сколько
надо.

Пример. Использование наборов данных.

ШаблонДанные
Привет с <%=Size%> <%=Object%>. <?xml version="1.0" encoding="windows-1251"?>
<xml>
<data anchor="1">
<Size>большого</Size>
<Object>бодуна</Object>
</data>
<data anchor="2">
<Size>маленького</Size>
<Object>застолья</Object>
</data>
</xml>
Результат (Набор данных #1)
Привет с большого бодуна.
Результат (Набор данных #2)
Привет с маленького застолья.

Используются технологии uCoz