Ruby är ett av de mest populära språk som används på webben. Vi har startat en ny session här på Nettuts + som kommer att introducera dig till Ruby, liksom de stora ramarna och verktygen som följer med Ruby-utvecklingen. I det här avsnittet tittar vi på Tilt, en allomfattande wrapper-pärla för Ruby-templatmotorer.
Om du har använt en Ruby-webb-ram-liknande Rails och Sinatra-du är förmodligen bekant med minst en av de många mallmotorerna som finns: Jag handlar om alternativ som ERB eller Haml. När man använder dem i ett ramverk är det ganska enkelt? men ibland verkar de mycket inbäddade; vad händer om du vill använda dem i ditt eget projekt? Finns det ett enkelt sätt att utnyttja deras användbarhet?
Ange kantlinjen. Faktureras som ett? Tunt gränssnitt över en massa olika Ruby mallmotorer? du kommer att upptäcka att det gör en mjuka mall för rendering.
Naturligtvis installerar vi det först.
gem installering lutning
Om du inte använder RVM (som du borde vara) kanske du måste köra det med root-privilegier (sudo
).
Självklart måste du börja med en mall att göra. Vi kommer att hålla det enkelt:
<%= title %> Några av Tuts + Sites
Spara detta till tutsplus.erb
. Observera att titeltexten kommer att införas med Ruby, liksom listan över webbplatser. Nu, låt oss göra det. Vi gör det så här (spara det här using_tilt.rb
):
kräver "tilt" -platser = "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 "slutmall = Tilt :: ERBTemplate.new (" tutsplus .erb ") File.open" sites.html "," w "gör | fil | file.write template.render (sammanhang, webbplatser: webbplatser) slut
Självklart börjar vi med att kräva Tilt. Därefter skapar vi vår data för mallen: en enkel hash, liksom en vanlig vaniljobjekt. Vi ger objektet en egendom: titel
. Då skapar vi vårt mallobjekt. Här skapar vi en instans av Tilt :: ERBTemplate
klass men hela punkten med Tilt är att du kan använda vilken mallmotor du vill ha: till exempel kan du använda Tilt :: HamlTemplate
, Tilt :: SassTempalte
(för CSS), Tilt :: CoffeScriptTemplate
(för CoffeeScript), eller vilken stödmall som du vill ha Det är dock viktigt att notera att Tilt är bara en omslag: Du måste kräva det lämpliga biblioteket för den mallmaskin du vill använda. Så, om du vill använda en Tilt :: HamlTemplate
exempel måste du kräver "haml"
. Du kan se vilka bibliotek som krävs för varje mallmotor i Readme.
Slutligen öppnar vi filen vi vill skriva utdata till. HTML (eller CSS, eller JavaScript, beroende på mallen och den motor du använder) kommer att returneras från göra
Metod för mallobjektet. De göra
Metoden tar två parametrar. Det första är ett kontextobjekt: Alla objektets egenskaper kommer att vara tillgängliga som variabel i mallen. Så, vår context.title
egendom kommer att vara tillgänglig som just titel
inom mallen. Om det finns några andra värden du vill skicka in i mallen, skicka dem som en del av den andra parametern, vilket är en hash.
Så, vi kan köra det här skriptet på kommandoraden:
rubin using_tilt.rb
Nu ser du i katalogen som du har sparat dessa filer: du borde se en sites.html
fil. Om du tittar på det kommer du att upptäcka att mallen har gjorts:
Du kan göra mer komplexa saker med Tilt om du passerar ett block till göra
metod.
Tilt :: ERBTemplate ('other.erb'). Render (context, other_params) "lite text"
Inuti din mall kan du avkastning
till blocket; vad som återvänt från blocket kommer att infogas vid den tiden i mallen.
Medan du självklart kan passera en sträng via blocket, som ovan, finns det ett mer intressant användarfall. Nyligen har jag använt den här funktionaliteten i Tilt för att bädda in en sidspecifik mall inuti en webbplatsövergripande skal. Till exempel kan vi dela upp ovanstående mall i två filer:
<%= title %> <%= yield %>
Några av Tuts + Sites
För att göra vår sida kan vi göra det här:
mall = Tilt :: ERBTemplate.new ("layout.erb") File.open "sites.html" gör | fil | file.write template.render (context) Tilt :: ERBTemplate.new ("sites.erb"). render (Object.new, webbplatser: webbplatser) slutet
Observera att eftersom vi inte hade något objekt vi ville använda som kontextobjekt, passerade vi precis en vanlig vanilj blank Ruby-objekt. HTML som returneras från rendering av sites.erb
kommer att införas där avkastning
sökordet är. Om du kör ovanstående kod bör du se samma utgång som tidigare.
Du kommer märka att vi hittills har valt att välja den mallmotor vi vill använda när vi skapar Tilt-underklassobjektet. Tilt kommer dock att känna igen filförlängningen av mallen du skickar den, så du behöver inte explicit välja en motor: den väljer rätt, baserat på filtillägget:
t = Tilt.new "tutsplus.erb" t.class # => Tilt :: ERBTemplate
Om, av någon anledning, dina mallar har en filtillägg som inte är vad Tilt förväntar sig kan du registrera det:
Tilt.register Tilt :: ERBTemplate, "some_extension" t = Tilt.new "my_template.some_extension" t.class # => Tilt :: ERBTemplate
Det finns några fler nisch saker som Tilt kan göra; Om du är intresserad av att ta reda på mer, rekommenderar jag att du kolla in dokumentationen.