Ruby ist eine der beliebtesten Sprachen im Internet. Wir haben hier auf Nettuts + eine neue Session gestartet, die Sie in Ruby einführen wird, sowie die großartigen Frameworks und Tools, die mit der Ruby-Entwicklung einhergehen. In dieser Episode sehen wir uns Tilt an, ein umfassendes Wrapper-Juwel für Ruby-Template-Engines.
Wenn Sie ein Ruby-Web-Framework wie Rails und Sinatra verwendet haben, sind Sie wahrscheinlich mit mindestens einer der vielen verfügbaren Vorlagen-Engines vertraut: Es geht um Optionen wie ERB oder Haml. Wenn sie im Rahmen eines Frameworks verwendet werden, ist das ziemlich einfach? aber manchmal scheinen sie sehr eingebettet zu sein; Was ist, wenn Sie sie in Ihrem eigenen Projekt verwenden möchten? Gibt es eine einfache Möglichkeit, ihre Nützlichkeit zu nutzen??
Betritt den Tilt-Edelstein. Als "dünnes Interface" über eine Reihe verschiedener Ruby-Template-Engines in Rechnung gestellt? Sie werden feststellen, dass Rendering-Vorlagen zum Kinderspiel werden.
Natürlich installieren wir es zuerst.
Edelstein installieren Neigung
Wenn Sie RVM nicht verwenden (was Sie auch sein sollten), müssen Sie dies möglicherweise mit Root-Rechten ausführen (Sudo
).
Natürlich müssen Sie zum Rendern mit einer Vorlage beginnen. Wir werden es einfach halten:
<%= title %> Einige Tuts + Sites
Speichern Sie dies in tutsplus.erb
. Beachten Sie, dass der Titeltext mit Ruby sowie die Liste der Websites eingefügt wird. Lassen Sie uns es jetzt rendern. Wir machen es so (speichern Sie dies in using_tilt.rb
):
erfordern "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" Tuts + Sites "end template = Tilt :: ERBTemplate.new (" tutsplus .erb ") File.open" sites.html "," w "do | file | file.write template.render (Kontext, Sites: Sites) endet
Natürlich beginnen wir mit dem Neigen. Dann erstellen wir unsere Daten für die Vorlage: einen einfachen Hash sowie ein einfaches Vanilleobjekt. Wir geben dem Objekt eine Eigenschaft: Titel
. Dann erstellen wir unser Vorlagenobjekt. Hier erstellen wir eine Instanz von Neigung :: ERBTemplate
Klasse, aber der eigentliche Sinn von Tilt ist, dass Sie jede beliebige Template-Engine verwenden können: Zum Beispiel könnten Sie die Neigen :: HamlTemplate
, Neigung :: SassTempalte
(für CSS), Tilt :: CoffeScriptTemplate
(für CoffeeScript) oder was auch immer Sie für eine unterstützte Vorlagen-Engine benötigen. Beachten Sie jedoch, dass Tilt ist nur ein wrapper: Sie benötigen die entsprechende Bibliothek für die Vorlagen-Engine, die Sie verwenden möchten. Also, wenn Sie eine verwenden möchten Neigen :: HamlTemplate
Zum Beispiel müssen Sie erfordern 'haml'
. In der Liesmich können Sie sehen, welche Bibliotheken für jede Vorlagen-Engine erforderlich sind.
Zum Schluss öffnen wir die Datei, in die die Ausgabe geschrieben werden soll. Das HTML (oder CSS oder JavaScript, abhängig von der verwendeten Vorlage und Engine) wird vom zurückgegeben machen
Methode des Vorlagenobjekts. Das machen
Methode nimmt zwei Parameter an. Das erste ist ein Kontextobjekt: Alle Eigenschaften dieses Objekts stehen als Variable in der Vorlage zur Verfügung. So unser Kontext.Titel
Eigenschaft wird als gerade verfügbar sein Titel
innerhalb der Vorlage. Wenn Sie andere Werte in die Vorlage übergeben möchten, übergeben Sie sie als Teil des zweiten Parameters, der ein Hash ist.
Wir können dieses Skript also in der Befehlszeile ausführen:
ruby using_tilt.rb
Sehen Sie sich nun das Verzeichnis an, in dem Sie diese Dateien gespeichert haben: Sie sollten a sehen sites.html
Datei. Wenn Sie es anzeigen, werden Sie feststellen, dass die Vorlage gerendert wurde:
Mit Tilt können Sie komplexere Aufgaben erledigen, wenn Sie einen Block an den Server übergeben machen
Methode.
Tilt :: ERBTemplate ('other.erb'). Render (context, other_params) "etwas Text"
In Ihrer Vorlage können Sie Ausbeute
zum Block; Was vom Block zurückgegeben wird, wird an dieser Stelle in die Vorlage eingefügt.
Während Sie natürlich eine Zeichenkette über den Block übergeben können, gibt es einen interessanteren Anwendungsfall. Kürzlich habe ich diese Funktionalität in Tilt verwendet, um eine seitenabhängige Vorlage in eine Site-weite Shell einzubetten. Zum Beispiel können wir unsere obige Vorlage in zwei Dateien aufteilen:
<%= title %> <%= yield %>
Einige Tuts + Sites
Um unsere Seite zu rendern, können wir Folgendes tun:
template = Tilt :: ERBTemplate.new ("layout.erb") File.open "sites.html" do | file | file.write template.render (Kontext) Tilt :: ERBTemplate.new ("sites.erb"). render (Object.new, sites: sites) end
Beachten Sie, dass wir, da wir kein Objekt hatten, das wir als Kontextobjekt verwenden wollten, ein reines Ruby-Objekt ohne Vanille übergeben haben. Der HTML-Code, der vom Rendern von zurückgegeben wird sites.erb
wird dort eingefügt, wo die Ausbeute
Stichwort ist. Wenn Sie den obigen Code ausführen, sollten Sie dieselbe Ausgabe wie zuvor sehen.
Sie werden feststellen, dass wir bis jetzt die Template-Engine auswählen mussten, die beim Erstellen des Tilt-Unterklassenobjekts verwendet werden soll. Tilt erkennt jedoch die Dateierweiterung der übergebenen Vorlage, sodass Sie nicht explizit eine Engine auswählen müssen. Sie wählt die richtige aus, basierend auf der Dateierweiterung:
t = Tilt.new "tutsplus.erb" t.class # => Tilt :: ERBTemplate
Wenn Ihre Vorlagen aus irgendeinem Grund eine Dateierweiterung haben, die Tilt nicht erwartet, können Sie dies registrieren:
Tilt.register Tilt :: ERBTemplate, "some_extension" t = Tilt.new "my_template.some_extension" t.class # => Tilt :: ERBTemplate
Es gibt noch ein paar andere Nischendinge, die Tilt tun kann. Wenn Sie mehr erfahren möchten, sollten Sie die Dokumentation durchlesen.