У меня есть страница с большим количеством данных, включая Zend_Paginator. Действие страницы – /po/fetch?id=someID
.
то, что я хочу сделать, это передать параметр id для zend paginationControl, чтобы ссылки на страницы были чем-то вроде /po/fetch?id=someID&page=somePage
. к сожалению, я не могу найти объяснения о том, как передать этот параметр в paginationControl.
мой вызов paginationControl:
echo $view->paginationControl($paginator, 'Sliding',$control, $params);
где $params = array('id' => someID
и частичная разбивка на части:
<a href=<?= $url.'&page='.$this->first; ?> id="first"> First </a> <a href=<?= $url.'&page='.$this->previous; ?> id="previous">< Previous</a> <?php foreach($this->pagesInRange as $page) { ?> <a href="<?= $url.'&page='.$page; ?>">.$page.</a> | ; <?php } ?> <a href=<?= $url.'&page='.$this->next;?> id="next"> Next ></a> <a href=<?= $url.'&page='.$this->last; ?> id="last"> Last </a>
и я хочу, чтобы $url
указанную форму.
$this->id
Эй, попробуй, он наверняка сработает …..
<a href="<?php echo $this->url(array('page' => $page,'id'=>'1')); ?>"> <?php echo $page; ?> </a>
Здесь 1
задается как идентификатор, вы должны передать идентификатор, который хотите.
<a href="<?php echo $this->url(array('page' => $page,'id'=>$param['id'])); ?>"> <?php echo $page; ?> </a>
Ваш примерный код не показывает, как заполняется $url
, но вы действительно должны использовать URL-адрес ViewHelper .
Так, например, ваша предыдущая ссылка станет:
<a href=<?php echo $this->url(array('page' => $this->previous)); ?> id="previous">< Previous</a>
Это вернет правильный URL-адрес текущей страницы с параметром page
установленным в $this->previous
. Так что, если текущий url является /users/view?foo=bar&page=5
, приведенный выше код выводит /users/view?foo=bar&page=4
для предыдущей ссылки. Обратите внимание, что все параметры запроса, которые уже присутствуют, сохраняются.
Итак, если параметр id
уже присутствует в URL-адресе, показывающем ваш paginator, приведенный выше код будет «просто работать». Однако, если вам еще нужно добавить параметр id
, вы можете сделать это следующим образом:
<a href=<?php echo $this->url(array('page' => $this->previous, 'id' => $this->id)); ?> id="previous">< Previous</a>
Чтобы продолжить с нашего предыдущего примера, этот код выдаст следующий url: /users/view?foo=bar&page=4&id={someId}
Вот справочная документация для URL ViewHelper:
url ($ urlOptions, $ name, $ reset): создает строку URL на основе именованного маршрута. $ urlOptions должен быть ассоциативным массивом пар ключ / значение, используемым конкретным маршрутом.
Последнее примечание – параметр $reset
(третий) URL ViewHelper пригодится. Поведение по умолчанию – это сохранение любых параметров запроса текущего запроса, но вызов $this->url(array(), 'default', true)
с true
для параметра $reset
основном приведет к удалению всех параметров, кроме тех, которые вы указали в $urlOptions
.
Я прошел одну и ту же проблему, поэтому я использовал код, приведенный ниже, в частичном paginator.
Я создал функцию в файле частичного просмотра paginator ( control.phtml
) или может быть другим.
function queryStr($p){ $params = $array = Zend_Controller_Front::getInstance()->getRequest()->getQuery(); $params['page']=$p; $str='?'; foreach($params as $k=>$v){ if($v) $str .= $k.'='.$v.'&'; } return $str; }
Теперь для ссылок я использую код, приведенный ниже.
<a href="<?php echo queryStr($page); ?>">
Вместо
<a href="<?php echo $this->url(array('page' => $page)); ?>">
Я уверен, что это будет полезно и для других.