Я пытаюсь создать разбивку на страницы в своем ленте новостей. У меня есть два режима в ленте новостей: все каналы новостей и каналы по категориям. Разбивка страниц для всех новостных лент работает нормально, но у меня проблемы с разбивкой по категориям «feed by category».
Я использую paginationControl следующим образом:
<?=$this->paginationControl( $this->news, 'Sliding', 'pagination_control', array('route' => 'news/category') )?>
news/category
маршрутов news/category
config:
'category' => array( 'type' => 'Segment', 'options' => array( 'route' => '/:category[/page-:page]', 'constraints' => array( 'category' => '[az]+', 'page' => '[1-9][0-9]*', ), 'defaults' => array( 'controller' => 'News\Controller\Item', 'action' => 'category', 'page' => 1, ) ), 'may_terminate' => true, ),
Поэтому мне нужно указать категорию параметров. Я стараюсь:
<?=$this->paginationControl( $this->news, 'Sliding', 'pagination_control', array('route' => 'news/category', array('category' => $this->category->getUrl())) )?>
Но я получаю ошибку «Отсутствующий параметр …»:
Похоже, что невозможно установить параметр через paginationControl.
Как правильно указать маршрут с параметром в paginationControl?
Мое представление paginationControl выглядит так:
<?php if ($this->pageCount > 1): ?> <div> <ul class="pagination pagination-sm"> <!-- Previous page link --> <?php if (isset($this->previous)): ?> <li> <a href="<?=$this->url($this->route, array('page' => $this->previous))?>"> « </a> </li> <? else: ?> <li class="disabled"><span>«</span></li> <? endif; ?> <!-- Numbered page links --> <? foreach ($this->pagesInRange as $page): ?> <? if ($page != $this->current): ?> <li> <a href="<?=$this->url($this->route, array('page' => $page))?>"> <?=$page?> </a> </li> <? else: ?> <li class="active"><span><?=$page?></span></li> <? endif; ?> <? endforeach; ?> <!-- Next page link --> <?php if (isset($this->next)): ?> <li> <a href="<?=$this->url($this->route, array('page' => $this->next))?>"> » </a> </li> <?php else: ?> <li class="disabled"><span>»</span></li> <?php endif; ?> </ul> </div> <div> <span class="small grey"><?="Страница ".$this->current." из ".$this->pageCount?></span> </div> <?php endif; ?>
Вы должны передать все дополнительные параметры в качестве ассоциативного массива в конце, как сказал @ rianattow. Таким образом, все эти параметры будут доступны в вашем pagination_control.phtml
частичном через $this->paramname
Пример:
echo $this->paginationControl( $this->news, 'Sliding', 'pagination_control', array( 'route' => 'news/category', 'category' => 'banana') );
Эта подробная информация указана в документации paginator :
Четвертый и последний параметр зарезервирован для необязательного ассоциативного массива дополнительных переменных, которые вы хотите получить в своем представлении (доступно через $ this). Например, эти значения могут включать дополнительные параметры URL для ссылки для разбивки на страницы.
Я думаю, что другим недостающим моментом является создание URL-адресов с использованием имен маршрутов. Вместо того, чтобы передавать URL-адрес помощнику paginationControl()
в качестве аргумента, попробуйте создать URL-адрес внутри частичного разбиения на страницы следующим образом:
<a href="<? echo $this->url($this->route, array('page' => $page, 'category' => $this->category)) ?>">
Надеюсь, поможет.