主頁spacer>spacerMergemill 標籤指南spacer>spacer循環標籤

spacer

內容插入

算術表達式

循環

分支

系統值

統計函數

區段

範例

spacer

<?Loop: 停止數?>
<?Exit?>
<?EndLoop?>

循環標籤用於指定模板內一個重複生成輸出的部分。Mergemill 單獨管理每個循環的運行,並視所有循環外的模板文本同為一個特殊的循環體。

每項作業都有一個關聯的模板,模板會按需要自動多次運行,直到用盡所有主要數據饋送。模板的實際運行次數取決於循環的使用。沒有循環結構的模板,所有佔位欄皆於「循環外」,模板會自動重複運行,直到用盡所有佔位欄的數據饋送。如果模板包含循環,只有循環內的佔位欄被視為主要,循環外的佔位欄被認為是輔助性質,故其數據饋送不需被用盡。

space
沒有循環結構的模板

一個無循環的模板經常被用來生成提供詳細資料的網頁,例如一個頁面包括單一物品的全部信息。Mergemill 會重複運行模板,直到用盡所有的數據饋送。在這種情況下,整個模板是一種特殊的循環體,它與一個普通的循環有兩個重要的分別。首先,模板每運行一次便生成一個頁面。其次,如果你已經在作業定義內選擇「循環外佔位欄數據環回」,任何循環外佔位欄若較其他佔位欄早用盡其當前數據流的數據,便會於下次模板運行前環回至其當前數據流的開端。同樣,循環外佔位欄若較其他佔位欄早用盡其數據流,便會於下次模板運行前環回至其首個數據流的開端。如「循環外佔位欄數據環回」沒有被選取,用盡數據的佔位欄便會插入空白值。

下面的 HTML 代碼是一個例子:

<p>銷售年份:<?[年份]{4}?></p>
<table width="700" border="1" cellspacing="0" cellpadding="3">
<tr>
<td width="200" bgcolor="#<?[背景顏色1]?>"><p>第一季銷售額</p></td>
<td width="500" bgcolor="#<?[背景顏色1]?>"><p><?[銷售額]{1}@##,###,##0?></p></td>
</tr>
<tr>
<td width="200" bgcolor="#<?[背景顏色2]?>"><p>第二季銷售額</p></td>
<td width="500" bgcolor="#<?[背景顏色2]?>"><p><?[銷售額]{2}@##,###,##0?></p></td>
</tr>
<tr>
<td width="200" bgcolor="#<?[背景顏色1]?>"><p>第三季銷售額</p></td>
<td width="500" bgcolor="#<?[背景顏色1]?>"><p><?[銷售額]{3}@##,###,##0?></p></td>
</tr>
<tr>
<td width="200" bgcolor="#<?[背景顏色2]?>"><p>第四季銷售額</p></td>
<td width="500" bgcolor="#<?[背景顏色2]?>"><p><?[銷售額]{4}@##,###,##0?></p></td>
</tr>
</table>

年份與銷售額的數據來自一個 CSV 文檔,其部分內容如下:

space"年份","季度","銷售額"
space2000,1,1186100
space2000,2,945300
space2000,3,1077200
space2000,4,1683300
space2001,1,1308200
space...

「背景顏色1」和「背景顏色2」的數據來自另一個文檔,其內容只有:
space"eeeeff","ffeeee"

作業運行時,每個輸出網頁會列出一個年份內四個季度的銷售額。「年份」的列號 (4) 會導致 Mergemill 在模板運行時跳過三個值,以保持「年份」和「銷售額」同步。多次出現的「背景顏色1」和「背景顏色2」使用相同的數據值,即分別是 eeeeff 和 ffeeee。

假設「循環外佔位欄數據環回」選項巳被選擇,當模板第二次運行時「年份」和「銷售額」會繼續從其數據流提取內容,但「背景顏色1」和「背景顏色2」則會從其數據流重新開始,因該數據流巳於模板第一次運行時用盡。

space
包含循環結構的模板

模板中經常使用循環來生成「索引」網頁,以方便導覽由不使用循環的模板所生成的詳細信息網頁。這些網頁通常都是以相同的數據饋送產生。

作業開始時,模板會被多次運行,用盡循環內所有佔位欄的首個數據流來產生第一組網頁。然後以下一組數據流重複運行模板,產生下一組網頁,再繼續重複直到循環內所有佔位欄的所有數據流皆被用盡。如果你不設定任何循環的中斷條件,Mergemill 便只會於數據流完結時跳出循環,於是每一組數據流只會產生一個索引網頁。

在一個內含循環結構的模板,循環內的佔位欄是主導。縱使循環外的佔位欄還有未用盡的數據或未被使用的數據流,當循環內佔位欄的數據饋送盡用時作業便結束。由於所有佔位欄皆會同步使用數據流,故當作業完成輸出當前頁面組後,所有佔位欄的數據皆會於下一組數據流的前端開始,循環外佔位欄當前還未用盡的數據流會被略過。

space
退出循環

所有循環皆會於當前數據流完結時自動退出,你亦可設定條件提早跳出循環,最簡單的方法是使用循環的「停止數」屬性。另一種提早跳出循環的方式不使用「停止數」屬性,而是以 IF 結構來測試退出條件,同時於適當位置使用 Exit 標籤。例如:

space<?Loop?> ... <?If(Same[測試值佔位欄]{2})?><?Else?><?Exit?><?EndIf?><?EndLoop?>

控制循環退出的順序是這樣的:Exit 標籤,循環「停止數」屬性,及數據流終結。

space
循環的應用

假設模板有兩個循環結構。循環 1 以「停止數」設定運行 20 次。循環 2 沒有任何退出設定,所以會重複運行至數據流終結。循環外佔位欄的數據饋送有 3 個數據流,循環 1 佔位欄的數據饋送有 2 個數據流,循環 2 佔位欄的數據饋送有 4 個數據流。循環 1 佔位欄的首個數據流每列皆有 58 個數據值,第二個數據流則每列有 63 數據值。

space
:: 第一組頁面

第一次運行模板時,Mergemill 提取循環外佔位欄的首組數據流的第一組數據值以作輸出之用。模板運行至循環 1 時,該循環體便會被重複運行 20 次,至其內的佔位欄皆使用了首組數據流的首 20 個數據值,然後退出。模板運行至循環 2 時,該循環體會被重複運行直至其內的佔位欄全用盡它們的首個數據流,然後退出,其間數據不足的數據流會使其相關的佔位欄插入空白值直至最長的數據流被盡用為止。Mergemill 繼續運行至模板結束。這將產生首組數據流的第一頁。

由於循環 1 內佔位欄的首組數據流尚未用盡,模板會被再次運行。如果有足夠的數據,循環外的佔位欄會使用它們首組數據流的第二組數據值以作輸出。當 Mergemill 運行至循環 1 時,便會重複運行循環體,直到用盡首組數據流的第二組 20 個數據值,然後繼續至循環 2。該循環會被略過,因其內的佔位欄巳全用盡它們的當前數據流。Mergemill 會繼續運行至模板結束來完成第一頁組的第二頁。

模板運行第三次,完成使用循環 1 內佔位欄的首組數據流的最後 18 個數據值。Mergemill 然後繼續運行至模板結束,其間再次跳過循環 2。這樣就完成了第一頁組的第三頁(最後一頁)。

space
:: 第二組頁面

隨後,模板會被運行 4 次,以第二組數據流產生第二頁組的 4 個頁面。如第一頁組的情況一樣,循環 2 會於第一頁用盡其內所有佔位欄的第二組數據流。如有足夠數據值,所有循環外佔位欄皆會使用它們第二個數據流的首 4 佪數據值來產生頁組內的 4 頁輸出。沒有足夠數據值的循環外佔位欄將按「循環外佔位欄數據環回」選項適當處理。

space
:: 其餘頁面組

輸出第三頁組時,模板只運行一次,產生一個頁面,因為循環 1 巳沒有數據可用,故會被完全略過。循環 2 會被重複運行直至其內的佔位欄全用盡它們的第三個數據流。

由於所有循環內佔位欄必須用盡它們的數據流,模板會被運行第四次,去產生只有一頁的第四個頁組。此頁組與前一組一樣,循環 1 會被完全略過,而循環 2 會在一頁內用盡其第四組數據流。同樣,由於循環外佔位欄沒有第四組數據流,故它們將按「循環外佔位欄數據環回」選項被適當處理。

要了解更多有關循環標籤的應用,建議你細心理解一些巳包含於 Mergemill Pro 軟體包內的範例:Mergemill Pro > Mergemill Resources > Examples > 繁體中文。

spacer

內容插入

算術表達式

循環

分支

系統值

統計函數

區段

範例

spacer

返回頁首

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


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