LiquidはRuby
で記述されたテンプレートエンジンです。
ShopifyやJekyllなどで利用されています。
LiquidはERB
とは違い、独自のレキサーとパーサーで解析をするので
エンドユーザーにテンプレートの編集機能を安全に提供できます。
(ShopifyではEmail Templatesで利用されています。)
Example
Railsでの簡単な使い方を紹介します。
(Liquid DesignersやLiquid Outputが参考になりました。)
Gemfile
Gemにliquid
を追加します。
gem 'liquid'
Models
Modelのliquid_methods
にテンプレートで利用するキーワードを追加します。
product
liquid_methodsに指定したキーワードのみがテンプレートで利用できます。(安心ですね!)
class Product < ActiveRecord::Base
liquid_methods :title, :vendor, :variants
has_many :variants
end
variant
Product
とVariant
は1対多の関係です。(Railsではおなじみですね!)
class Variant < ActiveRecord::Base
liquid_methods :title, :price
belongs_to :product
end
Controllers & Views
GET /catalogsでヒアドキュメントのテンプレートがレンダリングされます。
(オリジナルのExample snippetを参考にしています。)
class CatalogsController < ApplicationController
before_action :set_products, only: [:index]
def index
render text: Liquid::Template.parse(template).render('products' => @products).html_safe
end
private
def set_products
@products = Product.all
end
def template
<<-EOS
<ul id="products">
{% for product in products %}
<li>
<h2>{{ product.title }}</h2>
<ul>
{% for variant in product.variants %}
<li>
<h3>{{ variant.title }}</h3>
Only {{ variant.price | format_as_money }}
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>
EOS
end
end
コードはGitHubに公開しています。
Tips
Editor
Sublime TextにはパッケージのLiquid Syntaxでシンタックスハイライトが利用できます。