私は現在、すばらしいEnliveをテンプレート エンジンとして使用して小さな CMS を開発しています。Enlive にはat
、HTML スニペットを指定するノード (マップ) と、それぞれがセレクター (ベクトル) と変換 (クロージャー) で構成される任意の数のタプルを取る、というマクロがあります。
(at a-node
[:a :selector] a-transformation
[:another :selector] another-transformation
...)
ここで、受信データ/コンテキストに応じてタプルを生成したいと考えています。私は成功せずに多くの異なることを試みました。例えば
(let [this (repository/u "http://example.com/ACMECorp")
statements (repository/find-by-subject this)
context {:depth 1}]
`(at (snippet-for 'this 'context)
[root] (set-attr :about (str 'this))
~@(loop [rules []
st statements]
(if-not (seq st)
rules
(recur (conj rules
`[:> (attr= :property ~(str (repository/predicate (first st))))]
`(content (renderit ~(repository/object (first st)) 'context)))
(rest st))))))
どんな助けでも大歓迎です。
-ヨッヘン