setRequestPrefix() メソッドを使用しましょう。ページ内の各 DataGrid は、 並べ替えやページ処理用の GET パラメータを処理する際に、 内部的にこのプレフィックスを使用します。例えばこのようにして使用します。
require_once 'Structures/DataGrid.php'; $datagrid1 = new Structures_DataGrid(); $datagrid2 = new Structures_DataGrid(); $datagrid1->setRequestPrefix('trade_'); $datagrid2->setRequestPrefix('stock_'); $datagrid1->bind('SELECT * FROM trade', array('dsn' => DSN)); $datagrid2->bind('SELECT * FROM stock', array('dsn' => DSN)); $datagrid1->render(); $datagrid2->render(); |
注意 setRequestPrefix() は、 bind() の前にコールする必要があります。
現時点では、効率を考慮すると次の 5 つのデータソースドライバがお勧めです。
DB_DataObject
DB_Table
DBQuery
MDB2
PDO
これら 4 つのドライバは、必要なレコードだけをデータベースから取得します。 例えば、ページあたりの行数を 15 レコードに制限している場合は、 (最大で) 15 レコードまでしか読み込みません。
その他のデータソースドライバも、もちろん使用可能です。 しかしそれらのドライバには、このように不必要なレコードの読み込み (あるいはメモリ内に保持し続ける) のを防ぐ機能は実装されていません (って言うか実装できません)。
新しいカラム用の フォーマッタ が必要です。これが行番号を保持します。このフォーマッタ関数への最初のパラメータには、 各ページ内での行番号を表す currRow という値が含まれます。 テーブル全体の中での現在の行番号を計算するには、 getCurrentRecordNumberStart() メソッドを使用するとよいでしょう。
次のコードは、フォーマッタ関数を定義してカラムを追加する方法を示したものです (# をカラムのラベルに指定し、値を右詰めにしています)。
function formatRowNumber($params, $recordNumberStart) { return $params['currRow'] + $recordNumberStart; } $datagrid->addColumn( new Structures_DataGrid_Column( '#', null, null, array('style' => 'text-align: right;'), null, 'formatRowNumber', $datagrid->getCurrentRecordNumberStart() )); |
4. Excel レンダラを使用しています。Excel ファイルでユーロ記号 (€) を使用したいのですが、単なる四角形や変な文字になってしまいます。 正しい € を使用するにはどうすればいいですか?
使用するエンコーディングを、例えば ISO-8859-15 などではなく Windows-1252 にする必要があります。
Structures_DataGrid におけるストリーミングのサポートは、 大規模なデータセットで使用することを想定したものです。 しかし、小規模なデータセットでも、効率を悪化させることなく使用可能です。
とはいえ、物事には常に例外がつきものです。 データベースから値を取得するデータソースドライバを使用している場合に、 結果の取得に長い時間のかかるクエリを実行しているのなら、 ストリーミングを使用すべきではありません。 だって、そんな複雑なクエリを何度も繰り返すことになったら、 さらに時間がかかってしまいますよね。
6. 以前のバージョンの Structures_DataGrid で $renderer->toHtml(); を使っていたのですが、最近のバージョンではこれは動作しないようです。 どのようにコードを修正したらいいですか?
単に HTML コードを出力したいだけなら、次のようにします。
$datagrid->render() |
$html = $datagrid->getOutput(); |
コンストラクタに、1 ページあたりの行数を渡してください。
$datagrid =& new Structures_DataGrid(10); // 1 ページあたり最大 10 行まで |
MDB2 の可搬性に関する設定 がデフォルトで有効となっていることが原因です。 MDB2_PORTABILITY_FIX_CASE の設定が CASE_LOWER となっており、 すべてのカラム名が小文字になってしまいます。 これを無効にするか、あるいは MDB2 の可搬性に関する設定をすべて無効にすると、 Structures_DataGrid における並べ替えの問題は解決します。