FAQ
FAQ – よくある質問への答え
Structures_DataGrid FAQ
-
HTML_Table レンダラを使用しています。
同じページ内で複数のグリッドを使用するにはどうしたらいいですか?
-
setRequestPrefix()
メソッドを使用しましょう。ページ内の各 DataGrid は、
並べ替えやページ処理用の GET パラメータを処理する際に、
内部的にこのプレフィックスを使用します。例えばこのようにして使用します。
<?php
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()
メソッドを使用するとよいでしょう。
次のコードは、フォーマッタ関数を定義してカラムを追加する方法を示したものです
(# をカラムのラベルに指定し、値を右詰めにしています)。
<?php
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()
));
?>
-
Excel レンダラを使用しています。Excel ファイルでユーロ記号 (?)
を使用したいのですが、単なる四角形や変な文字になってしまいます。
正しい ? を使用するにはどうすればいいですか?
-
使用するエンコーディングを、例えば ISO-8859-15 などではなく
Windows-1252 にする必要があります。
-
ストリーミング機能ってイケてますよね。なぜデフォルトで有効にしないんですか?
-
Structures_DataGrid におけるストリーミングのサポートは、
大規模なデータセットで使用することを想定したものです。
しかし、小規模なデータセットでも、効率を悪化させることなく使用可能です。
とはいえ、物事には常に例外がつきものです。
データベースから値を取得するデータソースドライバを使用している場合に、
結果の取得に長い時間のかかるクエリを実行しているのなら、
ストリーミングを使用すべきではありません。
だって、そんな複雑なクエリを何度も繰り返すことになったら、
さらに時間がかかってしまいますよね。
-
以前のバージョンの Structures_DataGrid で $renderer->toHtml();
を使っていたのですが、最近のバージョンではこれは動作しないようです。
どのようにコードを修正したらいいですか?
-
単に HTML コードを出力したいだけなら、次のようにします。
<?php
$datagrid->render()
?>
出来上がった HTML コードをどこかに取得してテンプレートなどで使用したい場合は、
次のようにします。
<?php
$html = $datagrid->getOutput();
?>
-
すべての行が 1 ページで表示されてしまいます。
ページ分けするにはどうしたらいいですか?
-
コンストラクタに、1 ページあたりの行数を渡してください。
<?php
$datagrid =& new Structures_DataGrid(10); // 1 ページあたり最大 10 行まで
?>
-
カラム名を大文字にしていると、MDB2
データソースドライバで並べ替え機能が動作しません。
なぜでしょう?
-
MDB2
の可搬性に関する設定 がデフォルトで有効となっていることが原因です。
MDB2_PORTABILITY_FIX_CASE の設定が
CASE_LOWER となっており、
すべてのカラム名が小文字になってしまいます。
これを無効にするか、あるいは MDB2 の可搬性に関する設定をすべて無効にすると、
Structures_DataGrid における並べ替えの問題は解決します。