主页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 连接到客户的 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.