yield

erb 的 yield 和 partial

https://ihower.tw/rails/actionview.html

<%= yield %>
<!-- 樣板的 "動態內容" 置入處,動態內容指的是,一切套用此版型的頁面 -->


<%= render :partial => "header" %>
<!-- 局部樣板 Partials:上面例子,意指將檔案 _heater.html.erb 的內容,插入當前位置 -->

Action View - 樣板設計

ActionView 是 Rails 中處理 View 的元件名稱。 簡單說,View 就是指 HTML。 ActionView 就是動態產生的 html 檔案。 (什麼是 View ? MVC 架構: https://ihower.tw/rails/intro.html

Template 樣板

腦補:可被替換的內容稱為 Template?
Tem:temporarily
plate:圖版

製作網站時,Template(樣板)是動態"產生" HTML 的方式。 樣板的概念:我們把網站中,每個頁面相同的部分抽出,例如 header、footer 的 html,將它們放在 "版型 (Layout)" 中, 則每個使用這個版型的內容(Template)都會使用這份 header、footer。想修改 header、footer 也只要在版型中修改就好。

現在有很多 Template 引擎,來幫助做這件事。

在 Rails 使用樣板,要了解他的檔案位置和名稱是有玄機的,

app/views/Controller/ActionName.html.erb
# 可翻譯為:
# 網站(app)中放 html 的資料夾(views)
# 使用共同樣板(Controller)檔案的 .html.erb(ActionView) 檔案

例如

app/views/welcome/index.html.erb

welcome 目錄是它的 Controller 名稱, 檔案第一段 index 是它的 Action 名稱, 附檔名 則是用來指定要用什麼方式、來產生什麼格式的文件:

index.html.erb

表示用 ERb 產生 HTML 格式的文件。

會有這樣慣例的原因,你可能已經猜到,那就是使用 ERb 不代表一定就是用來產生 HTML。 用什麼 Template 引擎 (在 Rails 中又叫作 Template Handler) 產生文件,和文件的 Format 格式是兩回事情。 所以 ERb 其實可以用來產生任何文字檔格式,例如 CSV、XML、JavaScript 等等。

Layout 版型

_layout.html.erb 是一個專有檔案,即一個樣板版型檔,是一個完整的 html 檔案,可以讓不同 View(動態頁面)使用。 如果在 app/views/layouts 目錄下, 有跟某 "Controller" (上例會為 layouts 資料夾) 同名的 "Layout" 檔案(-layouts.html.erb), 那這個 "Controller" 下的所有 "Views" 就會使用這個同名的 "Layout"。 _layout.html.erb 中的 <%= yield %> 會被替換成個別 Action 的樣板。

因此我們可以為全站的頁面建立共用的版型。 這個檔案預設是

app/views/layouts/application.html.erb。

也可指定 Controller 的 Layout。

在 Templete 中設定 Layout 其他 Template 區塊

_layout.html.erb 中有 #content#sideBar 兩個可以放置 Template 的區域。

<!-- _layout.html.erb -->
<div id="sidebar">
    <!-- 設定 ":sidebar" -->
    <%= yield :sidebar %>
</div>
<div id="content">
    <%= yield %>
</div>

我們可以在 View-A 這個頁面檔案中,同時設定這兩個區域的內容。

<!-- "content_for :... do" 
這段內容會被置入到 _layout.html.erb 的 <%= yield :sidebar %> 中。 -->
<%= content_for :sidebar do %>
    <ul>
        <li>foo</li>
        <li>bar</li>
    </ul>
<% end %>

results for ""

    No results matching ""