PGHtml — HTML-шаблонизатор с использованием PostgreSQL
Более подробно инcтрумент описан на отдельном сайте pghtml.org
Инструмент предназначен для создания файлов со статической информацией из базы данных, которая:
- редко меняется (например, справочники)
- подготовка требует длительного времени
- не требует актуальности в режиме реального времени (например, ТОП товаров)
PGHtml реализован как служба, которая создает HTML,JS,JSON и другие типы файлы с использованием данных, получаемых из базы данных PostgreSQL.
Файл создается из файла шаблона, в котором проводится подстановка(замена) SQL-запросов, тегов и переменных.
Шаблон имееет префикс расширения pg, т.е. на основе файла index.pghtml будет создан index.html
Подстановки
$$ [SQL query] $$ | - | результат выполнения SQL запроса |
<pghtml-include> [file] <> | - | содержимое файла |
${[variable]} | - | значение переменной |
<!-- единичное значение из базы данных --> $$ select user $$ <!-- множественые значения --> $$ select tablename from pg_tables where schemaname='pg_catalog' limit 5 $$ <!-- включение файла example_include_ru.html --> <pghtml-include>include-simple-ru.html</pghtml-include>
→
→
<!-- единичное значение из базы данных --> postgres <!-- множественые значения --> pg_statistic pg_type pg_foreign_table pg_proc pg_attribute <!-- включение файла example_include_ru.html --> [ файл example-header-ru.html ]
Шаблон
<!DOCTYPE html> <head> <title>${title}</title> </head> <body> <h2>${caption}</h2> ${text} </body> </html>
Исходная и результирующая страницы
<pghtml-var name="title">Example</pghtml-var> <pghtml-var name="caption">Multiline text</pghtml-var> <pghtml-var name="text"> Text line 1 <br> <i>Text line 2</i> </pghtml-var> <pghtml-include>/template/template-common.html</pghtml-include>
→
→
→
<!DOCTYPE html> <head> <title>Example</title> </head> <body> <h2>Multiline text</h2> Text line 1 <br> <i>Text line 2</i> </body> </html>
- Проверка на изменение - если содержимое результирующего файл не изменилось, то файл не перезаписывается и, соответственно, web-сервер не выполняет публикацию (deploy)
- Импорт - реализована поддержка импорта других файлов (например, фрагмента HTML или данных в формате JSON)
- Список изменений - возможно сформировать файл-список с измененными файлами
- Обработка ошибок - при возникновении ошибки (например, при выполнении SQL запроса) обработка продолжается, в лог (stderr) выводится расширенная информация и по окончании выполнения утилита возвращает в ОС признак неуспешного выполнения (1). Это позволяет настроить мониторинг обновления данных на сайте
- Указание обрабатываемых файлов - возможна обработка конкретных файлов, директорий с рекурсией и указанием расширений файлов. При этом определяются встроенные переменные, которые можно использовать при формировании ссылок и в SQL запросах. Рекомендуется указывать корневую директорию сайта
- Переменные - поддерживаются переменные из командной строки, встроенные (директории, пути до файлов и т.д) и атрибуты тега при импорте файла
- Неограниченная вложенность - поддерживается включение файлов внутри включаемого файла, многократное переопределение переменных и их использование внутри другой переменной
- Условия и циклы - программирование внутри файлов не поддерживается, для реализации логики необходимо использовать хранимые процедуры PostgreSQL