sfPropelPagerについて

symfonyは標準でsfPropelPagerというページャー機能を実装している。

www.symfony-project.org/cookbook/1_1/ja/pager

以下は、コーディング方法である。
コーディング方法については、以下の二つのパターンがある。

ここでは、Commentというテーブルが、MySQLに定義されていることを
前提とする。

1:パターン1

(1):actionに以下のコードを記述する。

$page = $this->getRequestParameter("page",1);//第2引数は初期値
$perpage = 10;//1ページに表示する件数

$c = new Criteria();
$c->addDescendingOrderByColumn(CommentPeer::CREATED_AT);
$this->pager = new sfPropelPager("Comment",$perpage);
$this->pager->setCriteria($c);
$this->pager->setPage($page);
$this->pager->init();
$this->comments = $this->pager->getResults();

(2):(プロジェクト名)/apps/front/templates/配下に_pager.phpという名前で、
  以下のコードを記述する。このコードは、パーシャルとして呼び出す。
------------------------------------------------------------------------------------
<!-- ページャーをつけるかどうかの判定 -->
<?php if ($pager->haveToPaginate()): ?>
    <div class="clr"></div>
    <div class="pager">
    <?php echo $pager->getNbResults() ?>件中 <?php echo $pager->getFirstIndice() ?> ~<?php echo $pager->getLastIndice() ?>件 表示<br>

    <?php
    $query = $sf_data->getRaw('query');
    ?>
    <ul>

    <!-- < と << を表示するかどうかの判定 -->
    <?php if ($pager->getPage() != $pager->getFirstPage()): ?>
        <li class="first"><span><?php echo link_to('<', $query."page=".$pager->getFirstPage()) ?></span></li>
        <li class="prev"><span><?php echo link_to('<<', $query.'page='.$pager->getPreviousPage()) ?></span></li>
    <?php else: ?>
        <li class="first"><span> &lt; </span></li>
        <li class="prev"><span> &lt;&lt; </span></li>
    <?php endif; ?>

    <?php $links = $pager->getLinks();?>

    <?php foreach ($links as $page): ?>
        <?php if ($page == $pager->getPage()):?>
            <li class="current"><span><?php echo $page;?></span></li>
        <?php else:?>
            <li><?php echo link_to($page, $query.'page='.$page) ?></li>
        <?php endif;?>
    <?php endforeach ?>

    <!-- > と >> を表示するかどうかの判定 -->
    <?php if ($pager->getPage() != $pager->getLastPage()): ?>
        <li class="next"><span><?php echo link_to('>>', $query.'page='.$pager->getNextPage()) ?></span></li>
        <li class="last"><span><?php echo link_to('>', $query.'page='.$pager->getLastPage()) ?></span></li>
    <?php else: ?>
        <li class="next"><span> &gt;&gt; </span></li>
        <li class="last"><span> &gt; </span></li>
    <?php endif;?>
    </ul>
    </div>
<?php endif ?>
-------------------------------------------------------------------------------

(3):テンプレートに、以下のコードを記述する。(パーシャル呼び出し)
<?php include_partial("global/pager", array( "pager" => $pager,
"query"=> $sf_context->getModuleName()."/".$sf_context->getActionName()."?"))?>

2:コーディング例2(パラメータを元にして条件指定)
     この例は、抽出条件があるときに有効。

(1):(プロジェクト名)//lib配下に、以下のファイルを設置する。
   ・MyPagerQueryHelper.php
   ・MyUtilityHelper.php

   上記は、parameter_to_query関数を使用するために設置する。

(2):actionに以下のコードを記述する。
$page = $this->getRequestParameter("page",1);//第2引数は初期値
$perpage
= 10;//1ページに表示する件数
$this
->query_parameters = array(
   
"module" => "default",
   
"action" => "index",
   
"order_by" => $this->getRequestParameter("order_by"),
);

$c
= new Criteria();
if($this->query_parameters["order_by"] != "asc"){
    $c
->addDescendingOrderByColumn(CommentPeer::CREATED_AT);
}else{
    $c
->addAscendingOrderByColumn(CommentPeer::CREATED_AT);
}
$this
->pager = new sfPropelPager("Comment",$perpage);
$this
->pager->setCriteria($c);
$this
->pager->setPage($page);
$this
->pager->init();
$this
->comments = $this->pager->getResults();

(3):パターン1の(2)の処理を行う。

(4):テンプレートに以下の内容を記述する。(パーシャルとして記述する)
<?php include_partial("global/pager", array( "pager" => $pager,
"query"=> parameter_to_query($sf_context->getModuleName(),
$sf_context
->getActionName(),
$query_parameters
)))?>

(5):必要であれば、以下の処理を記述する。(降順で並べる)
<a href="./?order_by=asc">created_atをascで並び替え</a>





スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

e.swan

Author:e.swan
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR