previous導入 (Previous) (Next) インストールnext

View this page in Last updated: Sun, 21 Jun 2009
English | Brazilian Portuguese | Chinese | Dutch | French | German | Hungarian | Japanese | Polish | Russian | Spanish | Turkish

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();
    ?>

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

    previous導入 (Previous) (Next) インストールnext

    Download Documentation Last updated: Sun, 21 Jun 2009
    Do you think that something on this page is wrong? Please file a bug report or add a note.
    User Notes:
    There are no user contributed notes for this page.