到目前為止,快寫網頁是針對單一網頁的快寫方案,
但實際的情況是常要維護多頁面,
如何在維護頁面上也可以快寫,
需借助有關template layout的方式進行。
避免重覆的HTML碼
通常網站裡的網頁會有一致性,
像頁面旁邊的導覽頁或整頁的佈局,
不同頁的內容,
通常是集中在固定的範圍內;
所以理想的維護方式是,
每頁都會有的共同內容,
成為一個 layout.haml
而該檔案裡面安插一個區塊,
可塞入真正各頁的內容,
像index.haml
當要編譯出HTML時,
就是 layout.haml + index.haml 跑出 index.html 的結果。
簡單地實作
先編輯 layout.haml 的內容為:
!!!5
%html
%head
%meta{:charset => 'UTF-8'}
%title 測試
%body
= yield
%script{:src=>"/js/jquery.min.js",:type=>"text/javascript"}
%script{:src=>"/js/lorem.js",:type=>"text/javascript"}
其中的 = yield 是會在編譯成 HTML 檔案的時候,
個別內容的 HAML 檔會放置在該處。
再編輯 index.haml 的內容為:
%h1 這是 index 頁面
%h2.lorem_w2
%p.lorem_p3
這時需要一個簡單的script,
在此命名為 gen-html.rb
require "haml"
require "tilt"
layout = Tilt.new('./layout.haml')
file = Tilt.new(ARGV[0])
output = layout.render {file.render}
puts output
再鍵入 ruby gen-html.rb index.haml
就會畫出這完整的HTML內容:
<meta charset='UTF-8'>
<title>測試</title>
<h1>這是 index 頁面</h1>
<h2 class='lorem_w2'>
<p class='lorem_p3'></p>
</h2>
<script src='/js/jquery.min.js' type='text/javascript'></script>
<script src='/js/lorem.js' type='text/javascript'></script>
若要存成檔案,以 ruby gen-html.rb index.haml > index.html。
使用上的限制
若要維護的檔案是少數,
更動頻率低的話,
每編輯一個檔案就下指令執行一次,
大概還可以接受,
若更動頻率高,
又常編輯不同的檔案,
或檔案數量多的時候,
這重覆的動作,
就會再尋求是否有更好的維護方法。
而從layout.haml的內容而言,
title的標籤無法隨不同檔案來變動。
如果剛好 layout.haml 有所變動,
又需要把所有的頁面重新產生一次,
這些都是在維護上麻煩的地方。
靜態網頁產生器,
就是可以考量的維護機制。