Шаблонные страницы
У меня есть куча статических HTML-файлов, которые имеют одинаковые колонтитулы. Я хотел бы поделиться этим верхним и нижним колонтитулом на всех страницах. На данный момент я использую следующие маршрутизированные, но это немного некрасиво, и я должен позаботиться обо всех особых случаях. Есть ли легкий путь к таким вещам, как функция включения php?
(defroutes my-app
(GET "/"
(html-with-template
"main.header" "index.body" "main.footer" ))
(GET "/*.html"
(html-with-template
"main.header" (str (params :*) ".body") "main.footer" ))
(GET "/*/"
(html-with-template
(str (params :*) "/folder.header")
(str (params :*) "/index.body")
(str (params :*) "/folder.footer")))
(GET "/*"
(or (serve-file (params :*)) :next))
(ANY "*"
(page-not-found)))
1 ответ
Из того, что я читал о Compojure, я не думаю, что ему присуща концепция "автозаполнения" и "автоматического добавления" в тело ответа, как в PHP.
Другие веб-фреймворки, с которыми у меня есть опыт, передают эту ответственность их шаблонизатору, тогда как PHP немного размывает строки. Они делают это, позволяя вам явно "включать" здесь общий фрагмент, или визуализировать макрос, или даже посредством элементарных форм наследования (этот шаблон расширяет этот шаблон).
По сути, независимо от того, является ли ваш HTML статическим или динамическим, движок шаблонов позволяет вам создавать модули для повышения удобства сопровождения.
Тем не менее, Compojure, похоже, не имеет полноценного движка шаблонов HTML в комплекте с ним. У него действительно есть хороший маленький HTML/XML предметно-ориентированный язык (DSL), но я думаю, что вы ищете скорее шаблонизатор первого класса, который можно использовать вместе с Compojure.
Похоже, что Enlive - это шаблонный движок, вдохновленный Clojure, который получает большинство хитов, но я уверен, что есть и другие. Учитывая интеграцию JVM с Clojure, вы, вероятно, также можете выбрать любой из движков шаблонов, созданных в стиле Java.
В зависимости от того, какой из них вы выберете, может потребоваться написать несколько строк связующего кода, чтобы загружать, отображать и передавать шаблоны в ответы Compojure HTTP, но вы напишете это один раз и будете использовать везде.