2013-03-13 4 views
2

Мне нужны некоторые концептуальные рекомендации с разбивкой по страницам Zend Framework.Zend_Paginator позволяет пользователям выбирать количество строк на страницу

Я использую Zend_Paginator, который работает как шарм, из моего представления, я бы хотел, чтобы пользователь селектора выбирал, сколько строк на каждую страницу (ей) он хочет, что будет устанавливать параметр setItemCountPerPage(). В настоящее время, у меня есть жёстко выбрать элемент формы (который вызывает изменение URL с JQuery), на мой взгляд, что выглядит следующим образом:

<select id="rpp" name="rpp"> 
     <option value="/goods">--</option> 
     <option value="/goods/rpp/2">[2 for dev]</option> 
     <option value="/goods/rpp/5">5 <?php echo $this->translate('Rows per page') ?></option> 
     <option value="/goods/rpp/15">15 <?php echo $this->translate('Rows per page') ?></option> 
     <option value="/goods/rpp/25">25 <?php echo $this->translate('Rows per page') ?></option> 
     <option value="/goods/rpp/50">50 <?php echo $this->translate('Rows per page') ?></option> 
     <option value="/goods/rpp/100">100 <?php echo $this->translate('Rows per page') ?> </option> 
    </select> 

Это работает, но я должен был бы это в более чем одной точки зрения , так что я пытался сделать что-то в частичном виде с чем-то вроде этого:

... 
<option value="<?php echo $this->userAgent()->getServerValue('request_uri'); ?>/rpp/2">[2 for dev]</option> 
... 

но заканчивается маршрутизация проблемы в некоторых ситуациях.

Что было бы хорошей стратегией развития, самой общей и пригодной для повторного использования для такой возможности, позволяющей пользователю выбирать, сколько строк на каждую страницу (и) он хочет.

Спасибо за ваши советы.

f.

+0

есть конкретная проблема маршрутизации вы хотите решить? если есть, PLZ добавить объяснение ваш вопрос. – shampoo

+0

Это не проблема, но если я использую что-то вроде « userAgent() -> getServerValue ('request_uri');?>/Rpp/2" как значения для элемента select, это неправильно (правильно, но не поведение, которое я хочу), когда пользователь меняет количество строк на страницу более одного раза с добавлением параметров, заканчивая чем-то вроде этого в URL: http: // my-app/goods/rpp/10/rpp/15/rpp/25 .... – feub

ответ

2

Вы можете использовать метод и значение Zend_Paginator::setDefaultItemCountPerPage, сохраненные в сеансе в вашем классе Bootstrap, для установки элементов на странице. Если вы хотите изменить его позже на каком-то этапе. Просто присвойте переменной значение переменной. Например (не тестировалось)

protected function _initPagination() 
{ 
    $session = new Zend_Session_Namespace('default'); 
    $itemCountPerPage = (isset($session->itemCountPerPage) 
    ? $session->itemCountPerPage : 5); 

    Zend_Paginator::setDefaultItemCountPerPage($itemCountPerPage); 
} 

Позже где-то в своем действии:

public function itemCountPerPageAction() 
{ 
    $session = new Zend_Session_Namespace('default'); 
    $session->itemCountPerPage = $this->_getParam('itemCountPerPage'); 
    $this->_helper->redirector->gotoUrlAndExit($this->_request->getServer("HTTP_REFERER")); 
} 
+1

Спасибо @ b.b3rn4rd, но мой вопрос больше касается представления, частичного представления (или из помощника вида?), чтобы избежать рефакторинга элемента select для каждой страницы, так что мне не нужно постоянно записывать такие вещи, как

+0

@feub Извините, я не расширил свой ответ, я думал, что это может быть альтернативное решение, чтобы избежать возиться с URL-адресом. В принципе идея состоит в том, чтобы иметь отдельное действие для установки 'itemCountPerPage', вероятно, когда пользователь выбирает параметр в раскрывающемся списке ... –

Смежные вопросы