Fire.app 機能應用教學

基於現有 Layout 製作變更部分內容的延伸 Layout(進階)

在範例網站中可以看到 Features 列表頁和內容頁的主選單下方都有一個宣傳文字區塊,為了讓 features 資料夾內的頁面都能擁有這個宣傳區塊,我們必須使用提供另一個 layout 給 features 資料夾內的頁面使用。但是如果要將共通 Layout 的內容複製一次的話便又增加了重複的程式碼量,因此我們可以改用指定 render template 搭配 content_for 的方式解決。

首先更改全站共用的 Layout 檔案 /_layout.html.erb ,在 <%= render :partial => "main_menu" %> 下方加上要插入宣傳文字的 content_for 區塊:

<% if content_for? :feature_slogan %>
    <%= yield :feature_slogan %>
<% end %>

由於預設狀況下此位置並不需要顯示任何內容,故無需撰寫 else 的部份。

接下來在 features 資料夾中新增一個 _layout.html.erb 檔案。由於資料夾中的檔案會使用離自己最近的 Layout 檔案, features 資料夾內的檔案便會使用新增的 Layout 檔案做為 Layout。

新增的 _layout.html.erb 內容如下:

<% content_for :feature_slogan do %>
    <div class="well">
        <h3><%= lorem_sentences 2 %></h3>
    </div>
<% end %>
<%= render :template => "/_layout" %>

上面的程式碼建立了一個基於共用 Layout 的 新 Layout,使用 <%= render :template => "/_layout" %> 表示套用這個 Layout 的頁面仍是以根目錄的 _layout.html.erb 做為實際上的 Layout ,而 content_for :feature_slogan 的部份則是指定套用此 Layout 的頁面都會擁有宣傳文字的區塊。完成後切換至瀏覽器便可看見 Features 列表頁和內容頁都加上了宣傳文字區塊。