Как повторно использовать партиал paginationControl при передаче разных параметров каждому экземпляру

Я использую партиал paginationControl и передаю параметры через 4-й параметр, чтобы я мог разбивать на страницы «отфильтрованные» результаты. Это работает нормально, но я хотел бы иметь возможность использовать один и тот же партиал для всех экземпляров разбивки на страницы, даже если они будут использовать разные параметры.

например "свойства" фильтруются по нет. спальни

давая 4-й параметр в экземпляре элемента управления разбиением на страницы в скрипте просмотра ...

array('beds' => '$beds')

и используется в частичном ...

$this->beds

тогда как «клиенты» фильтруются по местоположению

давая 4-й параметр в экземпляре элемента управления разбиением на страницы в скрипте просмотра ...

array('location' => '$location')

и используется в частичном ...

$this->location

Как лучше всего этого добиться? Я мог бы получить доступ к 4-му параметру как к массиву ключей и значений, перебрать массив и построить аргументы для вспомогательной функции просмотра URL-адреса в частичном элементе paginationControl. ЕСЛИ я мог бы решить, как получить доступ к массиву. Но, возможно, в любом случае это не тот подход ...

Спасибо.

РЕДАКТИРОВАТЬ:

Вот часть, которую я использую для вывода элементов управления разбиением на страницы, как указано в комментариях.

    <div class="pagination">
      <div class="pages">

          <!-- First page link -->
             <?php if (isset($this->previous)): ?>
                <a href="<?= $this->url() . "?" . http_build_query(array('group_id' => $this->group_id, 'page' => $this->first)); ?>">Start</a>
          <?php else: ?>
                  <span class="disabled">Start</span>
          <?php endif; ?>

          <!-- Previous page link -->
          <?php if (isset($this->previous)): ?>
                <a href="<?= $this->url() . "?" . http_build_query(array('group_id' => $this->group_id, 'page' => $this->previous)); ?>">Previous</a>
          <?php else: ?>
              <span class="disabled">Previous</span>
          <?php endif; ?>
          <!-- Numbered page links -->

          <?php foreach ($this->pagesInRange as $page): ?>
              <?php if ($page != $this->current): ?>
                  <a href="<?= $this->url() . "?" . http_build_query(array('group_id' => $this->group_id, 'page' => $page)); ?>"><?= $page; ?></a>
              <?php else: ?>
                  <span class="current"><?= $page; ?></span>
              <?php endif; ?>
          <?php endforeach; ?>

          <!-- Next page link -->
          <?php if (isset($this->next)): ?>
                <a href="<?= $this->url() . "?" . http_build_query(array('group_id' => $this->group_id, 'page' => $this->next)); ?>">Next</a>
          <?php else: ?>
               <span class="disabled">Next</span>
          <?php endif; ?>

          <!-- Last page link -->
          <?php if (isset($this->next)): ?>
                <a href="<?= $this->url() . "?" . http_build_query(array('group_id' => $this->group_id, 'page' => $this->last)); ?>">End</a>
          <?php else: ?>
              <span class="disabled">End</span>
          <?php endif; ?>
      </div>
    </div>

ОБНОВЛЕНИЕ:

Я принял решение RockyFords, потому что оно отвечает на основной вопрос о доступе к параметрам, переданным через 4-й параметр при создании экземпляра элементов управления разбиением на страницы. Тем не менее, я включаю здесь свою полную финальную часть на тот случай, если другой читатель захочет, чтобы результирующие параметры сгенерировали строку запроса.

<div class="pagination">
  <div class="pages">
 <?php 
   $params = Zend_Controller_Front::getInstance()->getRequest()->getParams();
   unset($params['controller']);
   unset($params['action']);
 ?>


  <?= $this->first ?> 
  <!-- First page link -->
  <?php if (isset($this->previous)): ?>
        <a href="<?= $this->url() . "?" . http_build_query(array_merge($params , array('page' => $this->first))); ?>">Start</a>
  <?php else: ?>
        <span class="disabled">Start</span>
  <?php endif; ?>

  <!-- Previous page link -->
  <?php if (isset($this->previous)): ?>
        <a href="<?= $this->url() . "?" . http_build_query(array_merge($params , array('page' => $this->previous))); ?>">Previous</a>
  <?php else: ?>
       <span class="disabled">Previous</span>
  <?php endif; ?>
  <!-- Numbered page links -->

  <?php foreach ($this->pagesInRange as $page): ?>
      <?php if ($page != $this->current): ?>
          <a href="<?= $this->url() . "?" . http_build_query(array_merge($params , array('page' => $page))); ?>"><?= $page; ?></a>
      <?php else: ?>
          <span class="current"><?= $page; ?></span>
      <?php endif; ?>
  <?php endforeach; ?>

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

  <!-- Last page link -->
  <?php if (isset($this->next)): ?>
        <a href="<?= $this->url() . "?" . http_build_query(array_merge($params , array('page' => $this->last))); ?>">End</a>
  <?php else: ?>
      <span class="disabled">End</span>
  <?php endif; ?>


person NaNuk    schedule 23.07.2012    source источник
comment
Помогло бы, если бы вы показали частичное. Трудно предложить помощь, не разбираясь в реализации.   -  person RockyFord    schedule 24.07.2012
comment
Частичный текст в основном взят из руководства Zend, но я все равно включу его.   -  person NaNuk    schedule 24.07.2012
comment
Я обнаружил ошибку :) ваш первый оператор if () для ссылки «Пуск», вероятно, должен проверять isset($this->first) вместо isset($this->previous)   -  person RockyFord    schedule 25.07.2012
comment
Параметр group_id вызывает у вас проблемы? Это ваш 4-й параметр?   -  person RockyFord    schedule 25.07.2012
comment
@RockyFord re: error, я только что просмотрел руководство и протестировал, а $ this- ›first и $ this-› last возвращают номер страницы. Этот код полагается на то, что $ this- ›previous и $ this-› next будут неопределенными, если ни предыдущая, ни следующая страница не существует. Я мог бы изменить его на if ($ this- ›previous! = $ This-› current), я полагаю, но на balanace я думаю, что это более понятно и так.   -  person NaNuk    schedule 25.07.2012


Ответы (2)


Думаю, я понял ...

Попробуйте что-нибудь вроде:

<?php
if ($this->pageCount) :
    //you need to add each of the request parameters to url
    $params = Zend_Controller_Front::getInstance()
                    ->getRequest()->getParams();
    //remove the system parameters, $this->url will put them back
    unset($params['module']);
    unset($params['controller']);
    unset($params['action']);
    ?>
    <div class="paginationControl">         
                    <!--First Page Link -->
                    <?php if (isset($this->first)): ?>
                        <a href="<?php
                echo $this->url(array_merge($params, array('page' => $this->first)))
                        ?>">
                            &lt; First</a>
                    <?php else : ?>
                        <span class="disabled">&lt; First</span>
                    <?php endif ?>

                    <!--Previous Page Links-->
                    <?php if (isset($this->previous)) : ?>
                        <a href="<?php
                echo $this->url(array_merge($params, array('page' => $this->previous)))
                        ?>">
                            &lt; Prev</a>
                    <?php else : ?>
                        <span class="disabled">&lt; Prev</span>
                    <?php endif ?>
                <!--truncated ...-->

С помощью элемента управления разбиением на страницы, подобного этому, вы сможете передавать любые параметры, заданные пользователем, обратно в URL-адрес. Первый if () над - действительно важная часть.

person RockyFord    schedule 25.07.2012
comment
Вышеупомянутый метод получения доступа к массиву параметров, переданных в партиал, работает нормально, как и отключение контроллера и параметра действия. Спасибо большое. В моем случае мне нужны дополнительные параметры (включая страницу), которые должны быть представлены в виде строки запроса. Я принял твой ответ, потому что он работает. Я буду включать свою полную часть ниже в качестве непринятого ответа, потому что я думаю, что он заслуживает включения, но я хочу, чтобы вы были признательны. Спасибо большое - person NaNuk; 25.07.2012
comment
В стороне, я хотел бы знать, почему Первый if () над является действительно важной частью. Вы имеете в виду выбор того, отображать ли элементы управления разбивкой на страницы на основе хотя бы одной строки данных? Или есть еще что-то? - person NaNuk; 25.07.2012
comment
На самом деле это то, что делается после if ($ this- ›pageCount), где собирается текущий URL. $ params собирает все, что передается в строке url, включая любые параметры, заданные пользователем. - person RockyFord; 26.07.2012
comment
вы просто создаете строку запроса, отличную от меня. Я склонен полагаться на значения по умолчанию ZF, и вы передаете стандартную строку запроса. Все зависит от того, какую маршрутизацию вы используете - person RockyFord; 26.07.2012
comment
Да, я хотел использовать URL-адреса ZF без стандартной строки запроса, но параметры фильтрации исходят из формы, а метод GET всегда создает стандартную строку qury, поэтому я Я просто подыгрываю. - person NaNuk; 26.07.2012
comment
так зачем использовать GET? Я не хочу быть злым. Я недостаточно понимаю, что вы делаете, чтобы быть более полезным. - person RockyFord; 26.07.2012
comment
Ну, действительно, я хочу, чтобы URL-адрес отражал выбор параметров фильтра при отправке. Если я отправлю параметры фильтра POST, я не получу этого. На самом деле я хотел сказать, что я использую GET по этой причине, и, учитывая это, я должен согласиться с использованием строки запроса (если я не хочу выполнить какое-то перенаправление в контроллере). Насколько я могу судить, такая ситуация. - person NaNuk; 26.07.2012

Вам не нужно использовать это:

$params = Zend_Controller_Front::getInstance()->getRequest()->getParams();

Все, что вам нужно, это массив запросов:

$array = Zend_Controller_Front::getInstance()->getRequest()->getQuery();

это избавит вас от необходимости сбрасывать переменные, так как вы получите хороший массив, содержащий только строку запроса :)

person Andrew    schedule 29.10.2012