Разработка собственных макросов и подключение их к сайту


Система позволяет опытному разработчику создавать собственные сервисы, которые реализуют новые макроподстановки. Разработка сервисов проводится на языке Perl. До версии 4.36 включительно все сервисы должны были находиться в папке /cgi-bin/Macro. Начиная с 4.37 в папке сайта может быть создана папка Macro, куда рекомендуется размещать "самодельные" специализированные сервисы, чтобы при обновлении системы они никак не затрагивались.

Сервис представляет собой include файл, написанный на языке Perl, который подключается при необходимости в тот момент, когда интерпретатор находит в тексте комбинацию вида $Macros[]$. В квадратных скобках допускаются пары "ключ: значение" разделяемые точкой с запятой. Но в общем случае скобки могут быть пустыми, тогда макрос при отработке не получает никаких параметров.

Сервис должен иметь имя файла, которое совпадает с именем обрабатываемого макроса, все символы должны быть в нижнем регистре. То есть, для отработки макроса $Macro[]$ необходимо создать файл macro.pl и поместить его в папку /cgi-bin/Macro или /Sites/имясайта/Macro. Никаких прав "на выполнение" сервису проставлять не нужно.

Внутри файла обязательно должна быть процедура с именем имямакроса_draw (все в нижнем регистре). В процедуру системой передается строка, которая находится в квадратных скобках. Вернуть процедура должна строку, которая будет выведена вместо макроса на странице. Сама логика работы сервиса и его действия по большей части произвольны и зависят от решаемой задачи. Разработчик вправе применять любые средства для решения своей задачи, в том числе он может использовать доступные на хостинге модули.

Естественно, разработчик может пользоваться всеми доступными в системе переменными для своей работы. Для того, чтобы понять какие возможности у него есть проще всего пройтись по уже существующим сервисам и "подглядеть" используемые приемы. В большинстве случаев сервисы хорошо документированы, коротки и прозрачны.

Пример простого сервиса, который вызывается строкой $Add[left: 5; right 10]$, который складывает числа, переданные в ключах left и right и выводит результат на страницу вместо макроса. Проверок на валидность передаваемых параметров для простоты мы не приводим, но, естественно, они подразумеваются. Комментарии по ходу текста.

add.pl

sub add_draw{
        my %param=ParamsParse(shift());    # используется системная процедура, позволяющая получить из передаваемой строки параметров хэш

        return $param{left} + $param{right};    # возвращаем арифметическую сумму значений параметров left и right
}

1;        # конец модуля