初めてのシステムと日記

システムも日記も初めてです。

Pagerの使い方

http://www.yiiframework.com/

普段はPHPフレームワークEthnaを使っていますが、最近Yiiを触り始めました。

他のフレームワークよりもかなり高速なことで評判なようです。


実際の使い方については公式ガイドや参考になるブログなどがあるため割愛します。

http://www.yiiframework.com/doc/guide/ja/index

http://d.hatena.ne.jp/nazone/20081205/p1

http://labo.shimi-zoo.com/post/tag/yii


今回はPagerの使い方について書きます。調べた限り、

日本語で参考になるものがなかった && 英語ドキュメント見たけど少し分かりにくかった

のでメモです。


controller

CActiveDataProviderを宣言してrenderに追加します。

<?php

class DefaultController extends Controller
{
    public function actionIndex()
    {
        // クエリの条件設定
        // condition:WHERE句などの条件
        // params:conditionで使用するパラメータ
        // order:並び替え
        $criteria=new CDbCriteria(array(
            'condition'=>'deleted_at IS NULL AND updated_at > :updated_at',
            'params'=>array(':updated_at'=>'2010-06-10'),
            'order'=>'updated_at DESC',
        ));
        
        // Pager設定
        // TestTable:DBのテーブルを指定
        // criteria:クエリ条件
        // pagination:Pagerの表示件数などの設定
        $dataProvider = new CActiveDataProvider('TestTable', array(
                        'criteria'=>$criteria,
                        'pagination'=>array(
                                'pageSize'=>10,
                        ),
                ));
        $this->render(
            'index'
            , array('dataProvider'=>$dataProvider)
        );
    }
}


views

Pagerを表示したい部分でwidgetを呼び出します。

view/index.php

<h4>ページャーテスト</h4>

<table>
    <tr>
        <td>ID</td>
        <td>名前</td>
        <td>作成日時</td>
        <td>更新日時</td>
    </tr>
    // pager表示
    // dataProvider:pagerのデータ
    // itemView:pagerを表示するファイル名指定
    // summaryText:件数表示指定
    // emptyText:表示データがない場合の文言
    // template:件数、ナビゲーション、dataの表示順序指定(たぶん。。)
    <?php $this->widget('zii.widgets.CListView', array(
        'dataProvider'=>$dataProvider,
        'itemView'=> 'index_view',
        'summaryText'=> '[{count}件中 {start} - {end}件表示]',
        'emptyText'=> '登録されていません。',
        'template'=>"{summary}\n{items}\n{pager}",
    )); ?>
</table>

itemViewに関しては$thisを指定すれば同ファイル上でpager表示が出来るっぽいですが、

試したところエラーが吐き出されるばかりなので別ファイルにしました。

templateはおそらく表示順序を変更するのに使われると思いますが思いどおりにいかない。。


続いてpager表示側。$dataに$dataProviderで取ってきたクエリ結果が入っています。

view/index_view.php

    <tr>
        <td><?php echo $data->id; ?></td>
        <td><?php echo $data->name; ?></td>
        <td><?php echo $data->created_at; ?></td>
        <td><?php echo $data->updated_at; ?></td>
    </tr>


まだまだ、ナビゲーションの文言設定やtemplateの設定など分からない箇所がありますが、

これでひとまずPagerが出来ます。