HTMLテーブルクラス

テーブルクラスは、配列またはデータベースの結果セットからHTMLテーブルを自動生成できるようにするメソッドを提供します。

テーブルクラスの使用

クラスの初期化

テーブルクラスはサービスとして提供されず、たとえば「通常どおり」インスタンス化する必要があります。

<?php

$table = new \CodeIgniter\View\Table();

多次元配列からテーブルを作成する方法を示す例を次に示します。最初の配列インデックスがテーブル見出しになることに注意してください(または、以下の関数リファレンスで説明されているsetHeading()メソッドを使用して、独自の見出しを設定することもできます)。

<?php

$table = new \CodeIgniter\View\Table();

$data = [
    ['Name', 'Color', 'Size'],
    ['Fred', 'Blue', 'Small'],
    ['Mary', 'Red', 'Large'],
    ['John', 'Green', 'Medium'],
];

echo $table->generate($data);

データベースクエリの結果から作成されたテーブルの例を次に示します。テーブルクラスは、テーブル名に基づいて見出しを自動的に生成します(または、以下のクラスリファレンスで説明されているsetHeading()メソッドを使用して、独自の見出しを設定することもできます)。

<?php

$table = new \CodeIgniter\View\Table();

$query = $db->query('SELECT * FROM my_table');

echo $table->generate($query);

個別のパラメーターを使用してテーブルを作成する方法を示す例を次に示します。

<?php

$table = new \CodeIgniter\View\Table();

$table->setHeading('Name', 'Color', 'Size');

$table->addRow('Fred', 'Blue', 'Small');
$table->addRow('Mary', 'Red', 'Large');
$table->addRow('John', 'Green', 'Medium');

echo $table->generate();

同じ例を次に示します。ただし、個々のパラメーターの代わりに配列が使用されています。

<?php

$table = new \CodeIgniter\View\Table();

$table->setHeading(['Name', 'Color', 'Size']);

$table->addRow(['Fred', 'Blue', 'Small']);
$table->addRow(['Mary', 'Red', 'Large']);
$table->addRow(['John', 'Green', 'Medium']);

echo $table->generate();

テーブルの外観の変更

テーブルクラスを使用すると、レイアウトのデザインを指定できるテーブルテンプレートを設定できます。テンプレートのプロトタイプを次に示します。

<?php

$template = [
    '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>',

    'tfoot_open'  => '<tfoot>',
    'tfoot_close' => '</tfoot>',

    'footing_row_start'  => '<tr>',
    'footing_row_end'    => '</tr>',
    'footing_cell_start' => '<td>',
    'footing_cell_end'   => '</td>',

    '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>',
];

$table->setTemplate($template);

注意

テンプレートには、2組の「行」ブロックがあることに気付くでしょう。これらを使用すると、行データの反復ごとに交互に表示される行の色やデザイン要素を作成できます。

完全なテンプレートを送信する必要はありません。レイアウトの一部のみを変更する必要がある場合は、それらの要素を送信するだけで済みます。この例では、テーブルの開始タグのみが変更されています。

<?php

$template = [
    'table_open' => '<table border="1" cellpadding="2" cellspacing="1" class="mytable">',
];

$table->setTemplate($template);

テンプレート設定の配列をテーブルコンストラクターに渡すことで、これらのデフォルトを設定することもできます。

<?php

$customSettings = [
    'table_open' => '<table border="1" cellpadding="2" cellspacing="1" class="mytable">',
];

$table = new \CodeIgniter\View\Table($customSettings);

行と見出しの同期

バージョン4.4.0で新しく追加されました。

setSyncRowsWithHeading(true)メソッドを使用すると、連想配列がパラメーターとして使用された場合、各データ値がsetHeading()で定義されたのと同じ列に配置されます。これは、順序が気に入らないREST APIを介してロードされたデータや、APIが多すぎるデータを返した場合に特に役立ちます。

データ行に見出しに存在しないキーが含まれている場合、その値はフィルタリングされます。逆に、データ行に見出しにリストされているキーがない場合は、空のセルがその場所に配置されます。

<?php

$table = new \CodeIgniter\View\Table();

$table->setHeading(['name' => 'Name', 'color' => 'Color', 'size' => 'Size'])
    ->setSyncRowsWithHeading(true)
    ->addRow(['color' => 'Blue', 'name' => 'Fred', 'size' => 'Small'])
    ->addRow(['size' => 'Large', 'age' => '24', 'name' => 'Mary'])
    ->addRow(['color' => 'Green']);

echo $table->generate();
?>

<!-- Generates a table with this prototype: -->
<table border="0" cellpadding="4" cellspacing="0">
    <thead>
        <tr>
            <th>Name</th>
            <th>Color</th>
            <th>Size</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Fred</td>
            <td>Blue</td>
            <td>Small</td>
        </tr>
        <tr>
            <td>Mary</td>
            <td></td>
            <td>Large</td>
        </tr>
        <tr>
            <td></td>
            <td>Green</td>
            <td></td>
        </tr>
    </tbody>
</table>

重要

列の再配置が行われるaddRow([...])を介して行を追加する前に、setSyncRowsWithHeading(true)setHeading([...])を呼び出す必要があります。

generate()への入力として配列を使用すると、同じ結果が得られます。

<?php

$data = [
    [
        'color' => 'Blue',
        'name'  => 'Fred',
        'size'  => 'Small',
    ],
    [
        'size' => 'Large',
        'age'  => '24',
        'name' => 'Mary',
    ],
    [
        'color' => 'Green',
    ],
];

$table = new \CodeIgniter\View\Table();

$table->setHeading(['name' => 'Name', 'color' => 'Color', 'size' => 'Size'])
    ->setSyncRowsWithHeading(true);

echo $table->generate($data);

クラスリファレンス

class CodeIgniter\View\Table
$function = null

すべてのセルデータに適用されるネイティブPHP関数または有効な関数配列オブジェクトを指定できます。

<?php

$table = new \CodeIgniter\View\Table();

$table->setHeading('Name', 'Color', 'Size');
$table->addRow('Fred', '<strong>Blue</strong>', 'Small');

$table->function = 'htmlspecialchars';
echo $table->generate();

上記の例では、すべてのセルデータはPHPのhtmlspecialchars()関数を介して実行され、次のようになります。

<td>Fred</td><td>&lt;strong&gt;Blue&lt;/strong&gt;</td><td>Small</td>
generate([$tableData = null])
パラメーター:
  • $tableData (mixed) – テーブル行に入力するデータ

戻り値:

HTMLテーブル

戻り値の型:

string

生成されたテーブルを含む文字列を返します。オプションのパラメーターを受け入れます。これは配列またはデータベース結果オブジェクトにすることができます。

setCaption($caption)
パラメーター:
  • $caption (string) – テーブルキャプション

戻り値:

テーブルインスタンス(メソッドチェーン)

戻り値の型:

テーブル

テーブルにキャプションを追加できます。

<?php

$table->setCaption('Colors');
setHeading([$args = [][, ...]])
パラメーター:
  • $args (mixed) – テーブル列のタイトルを含む配列または複数の文字列

戻り値:

テーブルインスタンス(メソッドチェーン)

戻り値の型:

テーブル

テーブルの見出しを設定できます。配列または個別のパラメーターを送信できます。

<?php

$table->setHeading('Name', 'Color', 'Size'); // or

$table->setHeading(['Name', 'Color', 'Size']);
setFooting([$args = [][, ...]])
パラメーター:
  • $args (mixed) – テーブルのフッター値を含む配列または複数の文字列

戻り値:

テーブルインスタンス(メソッドチェーン)

戻り値の型:

テーブル

テーブルのフッターを設定できます。配列または個別のパラメーターを送信できます。

<?php

$table->setFooting('Subtotal', $subtotal, $notes); // or

$table->setFooting(['Subtotal', $subtotal, $notes]);
addRow([$args = [][, ...]])
パラメーター:
  • $args (mixed) – 行の値を含む配列または複数の文字列

戻り値:

テーブルインスタンス(メソッドチェーン)

戻り値の型:

テーブル

テーブルに行を追加できます。配列または個別のパラメーターを送信できます。

<?php

$table->addRow('Blue', 'Red', 'Green'); // or

$table->addRow(['Blue', 'Red', 'Green']);

個々のセルのタグ属性を設定したい場合は、そのセルに連想配列を使用できます。連想配列のキー data はセルのデータを定義します。その他の key => val ペアは、key='val' 属性としてタグに追加されます。

<?php

$cell = ['data' => 'Blue', 'class' => 'highlight', 'colspan' => 2];
$table->addRow($cell, 'Red', 'Green');

?>

<!-- Generates: -->
<td class='highlight' colspan='2'>Blue</td><td>Red</td><td>Green</td>
makeColumns([$array = [][, $columnLimit = 0]])
パラメーター:
  • $array (array) – 複数の行のデータを含む配列

  • $columnLimit (int) – テーブルの列数

戻り値:

HTMLテーブルの列の配列

戻り値の型:

array

このメソッドは、1次元配列を入力として受け取り、必要な列数に等しい深さを持つ多次元配列を作成します。これにより、多くの要素を持つ単一の配列を、固定列数を持つテーブルに表示できます。この例を考えてください。

<?php

$list = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve'];

$newList = $table->makeColumns($list, 3);

$table->generate($newList);

?>

<!-- Generates a table with this prototype: -->
<table border="0" cellpadding="4" cellspacing="0">
    <tr>
        <td>one</td>
        <td>two</td>
        <td>three</td>
    </tr>
    <tr>
        <td>four</td>
        <td>five</td>
        <td>six</td>
    </tr>
    <tr>
        <td>seven</td>
        <td>eight</td>
        <td>nine</td>
    </tr>
    <tr>
        <td>ten</td>
        <td>eleven</td>
        <td>twelve</td>
    </tr>
</table>
setTemplate($template)
パラメーター:
  • $template (array) – テンプレート値を含む連想配列

戻り値:

成功時にtrue、失敗時にfalse

戻り値の型:

bool

テンプレートを設定できます。完全なテンプレートまたは部分的なテンプレートを送信できます。

<?php

$template = [
    'table_open' => '<table border="1" cellpadding="2" cellspacing="1" class="mytable">',
];

$table->setTemplate($template);
setEmpty($value)
パラメーター:
  • $value (mixed) – 空のセルに入れる値

戻り値:

テーブルインスタンス(メソッドチェーン)

戻り値の型:

テーブル

空のテーブルセルで使用するデフォルト値を設定できます。たとえば、改行なしスペースを設定できます。

<?php

$table->setEmpty('&nbsp;');
clear()
戻り値:

テーブルインスタンス(メソッドチェーン)

戻り値の型:

テーブル

テーブルの見出し、行データ、およびキャプションをクリアできます。異なるデータを持つ複数のテーブルを表示する必要がある場合は、各テーブルの生成後にこのメソッドを呼び出して、前のテーブル情報をクリアする必要があります。

<?php

$table = new \CodeIgniter\View\Table();

$table->setCaption('Preferences')
    ->setHeading('Name', 'Color', 'Size')
    ->addRow('Fred', 'Blue', 'Small')
    ->addRow('Mary', 'Red', 'Large')
    ->addRow('John', 'Green', 'Medium');

echo $table->generate();

$table->clear();

$table->setCaption('Shipping')
    ->setHeading('Name', 'Day', 'Delivery')
    ->addRow('Fred', 'Wednesday', 'Express')
    ->addRow('Mary', 'Monday', 'Air')
    ->addRow('John', 'Saturday', 'Overnight');

echo $table->generate();
setSyncRowsWithHeading(bool $orderByKey)
戻り値:

テーブルインスタンス(メソッドチェーン)

戻り値の型:

テーブル

各行データのキーを見出しキーで順序付けることができます。これにより、正しい列にデータが表示されるように、より細かく制御できます。最初のaddRow()メソッドを呼び出す前に、この値を設定してください。