テーブルの形の入力フォーム
2016年01月30日 13:18
ViewにはHTMLヘルパーをつかって作成
echo $this->Form->create('Table',array('type'=>'post','action'=>'index/table'));
$table_headers = array( 1 => "用紙サイズ",
3 => "日本",
4 => "欧米");
$header_list = $this->Html->tableHeaders(
$table_headers
);
$paperSizeList = array(
1 => 'A4',
2 => 'B5',
3 => 'A3'
);
//CellsListの作成
$cellsList = array();
$itemList = array();
$itemIndex = 0; //tableCellsを使用するには、Indexは0Start
$paperSizeIndex = 0;//tableCellsを使用するには、Indexは0Start
//$cellsList[用紙サイズの種類][項目の種類]
//用紙サイズごとのループ
foreach ($paperSizeList as $paperSizekey => $paperSize ):
$itemIndex = 0;
//横1行の項目ごとのループ
foreach ( $table_headers as $trkey => $item ):
if( 1 == $trkey ){
//1行目は項目名
$itemList[$itemIndex] = $paperSize;
}
else{
$paperTypeModelName = sprintf( "paperSize.%d.%d" , $paperSizekey , $trkey );
$itemList[$itemIndex] = $this->element( 'checkbox' , array( 'paperTypeModelName' => $paperTypeModelName ) );
}
$itemIndex++;
endforeach;
$cellsList[$paperSizeIndex] = $itemList;
$paperSizeIndex++;
endforeach;
$cellsList = $this->Html->tableCells(
$cellsList
);
echo $this->Html->tag('table' , $header_list . $cellsList );
echo $this->Form->end('確認');
用紙サイズ 項目1 項目2
A4 □ □
B5 □ □
A3 □ □
の形で作成。
でも、2行ヘッダがあったり、項目を結合指定したりすると、
どうやっていいかがわからない。
Indexは0から指定しないと、うまくうごかないし。
ヘルパーを使わない場合は
echo $this->Form->create('Table',array('type'=>'post','action'=>'index/table'));
//テーブルヘッダの出力
$tableHeaders = array( 'title' =>
array ( 1 => array( 'itemName' => "用紙サイズ" , 'colSpanCount' => 1 ),
2 => array( 'itemName' => "日本" , 'colSpanCount' => 2 ),
3 => array( 'itemName' => "日本" , 'colSpanCount' => 0 ),
4 => array( 'itemName' => "欧米" , 'colSpanCount' => 2 ),
5 => array( 'itemName' => "欧米" , 'colSpanCount' => 0 )
),
'detection' =>
array ( 1 => array( 'itemName' => "" , 'colSpanCount' => 1 ),
2 => array( 'itemName' => "自動検知" , 'colSpanCount' => 2 ),
3 => array( 'itemName' => "自動検知" , 'colSpanCount' => 0 ),
4 => array( 'itemName' => "手動検知" , 'colSpanCount' => 2 ),
5 => array( 'itemName' => "手動検知" , 'colSpanCount' => 0 )
)
);
$paperSizeList = array(
1 => 'A4',
2 => 'B5',
3 => 'A3'
);
echo '<table border>';
//テーブルヘッダの出力
//縦のループ
$saveColSpanCount = 0;
foreach ( $tableHeaders as $category => $listOfEachCategory ):
echo '<tr>';
//横一列のループ
foreach ( $listOfEachCategory as $key => $itemInfo ):
if( $itemInfo['colSpanCount'] == 0 ){
//N/A
}
else{
$tag= sprintf( '<th colspan="%d">' , $itemInfo['colSpanCount']);
echo $tag;
echo $itemInfo['itemName'];
echo '</th>';
}
endforeach;
echo '</tr>';
endforeach;
//テーブルセルの出力
//縦のループ
foreach ( $paperSizeList as $paperSizeNo => $PaperSizeName ):
echo '<tr>';
//横一列のループ
foreach ( $tableHeaders['title'] as $key => $titleValue ):
echo '<th>';
if( 1 == $key ){
//1列目は項目名
echo $PaperSizeName;
}
else{
$paperTypeModelName = sprintf( "paperSize.%d.%d" , $paperSizeNo , $key );
echo $this->element( 'checkbox' , array( 'paperTypeModelName' => $paperTypeModelName ) );
}
echo '</th>';
endforeach;
echo '</tr>';
endforeach;
echo '</table>';
echo $this->Form->end('確認');