En ce moment, je regarde beaucoup comment fonctionne Shopify. A défaut d'avoir une boutique sur laquelle faire quelques tests, je regarde les divers outils extraits de l'application et dont le code a été ouvert. Vous pouvez en voir la liste sur github. Aujourd'hui je voudrais vous parler de l'un de ceux-ci, Liquid.
Utilisé par Shopify pour mettre en place un système de templating sécurisé, n'autorisant pas l'exécution de code ruby, l'outil est assez impressionnant de par son utilisation. Les habitués de Django naviguent en terrain connu. Mais c'est bien du Ruby.
<ul id="products">
{% for product in products %}
<li>
<h2>{{product.title}}</h2>
Only {{product.price | format_as_money }}
<p>{{product.description | prettyprint | truncate: 200 }}</p>
</li>
{% endfor %}
</ul>
Comme vous pouvez le constater, nous pouvons parcourir des éléments et en afficher les valeurs sans problème. Pour une documentation détaillée de Liquid, je vous invite à voir la documentation de Shopify.
Quant à la définition côté code, ce n'est pas beaucoup plus compliqué.
Liquid::Template.parse(read_template).render 'products' => Product.find(:all)
Et si vous avez une application Rails (comme je suppose que c'est le cas), c'est d'autant plus simple. Il suffit de redéfinir le "handler" de vue par celui de Liquid. Dans votre fichier config/environment.rb, ajoutez le snipper suivant :
ActionView::Base::register_template_handler :liquid, LiquidView
Auquel cas vous n'avez pas à parser vous même le contenu (Liquid::Template.parse est inutile). C'est fait automatiquement avec les variables que vous avez défini. Tous vos templates utiliseront ainsi Liquid. Les tags <% ne seront plus valides. Attention cependant ne commencez pas à intégrer Liquid dans toutes vos applications rails en vous disant que cela sera plus fun. Liquid est très sympa lorsque le code de vos templates est susceptible d'être modifié par un utilisateur tiers. Cependant votre application y perdra inévitablement en rapidité.
Bien évidemment si vous avez besoin de Liquid, cela signifie que vos utilisateurs peuvent modifier les vues rendues par votre application. Dans ce cas je vous conseille fortement l'utilisation de theme support afin de gérer ceux-ci. Son utilisation est également particulièrement simple.
Au lieu d'avoir directement vos vues et fichier publiques dans le répertoire views, aurez un répertoire "themes" contenant chacun de ces thèmes et ses vues ainsi que les fichiers publics.
$app_root
themes/
[theme_name]
images/
stylesheets/
javascripts/
views/
layouts/
Et dans votre contrôleur, vous pouvez aisément choisir un thème ou un autre.
class ApplicationController < ActionController::Base
layout 'application'
theme 'mon_theme'
end
Voir même définir -comme vous pouvez le faire avec le layout- celui-ci grâce à une méthode.
class ApplicationController < ActionController::Base
layout 'application'</p>
<p> theme :get_theme
def get_theme
current_user.theme
end
end
Ainsi chacun de vos utilisateur peut lui même choisir le thème qu'il désire pour votre application.


Commentaires