PHPマニュアル/PEARマニュアル | ユーザフォーラムで議論/質問 | マニュアル検索 | ハイライト | ハイライトオフ | ポータル | php spot

FAQ | JavaScript入門&応用&リファレンスなら「JavaScriptist」

  

FAQ

FAQ – よくある質問への答え

Description

これは、PEAR general mailing list およびその他のメーリングリストや掲示板での質問をもとにして作られたものです。

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 における並べ替えの問題は解決します。

忘却曲線を使ってこの知識を確実に記憶に残す

フォーラムで「FAQ」について話す
各種マニュアル: PHPマニュアル | PEARマニュアル | Smarty(英語)マニュアル | PHP-GTKマニュアル | FAQ」をGoogle検索
copyright © 1997-2024 PHP ドキュメント作成グループ(ライセンス). provided by php spot. マニュアル: