Использование шаблонизатора Pebble

Использование шаблонизатора Pebble #

Веб-приложения формируют HTML-документы для показа пользователям. Данные документы динамически формируются на стороне сервера. Некоторые части этих документов не изменяется: навигационное меню, заголовки, подключение внешних файлов и т.д. Другая часть обычно содержит повторяющиеся элементы: списки элементов, таблицы и т.д. Эти данные обычно зависят от тех данных, которыми управляет приложение.

Для того, чтобы выполнять шаг генерации HTML-документов было удобнее, на стороне сервера применяются специальные инструменты — шаблонизаторы. В задачу любого шаблонизатора входит формирование строки на основании шаблона и конфигурации. Конкретные инструменты отличаются друг от друга возможностями и способом описания самих шаблонов, их синтаксисом.

Шаблоны обычно представляют собой обычные файлы на жёстком диске, содержащие текст на целевом языке (в нашем случае на HTML), а также управляющие конструкции на языке шаблона.

Шаблонизаторы предоставляют средства для обработки поступающих данных:

  • Вставка данных в шаблон.
  • Обход списков.
  • Выполнение условной логики в зависимости от данных.
  • Фильтрация данных.

Шаблоны также могут быть разделены между несколькими файлами и иметь сложную структуру.

В рамках данного курса будет рассмотрен шаблонизатор Pebble, т.к. он реализует синтаксис, который используется в популярных шаблонизаторах для других платформ Twig(PHP) и Jinja(Python). Вы можете использовать русскоязычные ресурсы по Twig и Jinja для ознакомления с базовым синтаксисом шаблонизатора Pebble.

Документация #

Задача #

С использованием шаблонизатора Pebble разработайте приложение, которое создаёт связный набор HTML-файлов с информацией о расписании занятий. Файлы должны создаваться на основании конфигурации, которая описана внутри исходного кода приложения. Таким образом после изменения конфигурации должен формироваться соответствующей ей набор HTML-файлов.

Набор HTML-документов #

  • Стартовая страница. На странице находятся:
    • краткое описание данного ресурса.
    • блок навигации, включающий ссылки на стартовую страницу, страницу со списком предметов, страницу с расписанием.
  • Страница со списком курсов. На странице находятся:
    • блок навигации,
    • список названий курсов с ссылками на страницы с детальной информацией.
  • Для каждого курса из конфигурации формируется отдельная страница. На странице находятся:
    • блок навигации,
    • ссылка для возвращения к странице списка предметов,
    • детальная информация по курсу, включающая:
      • название,
      • ФИО преподавателя,
      • расписание занятий по предмету.
  • Страница с расписанием. На странице находятся:
    • блок навигации,
    • список дней недели,
    • для каждого дня недели список занятий.

Требования к реализации #

  • Для оформления страниц сайта используйте CSS-фреймворк. Рекомендуется использовать Foundation.
  • Для разработки страниц с динамическим содержимым используйте шаблонизатор Pebble.
  • В рамках данной работы «динамическое» содержимое будет зафиксировано в исходном коде приложения.
  • При запуске приложения HTML-документы должны быть созданы заново.

Шаблонное приложение #

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

  1. Формирует список данных для описания расписания.
  2. Подключает библиотеку Pebble.
  3. Создаёт объект движка Pebble.
  4. В качестве примера берёт шаблон templates/some.peb и формирует строку на основе данного шаблона. Сформированную строку выводит на стандартный поток вывода.

Приложение состоит из следующих классов:

  • Course — описание курса, включающее уникальный идентификатор, название курса, ФИО преподавателя и краткое описание.
  • ScheduleItem — описание одного элемента расписания, включающего идентификатор курса, номер аудитории, день недели и время.
  • ScheduleInfo — объект, позволяющий сохранять списки объектов расписания и курсов.
  • Main — псевдокласс, содержащий в себе реализацию логики всего приложения.

Внутри класса Main реализованы следующие функции:

  • formSchedule — формирует набор данных для визуализации.
  • configureEngine — настраивает движок Pebble для работы.
  • generateDataFromSomePeb — формирует строку из шаблона templates/some.peb и выводит получившееся содержимое на стандартный поток вывода.
  • main — связывает все методы друг с другом, является точкой входа в приложение.

Исходные коды приложения можно скачать по ссылке.

Предлагаемый подход к реализации #

  1. Скачайте исходные коды шаблонного приложение. Распакуйте данный каталог. Откройте его в среде разработки IDEA.
  2. Запустите приложение и убедитесь, что оно выводит информацию из файла templates/some.peb на стандартный поток вывода. Для запуска приложения используйте задачу run системы сборки Gradle. Документация по работе с Gradle.
  3. Разберитесь в механизме вывода информации из файла-шаблона templates/some.peb на стандартный поток вывода средствами приложения. Модифицируйте шаблон таким образом, чтобы он:
    1. Выводил всю информацию на отдельных строках из передаваемого объекта, описывающего расписание.
    2. Выводил всю информацию на отдельных строках из передаваемого объекта, описывающего курс.
  4. Создайте каталог site в корневом каталоге исходных кодов приложения (рядом с каталогами src и templates).
  5. Поместите в данный каталог файлы CSS-фреймворка.
  6. Модифицируйте файл index.html так, чтобы он соответствовал требованиям к стартовой странице.
  7. Создайте файл site/course.html, который содержит информацию о курсе «Прикладная физическая культура» согласно заданию.
  8. Перенесите содержимое site/course.html в файл-шаблон templates/course.peb.
  9. Модифицируйте шаблон таким образом, чтобы он выводил информацию из следующих переменных:
    1. course, тип данных Course.
    2. schedule, тип данных List<ScheduleInfo>.
  10. В классе Main создайте новую функцию generateCourseFile. Данная функция должна создавать HTML-документ, описывающий 1 курс.
  11. Данная функция должна принимать в качестве аргументов:
    1. Объект класса PebbleEngine.
    2. Объект класса ScheduleInfo.
    3. Объект класса Course, для которого необходимо сформировать страницу.
  12. Внутри функции необходимо:
    1. Инициализировать объект Template на основании файла-шаблона.
    2. Сформировать наборы данных, которые необходимы шаблону для отображения.
    3. Сформировать контекст для обработки шаблона.
    4. Сформировать объект FileWritter для записи результата обработки шаблона в файл site/course/<id>.html. Где вместо <id> следует использовать уникальный идентификатор курса.
    5. Применить шаблонизатор для вывода строки в файл.
  13. Вызовите данную функцию из функции main, передав в качестве объекта Course первый элемент из списка курсов.
  14. В классе Main создайте функцию generateAllCourcesFiles. Данная функция должна вызывать функцию generateCourseFile для всех курсов в списке данных.
  15. В классе Main создайте функцию generateCoureListFile. Данная функция должна создавать файл site/couces.html, содержащий список курсов с ссылками на файлы курсов, которые были созданы функцией generateAllCourcesFiles.
  16. В классе Main создайте функцию generateSchedule. Данная функция должна создавать файл site/schedule.html, в котором необходимо отобразить расписание. В ячейках расписания расположите ссылки на файлы с конкретным расписанием.

© A. M. Васильев, 2023, CC BY-SA 4.0, andrey@crafted.su