iT邦幫忙

2

靜態網頁裡用Template Layout的簡易方法

到目前為止,快寫網頁是針對單一網頁的快寫方案,
但實際的情況是常要維護多頁面,
如何在維護頁面上也可以快寫,
需借助有關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 有所變動,
又需要把所有的頁面重新產生一次,
這些都是在維護上麻煩的地方。

靜態網頁產生器,
就是可以考量的維護機制。

系列文章列表


尚未有邦友留言

立即登入留言