Основные операторы cSmarty

advertisement
cSmarty это интерпретируемый язык программирования, направлен на создание сайтов, шаблонов
для них и вставок в контент, работающий как одно целое с системой управления контентом COOWS и
СУБД ODB. В основе языка лежит синтаксис паскаля и freepascal с вставками HTML кода. В шаблонах
по умолчанию идет HTML код, программный код вставляется меж знаками <{ и }>.
В отличии от паскаля cSmarty не требует обязательного объявления переменных, и автоматически
определяет их типы, добавлен оператор соединения «.»:
<{
s := 'яблоко №' . 55 . 44;
$s;
// результат 'яблоко №5544'
}>
Для вывода строки можно просто в ее начале поставить знак $. Текстовые значения берутся в
одинарные кавычки, если нужно поставить апостроф — ставится два апострофа.
Основные операторы cSmarty:
:=
Оператор присвоения (s := 'новое значение переменной';);
+= Присоединяет к значению переменной дополнительное значение (s += 'еще текст';)
=
Оператор сравнения возвращает 1 в случае совпадения значений (if a = 5 then $'a равно 5';);
>
Если левое значение больше правого возвращает 1 (if a > 5 then $'a больше 5';);
<
Если левое значение меньше правого возвращает 1 (if a < 5 then $'a меньше 5';);
>= Если левое значение больше или равно правому возвращает 1 (if a >= 5 then $'a больше или равно 5';);
<= Если левое значение меньше или равно правому возвращает 1 (if a <= 5 then $'a меньше или равно 5';);
<> Если левое и правое значение не равны возвращает 1 (if a <> 5 then $'a не равна 5-и';);
.
Соединяет значения ('яблоко №' . 55 . 44 // результат 'яблоко №5544');
+
Суммирует значения ('яблоко №' + (55 + 44) // результат 'яблоко №99');
*
Оператор умножения (i := 5 * 5 // I равняется 25);
/
Оператор деления (i := 25 / 5 // I равняется 5);
mod Возвращает остаток (i := 10 mod 3 // I равняется 1);
and Если левое и правое значение не равняется нолю — возвращает 1 (if (a < 5) and (b < 5) then $'a и b меньше
5-и';);
or
Если левое или правое значение не равняется нолю — возвращает 1 (if (a < 5) or (b < 5) then $'a или b
меньше 5-и';);
not Превращает правое значение в обратное (if not (a < 5) then $'a не меньше 5-и';);
xor Сумматор по модулю 2.
Проверки и условия.
Для того, чтоб поставить условие для исполнения строки, можно просто в ее конце вставить оператор if и
условие
<{
$'a больше 5-ти' if a > 5;
}>
При стандартной постановке условия сначала ставиться оператор if потом условие, потом оператор then, потом
исполняемый код (этот код исполняется если условие не вернет 0), после else код исполняется если условие
вернет 0.
<{
if x > 5 then $'x больше 5-ти' else $'x не больше 5-ти';
}>
Оператор else можно не вставлять
<{
if x > 5 then $'x больше 5-ти';
}>
Для того чтоб при условии исполнить сразу несколько строк можно использовать блок begin and;
<{
if x > 5 then
begin
x := 6;
$'i больше 5-ти, переменной x присвоено 6';
end
else
begin
x := 4;
$'i не больше 5-ти, переменной x присвоено 4';
end;
}>
Если нужно при разных значениях исполнять различные операции — можно использовать оператор case.
В начале ставим оператор case, потом значение которое хотим сравнивать, потом do и обрабатываем значения
<{
Case x do // case, потом значение которое хотим сравнивать, потом do
4: $'x равно 4'; // значение с которым хотим сравнить, двоеточие и действие.
7: $'x равно 7';
8:
begin
x := 10;
$'x было 8, стало 10';
end;
'яблоко': $'x равно «яблоко»';
else $'x равно чему-то иному'; // эту строку можно не ставить
end; // в конце end обязательно
}>
Цыклы
Для цыклов можно использовать нескольких операторов, repeat, for, while.
Оператор For:
Работает с конкретной переменной, цыкл повторяется до тех пор пока данная переменная не пройдет от первого
до второго значения
<{
for i := 10 to 20 do $'цыкл №' . i . ' считая от 10 до 20';
}>
Если в цыкле нужно исполнять несколько операций то можно использовать блок begin end
<{
loop := 0;
for i := 10 to 20 do
begin
$'цыкл №' . i . ' считая от 10 до 20';
loop := loop+1;
$'Этот цыкл уже прошел ' . loop . ' раз';
end;
}>
Оператор While
Оператор while повторяет действие если условие возвращает не 0, если условие сразу равно 0 — действие
вообще не исполняется.
<{
i := 20;
while i > 10 do i := i - 1;
}>
Если в цыкле нужно исполнять несколько операций то можно использовать блок begin end
<{
i := 20;
while i > 10 do
begin
i := i – 1;
$'переменная «i» > 10, делаем ее меньше на один';
end;
}>
Оператор repeat
Оператор repeat повторяет участок кода до оператора until пока условие указанное в until вернет не 0
<{
i := 20;
repeat
i := i -1;
$'переменная i не достигла значения меньше десяти, повторяем операцию';
until i < 10;
}>
Основные процедуры, функции и переменные
var sitename: string;
переменная название_сайта: текст;
// Переменная изначально хранит название сайта записанное в main.ini параметр coows_title на выбранном в
данный момент языке.
var PageTitle:string;
переменная Заголовок_страницы: текст;
// Переменная хранит заглавие страницы. Каждая отдельная страница имеет свое заглавие, обычно оно
берется из поля title.
var admin_panel: string;
переменная Панель_администратора: текст;
// переменная держит в себе панельку администрирования с кнопками удаления, редактирования и изменения
позиции. Для каждого элемента при использовании функции subpages панелька создается локально.
var Storyid: string;
переменная Номер_статьи: текст;
// Переменная изначально хранит номер данной страицы
var _id: string;
// Переменная изначально хранит номер данного элемента. Для каждого элемента при использовании функции
subpages номер _id определяется локально.
function mediadir: string;
функция Медиа_директорий: текст;
// Возвращает путь на сервере к папке media
function include(ACSmarty: string): string;
функция вставить(ACSmarty: текст): текст;
// Исполняет и возвращает результат исполненого CSmarty кода. В качестве параметра может быть
указана ссылка в базу данных <{ include('db.content[123][''text'']'); }> , ссылка на файл <{
include('theme/include.html'); }> или непосредственной сам код <{ include(scriptvar); }>
function IsActivePage(AItemID: integer): boolean;
функция страница_активная(элемент_контента: число): соответствие;
функция активная_страница(элемент_контента: число): соответствие;
// Возвращает Да(1) если указанный элемент является предком исполняемой страницы или ею, возвращает
Нет(0) в другом случае
var loop: integer;
переменная повтор: число;
// При использовании функции subpages изначально определяет сколько элементов выведено в данный момент
var content: string;
переменная содержимое: текст;
// Переменная изначально хранящая содержимое страницы
function path(ASpliter: string): string;
функция навигатор(Разделитель: текст): текст;
// возвращает код навигатора по родительским страницам данной страницы меж пунктами вставляется
разделитель (по умолчанию '/')
function ImageFile(APath: string; Awidth: integer; Aheight: integer; Awaterm: string): string;
функция файл_изображения(Файл_изображения: текст;
ширина: число; высота: число; водный_знак: текст): текст;
// Создает ресемплированное изображение и возвращает на него ссылку. Если указан параметр
«водный_знак» (ссылка на файл с водяным знаком) накладывает водяной знак, для этого лучше использовать
PNG файл с полупрозрачными тонами. Файл_изображения можно указывать без расширения, оно будет
определено автоматически, также можно не указывать высоту изображения.
Function ParentTitle(AItemID: integer):string;
// Возвращает заголовок родительской страницы указанного элемента в контенте (AItemID).
Function RenderFilters(ARQStoryID: integer = -1): string;
// Возвращает HTML код списка фильтров для фильтрации контента по атрибутам. В пераметр ARQStoryID
можно указать номер страницы с которой хотим работать.
Function subpages(AItemId: string; ASkip: integer; Alimit:integer; ARewerse: boolean; AAllSubPages: boolean;
AsubPageItemTemplate: string; AitemTypes: string);
(* Возвращает HTML код элементов страницы. Если ни один параметр не указан — возвращает код
элементов открытой в данный момент страницы.
AitemId — через запятую указываются страницы элементы которых хотим вывести
Askip — Указывает сколько элементов пропустить
Alimit — Указываем сколько элементов вывести
Arewerse — указываем в какой последовательности выводить, с первых к последним или от последних к
первым
AallSubPages — указываем выводить элементы указанных подстраниц или только элементы указаных
страниц.
AsubPageItemTemplate — Указываем какой какой шаблон использовать для вывода элементов
AitemTypes — указываем какой тип элементов выводить (название шаблона)*)
Function addform: string;
// Возвращает код формы для добавления элементов
Function LastSubpage(AStoryID:integer): integer;
// Возвращает номер последнего элемента страницы
Function ChildCount(AStoryID:integer): integer;
// Возвращает количество элементов страницы
Function AttachedFiles(AFieldName: string; Astoryid: integer):string;
// Выводит прикрепленные файлы в AfieldName поле из элемента Astoryid
Function getvar(AVarName: string):string;
// Возвращает значение переменной
Function RenderPagesUlLi(AStoryID: integer; ApageTypes:string; AactivePagesOnly: boolean):string;
// возвращает html список всех подэлементов страницы AstoryID, если указан параметр ApageTypes —
выведет только страницы этого типа, если AactivePagesOnly — отображает подстраницы только
выбранных страниц
Function StripTag(ASource: string; Alangth: integer):string;
// Удаляет все html теги, вставляет в нужных местах перенос строки(<br />), ограничивает длину текста
количеством символов приблизительным Alangth.
Function Length(ASource: string): integer;
// Возвращает количество символов в тексте
Function TextToHTML(ASource: string):string;
// Переводит все используемые html символы в коды символов для вывода в браузерах
Function StringFromFile(AFileName: string):string;
// Возвращает содержимое файла
Function LineFromFile(AFileName: string; AlineNum):string;
// Возвращает содержимое строки AlineNum из файла AFileName
Function StrToInt(ASource: string; AdefValue: integer);
// преобразовывает текст Asource в числовое значение, в случае неудачи возвращает AdefValue
Function FileExist(AFilename: string):boolean;
// возвращает 1 если файл AFilename существует или 0 если не существует
Function Trunc(AValue:Double):integer;
// Округление. Отнимает от числа его дробную часть trunc(1234567.890) = 1234567
Function Now: tDataTime
// Возвращает в системном формате(дробное 64-битное число) данную дату и время
Function MilliSecondOf(ADataTime: tDataTime):integer;
// Возвращает количество миллисекунд в штампе времени ADataTime
Function DateTimeToStr(ADataTime: tDataTime; Aformat: string):string;
// Конвертирует штампе времени AdataTime в текст с указанным в Aformat форматом
Function InsertShy(ASource: string):string;
// Автоматически, правильно расставляет мягкие переносы(­) в тексте
Function LimitTo(ASource: string; ALimiter: string):string;
// Возвращает укороченный текст до первого совпадения с Alimiter.
Download