一日中雨だったのでテキトーにコードを書いていました。(: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タグが使いづらくて辛い。