このエントリーをはてなブックマークに追加

更新日: 2016年2月25日

実行時間: 0.0080

CI_Table

 「CI_Table」ライブラリクラスは、配列データやDBのActive-Recodeデータから HTMLのテーブルを動的に生成する機能を提供します。

 HTMLのテーブルには「<table>」「<caption>」「<tr>」「<th>」 「<td>」タグから構成されますが、これらすべてのタグを自由にカスタマイズすることができます。

CI_Tableクラスのロード

 「CI_Loader」クラスの「library()」メソッドでロードします。
 「CI_table」クラスに必要な設定項目はありません。 従って、ロードする際に第二引数に設定情報を指定する必要はありません。

    $this->load->library('table');

テーブルタグのテンプレート

 デフォルトテンプレート

 「CI_Table」クラスにはデフォルトでHTMLテーブルを構成する各タグのテンプレートが用意されています。  デフォルトのテンプレートは「CI_Table」クラス内部に配列データとして静的に記述されています。

array(
'table_open' => '<table border="0" cellpadding="4" cellspacing="0">',
'thead_open' => '<thead>',
'thead_close' => '</thead>',
'heading_row_start' => '<tr>',
'heading_row_end' => '</tr>',
'heading_cell_start' => '<th>',
'heading_cell_end' => '</th>',
'tbody_open' => '<tbody>',
'tbody_close' => '</tbody>',
'row_start' => '<tr>',
'row_end' => '</tr>',
'cell_start' => '<td>',
'cell_end' => '</td>',
'row_alt_start' => '<tr>',
'row_alt_end' => '</tr>',
'cell_alt_start' => '<td>',
'cell_alt_end' => '</td>',
'table_close' => '</table>'
)

テンプレートのカスタマイズ
set_template($template)

 テーブルを構成する各タグは、CSSのための「class=」属性など、各タグに属性を追加・変更を行い、
自由にカスタマイズすることが可能です。

 カスタマイズしたテンプレートを指定するには「set_template()」メソッドの引数に、 上記の項目を含む連想配列を指定します。

 また、全ての項目を指定する必要は無く、特定の項目のみカスタマイズすることも可能です。
 特定の項目だけをカスタマイズする場合は、カスタマイズしたいタグの項目だけで構成する連想配列を指定します。

    $this->load->library('table');

    $template['table_open'] = '<table class="my_table">';
    $template['heading_row_start'] = '<tr class="heading">';
    $template['row_alt_start'] = '<tr class="alt">';

    $this->table->set_template($template);

HTMLテーブルの生成

 HTMLテーブルを生成するには二通りの方法があります。
 一つは、テーブルを構成するデータの多次元配列を元に一気に生成する方法、 もう一つは、配列データを元にテーブルを1行ずつ追加していく方法です。

 また、1行ずつデータを追加した後に、更に多次元配列を追加して生成することもできます。 この場合は、予めテーブルヘッダを追加しておかないと、多次元配列の先頭データがテーブルヘッダとして 生成されてしまうので注意が必要です。

generate($table_data = NULL)

 多次元配列データで一気にHTMLテーブルを生成します。

    $this->load->library('table');
    $table_data = array(
        array( '会員ID', '名前', '年齢'),
        array( '100001', '甲土 伊具', '38'),
        array( '100002', '仕合 凱努', '20'),
        array( '100003', 'コード イグナイ', '41'),
    );
    $this->output->set_output( $this->table->generate($table_data) );
    <table border="0" cellpadding="4" cellspacing="0">
    <thead>
    <tr>
    <th>会員ID</th><th>名前</th><th>年齢</th></tr>
    </thead>
    <tbody>
    <tr>
    <td>100001</td><td>甲土 伊具</td><td>38</td></tr>
    <tr>
    <td>100002</td><td>仕合 凱努</td><td>20</td></tr>
    <tr>
    <td>100003</td><td>コード イグナイ</td><td>41</td></tr>
    </tbody>
    </table>
    

set_heading()
add_row() 一番上に戻る

 HTMLテーブルを1行ずつ追加して生成します。
 「set_heading()」メソッドでテーブルヘッダを一行をセットします。 既にセットされているデータは上書きされます。
 「add_row()」メソッドで、テーブルデータの一行をセットします。 データは追加されていきます

 「set_heading()」「add_row()」メソッド共に、引数には1行分のデータを表わす配列、
 または、第一引数・第二引数・・・と1行にセットするデータを指定していきます。
 引数の数に制限はありません。

    $this->load->library('table');

    $heading = array( '会員ID', '名前', '年齢');
    $this->table->set_heading($heading);

    $row = array( '100001', '甲土 伊具', '38');
    $this->table->add_row($row);
    $this->table->add_row( '100002', '仕合 凱努', '20');
    $this->table->add_row(array( '100003', 'コード イグナイ', '41'));
    $this->outpu->set_output( $this->table->generate() );
    <table border="0" cellpadding="4" cellspacing="0">
    <thead>
    <tr>
    <th>会員ID</th><th>名前</th><th>年齢</th></tr>
    </thead>
    <tbody>
    <tr>
    <td>100001</td><td>甲土 伊具</td><td>38</td></tr>
    <tr>
    <td>100002</td><td>仕合 凱努</td><td>20</td></tr>
    <tr>
    <td>100003</td><td>コード イグナイ</td><td>41</td></tr>
    </tbody>
    </table>
    

set_caption($caption) 一番上に戻る

 「 <caption> 」をセットします。
 「 <caption> 」タグに属性を付けるなどのカスタマイズはできません。

    $this->table->set_caption('会員テーブル');

    $this->table->generate($table_data);
    <caption>会員テーブル</caption>
    <table border="0" cellpadding="4" cellspacing="0">
         :
    

テーブル配列データ

 上記で説明したテーブル配列データは、単純な配列からなる多次元配列ですが、テーブルの各行の
カラムデータを連想配列とすることができます。
 連想配列とすると、配列の添え字(インデックスキー)文字列が「<th>」または、「<td>」タグの 属性として生成され、配列の値はその属性の「値データ」として生成されます。
 テーブルカラムのデータは、連想配列の添え字(インデックスキー)を「 'data' 」とします。

    $heading = array(
       array('class' => 'table_head', 'data' => '会員ID'),
       array('class' => 'table_head', 'data' => '名前',
       array('class' => 'table_head', 'data' => '年齢'),
    );
    $this->table->set_heading($heading);

    $row = array(
       array('align' => 'center', 'class' => 'column', 'data' => '100001'),
       array('align' => 'center', 'class' => 'column', 'data' => '甲土 伊具'),
       array('align' => 'center', 'class' => 'column', 'data' => '38'),
    );
    $this->table->add_row($row);

    $this->table->generate();
    <table border="0" cellpadding="4" cellspacing="0">
    <thead>
    <tr>
    <th class="table_head">会員ID</th>
    <th class="table_head">名前</th>
    <th class="table_head">年齢</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td class="column">100001</td>
    <td class="column">甲土 伊具</td>
    <td class="column">38</td>
    </tr>
    </tbody>
    </table>
    

その他の機能

set_empty($value) 一番上に戻る

 空のカラムの代替え文字列を指定します。
 テーブルデータを生成する配列データに、空文字列、もしくは、 「 NULL 」がセットされていた場合、
「 set_empty() 」メソッドで予め指定された文字列をテーブルカラムに表示します。

    $this->load->library('table');
    $table_data = array(
        'array( '会員ID', '名前', '年齢'),
        'array( '200001', '山田 太郎', ''),
        'array( '200002', '鈴木 一郎', NULL),
    );
    $this->table->set_empty('[不明]');
    $this->table->generate($table_data);
    <table border="0" cellpadding="4" cellspacing="0">
    <thead>
    <tr>
    <th>会員ID</th><th>名前</th><th>年齢</th></tr>
    </thead>
    <tbody>
    <tr>
    <td>200001</td><td>山田 太郎</td><td>[不明]</td></tr>
    <tr>
    <td>200002</td><td>鈴木 一郎</td><td>[不明]</td></tr>
    <tr>
    </tbody>
    </table>
    

clear() 一番上に戻る

 「 set_heading() 」メソッドでセットしたテーブルヘッダ情報と、「 add_row() 」メソッドでセットした
テーブルカラムデータを初期化して空にします。

 CodeIgniter 2.0.1から「 generate() 」メソッドでテーブルを生成すると、自動で テーブルヘッダ情報とテーブルカラムデータは初期化されるため、「 generate() 」メソッドの後に 「 clear() 」メソッドを実行する
必要はありません

    $this->table->add_row($data);
    $table = $this->table->generate();

    $this->table->clear(); // 2.0.1以上では不要

    $this->table->add_row($other_data);
    $other_table = $this->table->generate();

make_columns($array = array(), $col_limit = 0) 一番上に戻る

 1つの配列データから、「 CI_Table 」クラス用にフォーマットされたテーブル構造の多次元配列を生成します。
 大量のデータからテーブル構造の多次元配列を簡単に生成することができます。

 第一引数にデータ配列を指定します。第二引数には、テーブルカラムの列数を指定します。

    $data = array();
    for ($i = 0; $i < 1000; $i++) {
        $table_data[] = $i;
    }

    $this->load->library('table');

    $table_data = $this>table->make_columns($data, 3);
    $heading = array( '会員ID', '名前', '年齢');
    $this->table->set_heading($heading);
    $this->table->generate($table_data);

 最後の行で足りないカラムデータが出た場合は、そのカラムのには「 &nbsp; 」が割り当てられます。

    <tr>
    <td>996</td><td>997</td><td>998</td></tr>
    <tr>
    <td>999</td><td>&nbsp;</td><td>&nbsp;</td></tr>