Иногда оказывается, что каких-то операторов в языке не хватает. Parser позволяет определить собственные операторы, которые затем можно будет использовать наравне с системными. Операторами в Parser считаются методы класса MAIN. Добавляя новые методы в этот класс, мы расширяем базовый набор операторов.
Внимание! При описании оператора можно использовать и не локальные переменные, при этом происходит чтение и запись в поля класса MAIN.
Пользовательские операторы могут определяться и в отдельных текстовых файлах без заголовка @CLASS, которые подключаются к нужным разделам сайта. Если в таком файле определить оператор (написав, скажем, @include[]), то при обращении ^include[…] всегда будет вызываться пользовательский оператор.
Внимание! Если определить оператор, одноименный с системным, то всегда будет вызываться пользовательский. При этом системный оператор вызвать нельзя никак. Стоит делать как можно меньше пользовательских операторов, используя вместо них статические методы пользовательских классов.
Создавать классы и пользоваться их методами гораздо удобнее, чем пользовательскими операторами. Простой пример: есть несколько разделов сайта, и для каждого из них нужно сделать раздел помощи. Создав несколько файлов, описывающих разные классы, можно получить одноименные методы разных классов. Вызывая методы как статические, мы имеем совершенно ясную картину, что к какому разделу относится:
^news:help[]
^forum:help[]
^search:help[]
Примеры
Поместим этот код:
@default[a;b]
^if(def $a){$a}{$b}
в файл operators.p, в корень сайта.
Там, где необходимы дополнительные операторы, нужно подключить этот модуль. Например, в корневом auto.p напишем:
@USE
/operators.p
Теперь не только на любой странице, но, главное, в любом пользовательском классе можно будет воспользоваться конструкцией
^default[$form:name;Аноним]
Подробности - в разделе «Определяемые пользователем методы и операторы».