Важно знать
Модуль выполнен в виде фильтра, который пропускает через себя ответ на запрос, на входе принимая (от бэкенда или из файла) данные в формате JSON и выполняя шаблонизацию посредством скомпилированного шаблона. Шаблон задается одним из двух способов: директивой template или с помощью специального http-заголовка (смотрите также директиву templates_header).
Для компиляции шаблона в байткод воспользуйтесь компилятором ctpp2c, который поставляется/собирается вместе с библиотекой CT++:
$ ctpp2c "путь/к/исходнику/шаблона.tmpl" "куда/сохранить/скомпилированный_шаблон.ct2"
В случае, если для шаблонизации не требуется данных, то необходимо вернуть пустой JSON-объект: {}
. Если тело ответа будет просто пустым, то сервер вернет 500-ый ответ и в лог ошибок запишет сообщение о некорректном JSON формате.
Модулю неизвестен результат шаблонизации, поэтому установка соответствующего http-заголовка Content-Type
отдана на откуп разработчику. Этот заголовок пропускается сквозь модуль нетронутым. Так, например, если результатом шаблонизации должна стать html страница, то вам следует позаботиться на бэкенде или в конфигурации nginx об установке Content-Type: text/html
заголовка соответственно.
Директивы конфигурации
ctpp2
- синтаксис: ctpp2 on/off;
- по-умолчанию: off
- контекст: http, server, location, if
- версия: 0.1 и выше
Включение/выключение работы модуля ctpp2.
ctpp2_data_buffer
- синтаксис: ctpp2_data_buffer размер;
- по-умолчанию: 16K
- контекст: http, server, location
- версия: 0.5 и выше
Размер буфера данных, который будет выделен в случае отсутствия заголовка Content-Length. Если данные в него не поместятся, сервер выдаст 500-ую ошибку и сделает соответствующую запись в лог ошибок.
Рекомендации:
- Всегда указывайте заголовок Content-Length по размеру json данных, которые отсылает ваше приложение, тогда буфер будет выделен оптимального размера. И вероятность получить 500-ую ошибку из-за переполнения буфера вам грозить не будет.
- Отправляйте заголовки как можно раньше, если это возможно. Это позволит раньше начать загрузку шаблона и немного сократит задержку. Однако, зачастую, это противоречит первой рекомендации, поскольку если у вас еще нет данных в наличии, то подсчитать правильно их объем может быть невозможным. В этом случае главное, следите, чтобы их размер не превысил размера указанного в ctpp2_data_buffer.
Если вы не можете определиться, какой из этих двух рекомендаций следовать, то следуйте первой.
ctpp2_args_stack
- синтаксис: ctpp2_args_stack целое;
- по-умолчанию: 8192
- контекст: http
- версия: 0.5 и выше
Размер внутреннего стека аргументов виртуальной машины.
ctpp2_code_stack
- синтаксис: ctpp2_code_stack целое;
- по-умолчанию: 8192
- контекст: http
- версия: 0.5 и выше
Размер внутреннего стека точек возврата виртуальной машины.
ctpp2_max_functions
- синтаксис: ctpp2_max_functions целое;
- по-умолчанию: 100
- контекст: http
- версия: 0.5 и выше
Максимальное количество поддерживаемых встроенных функций.
ctpp2_steps_limit
- синтаксис: ctpp2_steps_limit целое;
- по-умолчанию: 10240
- контекст: http
- версия: 0.5 и выше
Максимальное время исполнения программы в количестве выполненных инструкций. Используется для ограничения размера выполняемых шаблонов.
template
- синтаксис: template путь/к/СКОМПИЛИРОВАННОМУ/шаблону;
- по-умолчанию: отсутсвует
- контекст: http, server, location, if
- версия: 0.5 и выше
Устанавливает путь к шаблону, в случае если http-заголовок с именем из директивы templates_header не обнаружен в ответе. Таким образом заголовки имеют приоритет над значениями template в конфигурации.
templates_check
- синтаксис: templates_check_header on/off;
- по-умолчанию: off
- контекст: http, server, location
- версия: 0.5 и выше
Включение/выключение проверки контрольной суммы crc32 у шаблонов.
templates_header
- синтаксис: templates_header заголовок;
- по-умолчанию: x-template
- контекст: http, server, location
- версия: 0.5 и выше
Устанавливает название http заголовка в котором модуль ожидает получить путь до скомпилированного шаблона от бэкэнда. Сам заголовок из ответа при этом вырезается. Регистр значения не имеет.
templates_root
- синтаксис: templates_root /путь/к/папке;
- по-умолчанию: отсутсвует (эквивалентно рабочему каталогу nginx)
- контекст: http, server, location, if
- версия: 0.5 и выше
Задает корневую директорию для вычисления относительных путей к шаблонам. Например, если 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.