一日中雨だったのでテキトーにコードを書いていました。(:3_ヽ)_
cfdocumentタグを利用してPDF出力をする時にそのままHTMLを書いていると保守性に欠けるので、
cfsavecontentタグを利用したテーブルの出力方法を考えてみました。
条件文を利用して10件ずつ帳票に印字するといったことが簡単に実現ができます。
<cfscript>
// 表示用のデータ
nameArray = ["田中", "斎藤", "近藤", "キャサリン"];
nameArray2 = ["工藤", "佐々木"];
// 行単位でHTMLを保持する配列
tableBodyContentArray = ArrayNew(1);
tableBodyContentArray2 = ArrayNew(1);
// Tableテンプレート作成
sTableStart = setTableStart();
sTableHeader = setTableHeader();
sTableEnd = setTableEnd();
// 行データ取得
tableBodyContentArray = setTableBodyContnet(nameArray, tableBodyContentArray);
tableBodyContentArray2 = setTableBodyContnet(nameArray2, tableBodyContentArray2);
// TableBody HTML作成
sTableBody = setTableBody(tableBodyContentArray);
sTableBody2 = setTableBody(tableBodyContentArray2);
// Table HTML作成
sHtml = createTableHtml(sTableStart, sTableHeader, sTableBody, sTableEnd);
sHtml2 = createTableHtml(sTableStart, sTableHeader, sTableBody2, sTableEnd);
// 出力
WriteOutput(sHtml);
WriteOutput(sHtml2);
</cfscript>
<cffunction name = "createTableHtml" returnType = "string" access = "private">
<cfargument name="_sTableStart" type="string" required="true">
<cfargument name="_sTableHeader" type="string" required="true">
<cfargument name="_sTableBody" type="string" required="true">
<cfargument name="_sTableEnd" type="string" required="true">
<cfoutput>
<cfsavecontent variable = "table">
#_sTableStart#
#_sTableHeader#
#_sTableBody#
#_sTableEnd#
</cfsavecontent>
</cfoutput>
<cfreturn table>
</cffunction>
<cffunction name = "setTableStart" returnType = "string" access = "private">
<cfsavecontent variable = "tableStart">
<table border="1">
</cfsavecontent>
<cfreturn tableStart>
</cffunction>
<cffunction name = "setTableHeader" returnType = "string" access = "private">
<cfsavecontent variable = "tableHeader">
<thead>
<tr>
<th>No</th>
<th>名前</th>
</tr>
</thead>
</cfsavecontent>
<cfreturn tableHeader>
</cffunction>
<cffunction name = "setTableBody" returnType = "string" access = "private">
<cfargument name="_tableBodyContentArray" type="array" required="true">
<cfset rowNo = 1>
<cfoutput>
<cfsavecontent variable = "tableBody">
<tbody>
<cfloop array = "#_tableBodyContentArray#" index="idx">
#idx#
</cfloop>
</tbody>
</cfsavecontent>
</cfoutput>
<cfreturn tableBody>
</cffunction>
<cffunction name = "setTableBodyContnet" returnType = "array" access = "private">
<cfargument name="_nameArray" type="array" required="true">
<cfargument name="_tableBodyContentArray" type="array" required="true">
<cfset rowNo = 1>
<cfoutput>
<cfloop array = "#_nameArray#" index="idx">
<cfsavecontent variable = "tableBodyContent">
<tr>
<td>#rowNo#</td>
<td>#idx#</td>
</tr>
</cfsavecontent>
<cfscript>
ArrayAppend(_tableBodyContentArray, tableBodyContent);
rowNo += 1;
</cfscript>
</cfloop>
</cfoutput>
<cfreturn _tableBodyContentArray>
</cffunction>
<cffunction name = "setTableEnd" returnType = "string" access = "private">
<cfsavecontent variable = "tableEnd">
</table>
</cfsavecontent>
<cfreturn tableEnd>
</cffunction>
cfdocumentタグが使いづらくて辛い。
