Zend_paginator не изменяет значение perPage, когда есть некоторые параметры GET - PullRequest
0 голосов
/ 06 октября 2011

Отлично работает, когда я на первой странице результатов - я могу отобразить количество результатов, которое мне нужно.Но когда я нахожусь на другой странице, количество результатов не может быть изменено.Почему это так?

И когда я, например, на 3 странице, и я показываю 12 на странице, и я пытаюсь изменить его на 60, в конце ссылки у меня есть:

perPage/12/submitPagin/Zastosuj/page/3?perPage=60&submitPagin=Zastosuj

Есть идеи, кто-нибудь?:)

public listAction(){        
(...)
    $params = $this->_parseSearchParams( $this->getRequest()->getParams() );
    $searchForm = new ListIndexForm( );
    $searchForm->setAction( '' );
    $searchForm->setDefaults( $params );

    $this->view->searchForm = $searchForm;
    $this->view->params = $params;

    $auth = Zend_Auth::getInstance();

    $sql = 'SELECT * FROM Images  order by created desc LIMIT 500';
    $result = $db->fetchAll($sql);
    $this->view->images = $result;

    $page=$this->_getParam('page',1);
    $paginator = Zend_Paginator::factory($result);

    $paginator->setCurrentPageNumber( $this->getRequest()->getParam( 'page', 1 ) );

    $paginator->setItemCountPerPage( $params[ 'perPage' ] );

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

моя функция для разбора параметров:

private function _parseSearchParams ( $params )
{
    if ( ! isset( $params[ 'perPage' ] ) ) {
        $params[ 'perPage' ] = 24;
    }

    foreach ( $params as $key => $value ) {
        if ( is_null( $value ) or $value == '' ) {
            unset( $params[ $key ] );
            continue;
        }


        switch ( $key ) {
            case 'tags':
            case 'im':
            case 'module':
            case 'submitupdate':
            case 'controller':
            case 'action':
            case 'submit':
                unset( $params[ $key ] );
                continue;
            break;

        }
    }

    return $params;
}

Моя форма для изменения количества результатов на странице:

class ListIndexForm extends Zend_Form {
public function __construct($options = null) {
    parent::__construct ( $options );
    $this->setMethod ( 'GET' );


    $perPageValues = array(
        6    => 6,
        12    => 12,
        18    => 18,
        24   => 24,
        30   => 30,
        60   => 60,
        900  => 90,
        150  => 150,
        300  => 300,
        600 => 600,
    );
    $this->addElement ( 'Select', 'perPage', 
       array (
          'filters'           => array(
            'Digits'
          ),           
          'label'             => 'Obrazków na stronę',
          'MultiOptions'      => $perPageValues,
          'value'             => 24,
       )
    );

    $this->addElement ( 'Submit', 'submitPagin',
    array (
          'label' => 'Zastosuj',
      ) 
    );

}

}

view list.phtml:

(...)
<?=$this->searchForm;?>
<?foreach ($this->paginator as $row):?>
<?=$row['id']?>
<?enforeach;?>
<?= $this->paginationControl($this->paginator, 'Sliding', '../helpers/searchpagination.phtml', array( 'urlParams' => $this->params) ); ?>

searchpagination.phtml helper:

    <?php
    $urlParams = isset($this->urlParams) ? $this->urlParams : array();
?>

<?php if ($this->pageCount): ?>
<div class="paginationControl">
<!-- Previous page link -->
<?php if (isset($this->previous)): ?>
<a href="<?= $this->url( array_merge( $urlParams, array('page' => $this->previous) ) ); ?>">
&lt; Nowsze
</a> |
<?php else: ?>
<span class="disabled">&lt; Nowsze </span> |
<?php endif; ?>

<!-- Numbered page links -->
<?php foreach ($this->pagesInRange as $page): ?>
<?php if ($page != $this->current): ?>
<a href="<?= $this->url( array_merge( $urlParams,  array('page' => $page))); ?>">
    <?= $page; ?>
</a> |
<?php else: ?>
<?= $page; ?> |
<?php endif; ?>
<?php endforeach; ?>

<!-- Next page link -->
<?php if (isset($this->next)): ?>
<a href="<?= $this->url( array_merge( $urlParams,  array('page' => $this->next)) ); ?>">
Starsze &gt;
</a>
<?php else: ?>
<span class="disabled">Starsze &gt;</span>
<?php endif; ?>
</div>
<?php endif; ?>

1 Ответ

0 голосов
/ 13 марта 2012

Похоже, вы указали параметр perPage дважды.(Zend Framework видит оба параметра как параметры GET)

perPage / 12 / submitPagin / Zastosuj / page / 3? perPage = 60 & submitPagin = Zastosuj

Что произойдет, если вы измените первый на 60?Я понимаю, что это может вызвать проблемы для вашей структуры URL.

...