#php #zend-framework #pagination #partial
#php #zend-framework #разбивка на страницы #частичная
Вопрос:
У меня есть страница, на которой отображается много данных, включая Zend_Paginator. Действие страницы является /po/fetch?id=someID
.
что я хочу сделать, так это передать параметр «id» в zend paginationControl, чтобы ссылки на разбивку на страницы были примерно такими /po/fetch?id=someIDamp;page=somePage
. к сожалению, я нигде не могу найти объяснения того, как я могу передать этот параметр в paginationControl.
мой вызов paginationControl:
echo $view->paginationControl($paginator, 'Sliding',$control, $params);
где $params = array('id' => someID
и моя частичная разбивка на страницы:
<a href=<?= $url.'amp;page='.$this->first; ?> id="first"> First </a>
<a href=<?= $url.'amp;page='.$this->previous; ?> id="previous">amp;< Previous</a>
<?php
foreach($this->pagesInRange as $page) {
?>
<a href="<?= $url.'amp;page='.$page; ?>">.$page.</a> | ;
<?php
}
?>
<a href=<?= $url.'amp;page='.$this->next;?> id="next"> Next amp;></a>
<a href=<?= $url.'amp;page='.$this->last; ?> id="last"> Last </a>
и я хочу $url
иметь указанную форму.
Ответ №1:
$this->id
Ответ №2:
Эй, попробуйте это, это обязательно сработает…..
<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>
Комментарии:
1. по какой-то причине $param пуст в моем case…@vredniy ответ сработал для меня.
2. приведенный выше метод $param[] будет работать только там, где был задан массив с этим значением и ключом.
$this->id
сработало для вас, потому что у вас есть набор объектов singleton $this
Ответ №3:
Ваш пример кода не показывает, как $url
заполняется, но вы действительно должны использовать URL ViewHelper.
Так, например, ваша предыдущая ссылка стала бы:
<a href=<?php echo $this->url(array('page' => $this->previous)); ?> id="previous">amp;< Previous</a>
Это вернет правильный URL на текущую страницу с page
параметром, установленным на $this->previous
. Таким образом, если текущий URL является /users/view?foo=baramp;page=5
, приведенный выше код будет выводиться /users/view?foo=baramp;page=4
для предыдущей ссылки. Обратите внимание, что все параметры запроса, которые уже присутствуют, сохраняются.
Итак, если id
параметр уже присутствует в URL, показывающем ваш пагинатор, приведенный выше код «просто сработает». Однако, если вам все еще нужно добавить id
параметр, вы можете сделать это следующим образом:
<a href=<?php echo $this->url(array('page' => $this->previous, 'id' => $this->id)); ?> id="previous">amp;< Previous</a>
Чтобы продолжить наш предыдущий пример, этот код будет выводить следующий URL: /users/view?foo=baramp;page=4amp;id={someId}
Вот справочная документация для URL ViewHelper:
url ($urlOptions, $name, $reset): создает строку URL на основе именованного маршрута. $urlOptions должен быть ассоциативным массивом пар ключ / значение, используемых конкретным маршрутом.
Последнее замечание — $reset
(третий) параметр URL ViewHelper будет очень кстати. Поведение по умолчанию заключается в сохранении любых параметров запроса текущего запроса, но вызов $this->url(array(), 'default', true)
с true
помощью для $reset
параметра в основном удалит все параметры, за исключением тех, которые вы указываете в $urlOptions
.
Ответ №4:
Я столкнулся с той же проблемой, поэтому я использовал приведенный ниже код в partial 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.'amp;';
}
return $str;
}
Теперь для ссылок я использую приведенный ниже код.
<a href="<?php echo queryStr($page); ?>">
Вместо
<a href="<?php echo $this->url(array('page' => $page)); ?>">
Я уверен, что это будет полезно и другим.