Templates, Layouts & Partials
Fire.app 目前支援以下 Template Languages:
- ERB
http://ruby-doc.org/stdlib-1.9.3/libdoc/erb/rdoc/ERB.html - Markdown (Kramdown)
http://kramdown.rubyforge.org/ - Slim
http://slim-lang.com/ - Haml
http://haml.info/ - Liquid
http://liquidmarkup.org/
使用 Template Languages 能讓建立HTML變得更簡單。
除此之外還能套用 Layout 及使用 Partial ,有效簡化建置網站 Prototype 時繁雜而高重複性的部份。
Templates
樣板語言有很多種,但如果你想完整的利用 Fire.app 的 Layout 、 Partial 和 Template Helpers 等部分,我們建議使用 ERB 或 Haml 。 這兩種語言對於熟悉 HTML 的 designer/developer 來說都不會太難上手,特別是和 HTML 非常相似的 ERB 。在 ERB 檔案中除了能夠使用一般的 HTML 語法,還能應用 Ruby 語法來省去一些在使用純 HTML 時無法避免的重複性工作。例如像這樣的 HTML :
<h1>sample list</h1>
<ul>
<li>list 1</li>
<li>list 2</li>
<li>list 3</li>
<li>list 4</li>
<li>list 5</li>
</ul>
使用 ERB 撰寫時能夠利用RUBY語法加以簡化,未來想增減條列的數量也非常方便:
<h1>sample list</h1>
<ul>
<% (1..5).each do |n| %>
<li>list <%= n %></li>
<% end %>
</ul>
若使用 Haml 撰寫相同部分則會如下:
%h1 sample list
%ul
- (1..5).each do |n|
%li="list "+n.to_s
在 Fire.app 中要使用樣板語言相當簡單,只要存檔時使用相對應的副檔名即可。使用 ERB 時對應的副檔名是 .html.erb,使用 Haml 時對應的副檔名則是 .html.haml 。例如儲存了一個 test.html.erb 檔案在網站的專案目錄下時,在瀏覽器開啟 http://127.0.0.1:24681/test.html 便可以看見該檔案最終呈現的狀況。
以下項目皆使用 ERB 樣板語言進行示範,若想更加了解上述兩種樣板語言,可以參考下列資料:
-
ERB
-
Haml
Layouts
製作一個網站時通常許多頁面會擁有相同的架構和共通元素,使用 HTML 來製作 Prototype 時經常必須把這些相同部分的原始碼複製到各頁面中,要修改時便需要逐個檔案修改,相當麻煩且容易遺漏。藉由 Fire.app 可以利用 Layout 來包含這些頁面中相同部分的原始碼,至於各頁面產出的內容則會生成在 Layout 中 yield 的部份。通常 Layout 檔案的內容會類似於下列原始碼,可以看到 <%= yield %> 的部份便是套用此 Layout 的頁面內容會產生的位置。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Site Title</title>
<link href="/stylesheets/style.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="header"></div>
<%= yield %>
<div class="footer"></div>
</div>
</body>
</html>
要套用 Layout 有三種方法:
- 使用對應目錄中的 Layout 檔案
- 指定想套用的 Layout 檔案
- 指定 Render Template
使用對應目錄中的 Layout 檔案
當網頁頁面的所在目錄或上層目錄中有 _layout.html.erb 或 _layout.html.haml 檔案時,便會自動套用該檔案做為 Layout ,因此使用時只要將編輯好的 Layout 檔案放在適當的位置即可。當頁面所在資料夾和上層目錄同時都存在 Layout 檔案時會套用同一資料夾的 Layout 。例如網站根目錄下有 /about 和 /products 兩個資料夾,資料夾內各自有該分類的頁面,而根目錄下和 /products 資料夾中都有 Layout 檔案時, /about 資料夾內的頁面會套用根目錄下的 Layout ; /products 資料夾內的頁面則會套用該資料夾內的 Layout 檔案。
指定想套用的 Layout 檔案
當網站中有少數無法套用制式 Layout 的例外頁面時,可以指定該頁面欲套用的 Layout 檔案。方法是建立一個相對應的 Layout 設定檔來指定想套用的 Layout ,舉例來說在網站的根目錄有一個 contact.html.erb 想套用的 Layout 是 /special_layouts/_special_layout.html.erb ,那麼就要在 contact.html.erb 所在的資料夾建立一個新檔案,檔名對應於 contact.html.erb 必須是 contact.html.layout ,這個檔案便是 contact.html.erb 專用的設定檔,只要在檔案中寫這一行:
special_layouts/_special_layout.html.erb
contact.html.erb 便會使用 /special_layouts/_special_layout.html.erb 這個檔案做為套用的 Layout 了。
指定 Render Template
此方法通常用於搭配 content_for 使用,例如當共用的 Layout /_layout.html.erb 中使用了
<% if content_for? :ad %>
<%= yield :ad %>
<% end %>
使用以上的程式碼,當有設定 :ad 的內容時便會顯示出來。
但要是資料夾 /doc 中所有的頁面都要顯示同樣的 :ad 內容但使用同樣的預設 Layout ,就可以在 /doc 中新增一個供此資料夾內檔案使用的 Layout /doc/_layout.html.erb ,內容為:
<% content_for :ad do %>
doc 資料夾內共用的廣告內容
<% end %>
<%= render :template => "/_layout" %>
如此便可在使用相同 Layout 的狀況下新增可共用的 content_for 設定。關於 content_for 的詳細用法請參照: Template Helpers
Partials
在前面的介紹可以看到隨著頁面性質的不同可以套用不同的 Layout ,可想而知一個網站的 Layout 很可能不只一種。然而在不同的 Layout 中仍然可能會有共同的網頁元件,如側欄、主選單等。 Partials 便是用來將這些經常重複出現的部份抽出成單一檔案,便於維護和再利用。 Partial 的檔名需以底線 _ 開頭,例如 _footer.html.erb 或 _footer.html.haml ,無論是 Layout 檔案、頁面檔案或 Partial 檔都可以利用 render 語法來取用,如 <%= render :partial => "footer" %> 。
詳細使用方式請見以下範例:
首先將網站中的主選單取出成 Partial ,內容是
<ul id="main_menu">
<li class="about"><a href="#">About</a></li>
<li class="products"><a href="#">Products</a></li>
<li class="contact"><a href="#">Contact</a></li>
</ul>
檔名取為 _main_menu.html.erb ,當同一個資料夾內的 _layout.html.erb 檔案想載入主選單的部分時便可以寫成:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Site Title</title>
<link href="/stylesheets/style.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="header">
<%= render :partial => "main_menu" %>
</div>
<%= yield %>
<div class="footer"></div>
</div>
</body>
</html>
需注意的是 render 部分的引號中輸入的是 Partial 檔案的檔名去掉底線也不帶有副檔名的部分,這麼一來只要是套用了這個 Layout 的頁面便都會有主選單出現在 <%= yield %> 區塊的上方。