主頁spacer>軟體支援>靜態網頁生成個案

spacer

2012 年 9 月

Mergemill Pro 是一個多功能的工具,它可以執行各種數據處理任務。我們最近進行一個以它為主要工具的軟體開發項目,為客戶帶來最高效益的同時,亦為 Mergemill Pro 的用戶探索商機。

我們的客戶出版《基督教週報》。這份新聞週刊有一個網絡版本,由於文章數量大,不宜每週人手製作網頁,並且客戶希望網站的文章可被搜尋,故網站多年來是由資料庫驅動。我們於 2000 年為他們構建這個動態網站,自當年一直運行至本年初。當我們承辦此網站重建改良工程時,便建議將其改變成一個靜態網站,並使用谷歌提供的文章搜索工具,客戶亦明顯期望整個出版過程盡可能自動化。


軟體開發工程目標

當我們開始這個項目時,客戶網站的 Alexa 網站排名約在一百萬左右徘徊,並且只有非常小的搜尋引擎流量。在我們面前是一個約有 25,000 篇文章及使用過時 Big5 文字編碼的舊資料庫。此編碼在出版物使用的文本中字符映射不完整,因此導致網頁出現無法識別的字符。我們的首要任務是遷移數據到一個支持統一碼(Unicode)的資料庫管理系統,及在這個過程中清理數據轉換編碼。在此工程的這個部分,Mergemill Pro 是我們不可缺少的工具。

第二個目標是要增加網站流量和擴大讀者群。下面是我們的執行清單:

我們的第三個目標是自動化整個網絡出版過程,盡可能減少客戶參與日常創建網頁的工作。Mergemill Pro 的預定自動運行功能正是要滿足這些需求。


完成後的系統

我們建立了一個簡單的 FileMaker Pro 資料庫以管理文章和相關數據,並預設十個腳本,自動搜索合適的文章,對它們進行排序,及匯出到特定地點。當一期的文章準備出版時,用戶需要做的只是在 FileMaker Pro 選單上選擇預設腳本。我們還在 Mergemill Pro 建構了 4 個專案及其附屬的合共 36 個作業,在每個星期日午夜時讀取 FileMaker Pro 腳本匯出的數據,並自動執行以下工作:

適當作業一旦完成運行,新一期週刊便會大約在週日上午 0:02 之前在線。使用目前的 MacBook Pro 再生整個網站的 50,000 個網頁,大約需要 30 分鐘,並只需每年做一次。出版每年的第一期週刊時,Mergemill Pro 還會更新一個重要的 Javascript。這個 Javascript 會於索引網頁被瀏覽時動態填充年份彈出選單。


《基督教週報》的 Mergemill Pro 作業設定

新網站於 2012 年 3 月底上線,流量開始每天增加。五個月後,每天平均訪客量巳增加超過 5 倍,60% 以上來自搜尋引擎。我們邀請客戶對新網站及出版系統作一個簡短評價,以下是《基督教週報》編輯黎蓮好女士的回應:

  1. 我們希望新網站能配合現時不同的電腦或手機平台瀏覽,並加入繁、簡體功能,現在已經可以配合得到。
  2. 我們期望網站可以在互聯網上搜尋得好,現時在 Google 搜尋器上搜尋我們的文章便很容易找到了。
  3. 現時在我們的網頁搜尋器上尋找文章效果比預期更理想。
  4. 新網站製作系統比舊的系統字體兼容性高,並且可以兼容香港字;在製作網頁時較舊有的系統方便。
  5. Mergemill Pro 在新系統中最大優點方便、快捷、並可預約處理。


解決方案分享

:: ODBC

我們最初的構思是通過 ODBC 連接到客戶的 FileMaker Pro 內容管理資料庫,並在預定時間自動提取所需的數據來更新網站。事實證明,在此系統中這不是一個可行的選擇。我們需要在整個出版過程中使用中文,包括資料庫中的欄名和表名。ODBC 和 SQL SELECT 語句在此系統中不起作用。在 FileMaker Pro 內提供腳本,可輕易避免這些問題,並讓客戶控制出版時間。在選單上選擇腳本的額外步驟,亦不被客戶視為負面。如客戶錯過預定的自動運行時間,Mergemill Pro 只是再次使用之前匯出的數據,生成上期週刊網頁。當新一期文章準備妥善後,客戶只需選擇並運行預設專案,出版最新一期週刊。

:: 嵌套循環

Mergemill Pro 不支援嵌套循環,但創建多層作業可容易達致相同的效果。我們在本文談及的軟體開發項目中亦有用此方法。客戶出版的每一期週刊,皆有一個索引頁,內含每篇文章的連結,每個文章網頁上的右邊欄皆以較小字體顯示該期的索引,創建每個索引頁和其相關文章網頁的步驟可參考「視頻教程:生成靜態網站」。

:: 生成 Javascript

每個索引頁上的側欄提供一個彈出式選單允許訪客選擇一個年數,選定一年中出版所有週刊的連結,將於選單下動態顯示出來。產生這動態顯示的 Javascript 是外置的,所以我們只需於出版每期週刊時將其同時更新,而不必再生所有的網頁。

Mergemill Pro 可處理所有文本檔案,包括資料庫和文檔內的文本內容,如 TXT、CSV、XML、CSS、RSS、HTML 和 Javascript 等。下面的文本是更新上述 Javascript 的模板頂部和底部的部分:

window.onload = writeLinkList;


function writeLinkList() {
var iOption = document.getElementById("selectYear");
var iYear = iOption.options[iOption.selectedIndex].value;
var iListLeft = "";
var iListRight = "";


switch(iYear) {
case "1999":
iListLeft = "<li><a href='1999/ti19990502.htm'>1999-05-02</a></li><li><a href='1999/ti19990509.htm'>1999-05-09</a></li><li><a href='1999/ti19990516.htm'>1999-05-16</a></li><li><a href='1999/ti19990523.htm'>1999-05-23</a></li><li><a href='1999/ti19990530.htm'>1999-05-30</a></li><li><a href='1999/ti19990606.htm'>1999-06-06</a></li><li><a href='1999/ti19990613.htm'>1999-06-13</a></li><li><a href='1999/ti19990620.htm'>1999-06-20</a></li><li><a href='1999/ti19990627.htm'>1999-06-27</a></li><li><a href='1999/ti19990704.htm'>1999-07-04</a></li><li><a href='1999/ti19990711.htm'>1999-07-11</a></li><li><a href='1999/ti19990718.htm'>1999-07-18</a></li><li><a href='1999/ti19990725.htm'>1999-07-25</a></li><li><a href='1999/ti19990801.htm'>1999-08-01</a></li><li><a href='1999/ti19990808.htm'>1999-08-08</a></li><li><a href='1999/ti19990815.htm'>1999-08-15</a></li><li><a href='1999/ti19990822.htm'>1999-08-22</a></li><li><a href='1999/ti19990829.htm'>1999-08-29</a></li>";
iListRight = "<li><a href='1999/ti19990905.htm'>1999-09-05</a></li><li><a href='1999/ti19990912.htm'>1999-09-12</a></li><li><a href='1999/ti19990919.htm'>1999-09-19</a></li><li><a href='1999/ti19990926.htm'>1999-09-26</a></li><li><a href='1999/ti19991003.htm'>1999-10-03</a></li><li><a href='1999/ti19991010.htm'>1999-10-10</a></li><li><a href='1999/ti19991017.htm'>1999-10-17</a></li><li><a href='1999/ti19991024.htm'>1999-10-24</a></li><li><a href='1999/ti19991031.htm'>1999-10-31</a></li><li><a href='1999/ti19991107.htm'>1999-11-07</a></li><li><a href='1999/ti19991114.htm'>1999-11-14</a></li><li><a href='1999/ti19991121.htm'>1999-11-21</a></li><li><a href='1999/ti19991128.htm'>1999-11-28</a></li><li><a href='1999/ti19991205.htm'>1999-12-05</a></li><li><a href='1999/ti19991212.htm'>1999-12-12</a></li><li><a href='1999/ti19991219.htm'>1999-12-19</a></li><li><a href='1999/ti19991226.htm'>1999-12-26</a></li>";
break;
case "2000":
iListLeft = ...
...
break;
case "2011":
iListLeft = ...
iListRight = ...
break;
<?Loop?><?If(Same[出版年])?><?Else?>case "<?[出版年]?>":
iListLeft = "<?EndIf?><li><a href='<?[出版年]?>/ti<?[出版年]?><?[出版月]?><?[出版日]?>.htm'><?[出版年]?>-<?[出版月]?>-<?[出版日]?></a></li><?If([出版月]=06)?><?If([出版月]{2}=07)?>";
iListRight = "<?EndIf?><?EndIf?><?If(Same[出版年]{2})?><?Else?>";
break;
<?EndIf?><?EndLoop?>

}
 
document.getElementById("linkpagesleft").innerHTML = iListLeft;
document.getElementById("linkpagesright").innerHTML = iListRight;
}

要更新 Javascipt,系統僅需匯出 2011 年後的數據,故上述模板的 Mergemill 腳本只用來生成 2012 年開始的連結。

spacer

返回頁首

軟體功能spacer::spacer下載專區spacer::spacer購買spacer::spacer軟體支援spacer::spacer視頻教程spacer::spacer標籤指南spacer::spacer網站導覽


版權所有 · 不得轉載 © 2001-2017 Cross Culture Ltd.