2011/04/20

symfonyのsfPropelPager

php講習 4/20

昨日、委員長から教えてもらった「徹底攻略」に記述のあったsfPropelPager
自宅で実装した。今日、午前中MisのPCに設定した。
sfPropelPagerは、一覧表などでデータが大きいとき、ページ毎のデータを
作ってくれるsymfony(Prople)の用意してくれたクラス。

午後
・ページャの設定方法練習
bbs2に適用するときの例
使用するとき使う処理はメールで2ファイル送付されています。
前提として、掲示板の投稿一覧が表示されていること。

・アクション(front/default/index)
<いままでの処理>
$this->comments = CommentPeer::doSelect($c);

<ページャでの処理>(この処理に置き換える)
// pager
// ページあたりのレコード数
$per_page =10;
$page = $this->getRequestParameter('page');
$c = new Criteria();
$c->addDescendingOrderByColumn(CommentPeer::CREATED_AT);

$pager = new sfPropelPager('Comment', $per_page);

$pager->setCriteria($c);
//  現在のページ
$pager->setPage($page) ;
$pager->init();

// print_r($pager);  // 内容確認
$this->pager = $pager;
$this->comments = $this->pager->getResults();


<$pagerオブジェクトの内容確認>

必要なものは既に揃っているので、呼び出すだけ。
    [peer_method_name:protected] => doSelect
    [peer_count_method_name:protected] => doCount
    [page:protected] => 1
    [maxPerPage:protected] => 10
    [lastPage:protected] => 4
    [nbResults:protected] => 35
    [class:protected] => Comment
    [tableName:protected] => comment
    [objects:protected] =>
    [cursor:protected] => 1
    [parameters:protected] => Array

(2)メールで送付されたphpファイルの置き場所
/bbs2/lib/helper/MyPagerQueryHelper.php
(helperフォルダは無ければ作る)
/bbs2/app/front/templates/_pager.php
(パーシャルなので置き場所はあえて書く必要がない?)

(3)テンプレートの変更(default/index)
・テンプレートの最初でヘルパーを呼ぶ
<?php use_helper('MyPagerQuery')?>

・投稿一覧のテンプレートで、一覧表示の前に、pagerパーシャル(_pager.php)を呼ぶ。
このときクエリパラメータも一緒に渡す。(パーシャルがページの切替になります)
今回は必要ないかもしれない部分が含まれていますが、このまま書く。
(一覧表で検索条件が必要になったときに使います)
<?php include_partial('global/pager', array('pager' => $pager,
'query' => parameter_to_query($sf_context->getModuleName(),
$sf_context->getActionName(), $query_parameters)));?>


・ページ処理以外の引数を渡す処理
(一覧表に検索条件のフォームがあった場合、アクションにパラメータを渡す必要がある)
parameter_to_query()   // helperに定義されている。

(4)CommentPeerに関数を追加
// 1ページのレコード数、現在のページ、パラメータ
static public function getPager($perpage, $page, $parameters)
{
 $c = new Criteria() ;
 //  検索条件に入力があれば、Criteriaに追加
 if ($parameters["keyword"] != '' ) {
  $c->add(self::CONTENT, "%".$parameters["keyword"]."%",
  Criteria::LIKE) ;
 }

 $pager = new sfPropelPager('Comment', $perpage);
 $pager->setCriteria($c);
 //  現在のページ
 $pager->setPage($page) ;
 $pager->init();

 return $pager;
}

・以上で、掲示板のデフォルト画面のページャができました。
・なお、興味のある人はプログラムを追って下さい、とのことです。
クラスのソースは以下にあります。
/usr/share/pear/symfony/addon/sfPager.class.php
/usr/share/pear/symfony/addon/propel/sfPropelPager.class.php

・課題に教わったpagerを実装、1時間以上かかった。

・ログイン、セキュリティ設定を実装

0 件のコメント:

コメントを投稿