2

Zend_Paginatorを使用して検索結果をページ分割したい。そこで、データをpaginatorインスタンスに渡します。

$paginator = new Zend_Paginator ( 
           new Zend_Paginator_Adapter_DbSelect ( $data ) 
);

データはこの方法で返されます

public function getData($idArray){
        $db = Zend_Db_Table::getDefaultAdapter();
        $selectProgramme = new Zend_Db_Select($db);

        $selectProgramme->from('programme')
                            ->order('id DESC')
                            ->where('id IN(?)', $idArray);

        return $selectProgramme;        
}

$idArray私の検索実装によって提供されます。これはすべてうまく機能し、正しいデータとページ付けリンクが表示されます。

ただし、ページ分割リンクが無効であるため、結果をページ分割できません。したがって、通常のページネーションには次のリンクがあります。

mysite.de/home/index/page/1

検索で私は今持っています

mysite.de/home/search/page/1

これは動作しません。検索ページネーションを実装する方法について何か提案はありますか?

編集:HomeControllerインデックスアクションと検索アクションの2つのアクションがあります。IndexActionはすべてのデータを表示し、ページを移動できます。

public function indexAction(){
    //...
    $paginator = new Zend_Paginator(
                 new Zend_Paginator_Adapter_DbSelect($data)
    );
    $paginator->setItemCountPerPage(16)
              ->setPageRange(20)
              ->setCurrentPageNumber($this->_getParam('page', 1));

    $this->view->data = $paginator;
}

searchActionsは、検索プロセスを処理します。

public function searchAction(){
    $response = $solr->search($this->getRequest()->getParam('search', null));
    //...if items found get the data exactly the same way as in the 
    // index action, using Zend_Paginator_Adapter_DbSelect
    $paginator = new Zend_Paginator(
                 new Zend_Paginator_Adapter_DbSelect($data)
    );
    $paginator->setItemCountPerPage(16)
              ->setPageRange(20)
              ->setCurrentPageNumber($this->_getParam('page', 1));

    $this->view->data = $paginator;
}

したがって、検索アクションで見られるように、ページ付けするときに検索プロセスに問題があります。検索するかページ付けするかをどうにかして決める必要があります。それについて何か提案はありますか?

4

4 に答える 4

2

検索には検索パラメーターのページ付けが必要なため、ページ付けするときに検索パラメーターがnullになるため、ページ付けは失敗します。

$sreq = $this->getRequest()->getParam('search', null);

したがって、検索をページ分割するたびにこのパラメーターを渡す必要があります。私はこれを使用して解決しZend_Sessionます:

//get search param
$sreq = $this->getRequest()->getParam('search', null);
//store search param in session for pagination
$search = new Zend_Session_Namespace('PSearch');

if($sreq != null){
    $search->psearch = $sreq;
}else{
   $sreq = $search->psearch;
}

これはsearchActionの上部にあり、すべてが機能します。

于 2011-03-31T19:50:27.797 に答える
1

よくわかりませんが、URLのページパラメータがPaginatorに到達していないという問題がありますか?たとえば、どのページを表示していても、常に最初の20件の結果が表示されますか?

もしそうなら、あなたはページネーターのページを手動で設定しようとしましたか?

$page = $this->_getParam('page', 1);
$paginator->setCurrentPageNumber($page);
于 2011-03-30T19:26:50.583 に答える
1
public function search()

ここでタイプミスをしていませんか?する必要があります

public function searchAction()
于 2011-03-30T20:07:43.873 に答える
0

検索データを入れますが、 (nullである)$responseを使用してpaginatorインスタンスを作成します$data

于 2011-03-31T12:54:45.747 に答える