Ruby est l’un des langages les plus utilisés sur le Web. Nous avons commencé ici une nouvelle session sur Nettuts + qui vous présentera Ruby, ainsi que les formidables cadres et outils associés au développement de Ruby. Dans cet épisode, nous nous pencherons sur Tilt, un bijou d’emballage tout compris pour les moteurs de templates Ruby.
Si vous avez utilisé un framework Web Ruby, tel que Rails et Sinatra, vous connaissez probablement au moins l'un des nombreux moteurs de modèles disponibles: les options telles que ERB ou Haml sont les miennes. Quand les utiliser dans le contexte d'un framework, c'est assez simple? mais parfois ils semblent très intégrés; Et si vous voulez les utiliser dans votre propre projet? Y a-t-il un moyen facile d'exploiter leur utilité?
Entrez le joyau Tilt. Facturée comme une "interface mince sur un tas de moteurs de templates Ruby différents", vous verrez que cela rend les modèles de rendu un jeu d'enfant.
Bien sûr, nous allons d'abord l'installer.
bijou installer inclinaison
Si vous n'utilisez pas RVM (ce que vous devriez être), vous devrez peut-être l'exécuter avec les privilèges root (sudo
).
Bien sûr, vous aurez besoin de commencer avec un modèle pour le rendu. Nous allons garder les choses simples:
<%= title %> Quelques sites Tuts +
Enregistrer ceci dans tutsplus.erb
. Notez que le titre sera inséré avec Ruby, ainsi que la liste des sites. Maintenant, rendons-le. Nous allons le faire de cette façon (enregistrer ceci dans using_tilt.rb
):
require 'tilt' sites = "Nettuts +" => "http://net.tutsplus.com", "Psdtuts +" => "http://psd.tutsplus.com", "Mobiletuts +" => "http: / /mobile.tutplus.com "," Audiotuts + "=>" http://audio.tutsplus.com " context = Object.new def context.title" Modèle de Tuts + Sites "= Tilt :: ERBTemplate.new (" tutsplus .erb ") File.open" sites.html "," w "do | file | file.write template.render (contexte, sites: sites) fin
Bien sûr, nous commençons par exiger Tilt. Ensuite, nous créons nos données pour le modèle: un simple hachage, ainsi qu'un objet plain vanilla. Nous donnons à l'objet une propriété: Titre
. Ensuite, nous créons notre objet template. Ici, nous créons une instance du Tilt :: ERBTemplate
mais l’intérêt de Tilt est que vous pouvez utiliser le moteur de template de votre choix: par exemple, vous pouvez utiliser le Tilt :: HamlTemplate
, Tilt :: SassTempalte
(pour CSS), Tilt :: CoffeScriptTemplate
(pour CoffeeScript), ou le moteur de template supporté que vous voulez. Cependant, il est important de noter que Tilt est juste un emballage: vous devez avoir besoin de la bibliothèque appropriée pour le moteur de gabarit que vous souhaitez utiliser. Donc, si vous voulez utiliser un Tilt :: HamlTemplate
par exemple, vous devez nécessite 'haml'
. Vous pouvez voir quelles bibliothèques sont requises pour chaque moteur de modèle dans le fichier Lisez-moi..
Enfin, nous ouvrons le fichier dans lequel nous voulons écrire la sortie. Le code HTML (ou CSS ou JavaScript, selon le modèle et le moteur utilisés) sera renvoyé à partir du rendre
méthode de l'objet modèle. le rendre
méthode prend deux paramètres. Le premier est un objet de contexte: toutes les propriétés de cet objet seront disponibles en tant que variable dans le modèle. Donc notre context.title
la propriété sera disponible comme juste Titre
dans le modèle. Si vous souhaitez transmettre d'autres valeurs au modèle, transmettez-les dans le second paramètre, qui est un hachage..
Nous pouvons donc exécuter ce script sur la ligne de commande:
ruby using_tilt.rb
Maintenant, regardez dans le répertoire dans lequel vous avez sauvegardé ces fichiers: vous devriez voir un sites.html
fichier. Si vous le visualisez, vous constaterez que le modèle a été rendu:
Vous pouvez faire des choses plus complexes avec Tilt si vous passez un bloc à la rendre
méthode.
Tilt :: ERBTemplate ('other.erb'). Render (context, other_params) "du texte"
Dans votre modèle, vous pouvez rendement
au bloc; tout ce qui est renvoyé du bloc sera inséré à ce point dans le modèle.
Bien que vous puissiez, bien sûr, simplement passer une chaîne via le bloc, comme ci-dessus, il existe un cas d'utilisation plus intéressant. Récemment, j'utilisais cette fonctionnalité dans Tilt pour incorporer un modèle spécifique à une page dans un shell à l'échelle du site. Par exemple, nous pouvons diviser notre modèle ci-dessus en deux fichiers:
<%= title %> <%= yield %>
Quelques sites Tuts +
Maintenant, pour rendre notre page, nous pouvons faire ceci:
template = Tilt :: ERBTemplate.new ("layout.erb") Fichier.open "sites.html" do | fichier | fichier.write template.render (contexte) Tilt :: ERBTemplate.new ("sites.erb"). render (Object.new, sites: sites) end
Notez que puisque nous n'avions aucun objet que nous voulions utiliser comme objet de contexte, nous venons de passer un objet Ruby vierge. Le code HTML renvoyé par le rendu de sites.erb
sera inséré là où le rendement
le mot clé est. Si vous exécutez le code ci-dessus, vous devriez voir le même résultat qu'auparavant.
Vous remarquerez que jusqu'à présent, nous devions choisir le moteur de gabarit que nous souhaitons utiliser lors de la création de l'objet Tilt Subclass. Cependant, Tilt reconnaîtra l’extension de fichier du modèle que vous transmettez, vous n’aurez donc pas à choisir explicitement un moteur.
t = Tilt.new "tutsplus.erb" t.class # => Tilt :: ERBTemplate
Si, pour une raison quelconque, vos modèles ont une extension de fichier qui n'est pas celle attendue par Tilt, vous pouvez enregistrer cela:
Tilt.register Tilt :: ERBTemplate, "une_extension" t = Tilt.nouveau "mon_template.some_extension" t.class # => Tilt :: ERBTemplate
Tilt peut faire quelques autres tâches de niche; si vous souhaitez en savoir plus, je vous recommande de consulter la documentation..