Важно знать

Модуль выполнен в виде фильтра, который пропускает через себя ответ на запрос, на входе принимая (от бэкенда или из файла) данные в формате JSON и выполняя шаблонизацию посредством скомпилированного шаблона. Шаблон задается одним из двух способов: директивой template или с помощью специального http-заголовка (смотрите также директиву templates_header).

Для компиляции шаблона в байткод воспользуйтесь компилятором ctpp2c, который поставляется/собирается вместе с библиотекой CT++:

$ ctpp2c "путь/к/исходнику/шаблона.tmpl" "куда/сохранить/скомпилированный_шаблон.ct2"

В случае, если для шаблонизации не требуется данных, то необходимо вернуть пустой JSON-объект: {}. Если тело ответа будет просто пустым, то сервер вернет 500-ый ответ и в лог ошибок запишет сообщение о некорректном JSON формате.

Модулю неизвестен результат шаблонизации, поэтому установка соответствующего http-заголовка Content-Type отдана на откуп разработчику. Этот заголовок пропускается сквозь модуль нетронутым. Так, например, если результатом шаблонизации должна стать html страница, то вам следует позаботиться на бэкенде или в конфигурации nginx об установке Content-Type: text/html заголовка соответственно.

Директивы конфигурации

ctpp2

Включение/выключение работы модуля ctpp2.

ctpp2_data_buffer

Размер буфера данных, который будет выделен в случае отсутствия заголовка Content-Length. Если данные в него не поместятся, сервер выдаст 500-ую ошибку и сделает соответствующую запись в лог ошибок.

Рекомендации:
  1. Всегда указывайте заголовок Content-Length по размеру json данных, которые отсылает ваше приложение, тогда буфер будет выделен оптимального размера. И вероятность получить 500-ую ошибку из-за переполнения буфера вам грозить не будет.
  2. Отправляйте заголовки как можно раньше, если это возможно. Это позволит раньше начать загрузку шаблона и немного сократит задержку. Однако, зачастую, это противоречит первой рекомендации, поскольку если у вас еще нет данных в наличии, то подсчитать правильно их объем может быть невозможным. В этом случае главное, следите, чтобы их размер не превысил размера указанного в ctpp2_data_buffer.

Если вы не можете определиться, какой из этих двух рекомендаций следовать, то следуйте первой.

ctpp2_args_stack

Размер внутреннего стека аргументов виртуальной машины.

ctpp2_code_stack

Размер внутреннего стека точек возврата виртуальной машины.

ctpp2_max_functions

Максимальное количество поддерживаемых встроенных функций.

ctpp2_steps_limit

Максимальное время исполнения программы в количестве выполненных инструкций. Используется для ограничения размера выполняемых шаблонов.

template

Устанавливает путь к шаблону, в случае если http-заголовок с именем из директивы templates_header не обнаружен в ответе. Таким образом заголовки имеют приоритет над значениями template в конфигурации.

templates_check

Включение/выключение проверки контрольной суммы crc32 у шаблонов.

templates_header

Устанавливает название http заголовка в котором модуль ожидает получить путь до скомпилированного шаблона от бэкэнда. Сам заголовок из ответа при этом вырезается. Регистр значения не имеет.

templates_root

Задает корневую директорию для вычисления относительных путей к шаблонам. Например, если templates_root установлена в /home/www/templates, а путь к шаблону blog/list.ct2, то итоговый путь будет /home/www/templates/blog/list.ct2.

Относительные пути в templates_root также складываются с родителями. Например, если в секции http установлен templates_root в /home/www, а в секции server значение templates_root установлено в ya.ru/tmpls, то итоговый templates_root для данной секции будет равен /home/www/ya.ru/tmpls.

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

Все выше сказанное одинаково применимо к путям шаблонов заданным любым способом, как с помощью http-заголовка, так и с помощью директивы template.

Creative Commons Attribution-ShareAlike 3.0 Валентин Бартенев