Reputation: 705
Within my Zend Framework project I have a "base-asset" module. Within this I am trying to create a pagination that will match the following route:
'route' => '/video/search[/:search][/:page_reference]',
The purpose of the value of search is so the same query will run on the database if the user clicks on any of the "next" page links created.
The value for page_reference is working fine. It is the value for search that I am not sure of how to populate for the paginate:
<li>
<a href="<?php echo $this->url(
$this->route,
['page_reference' => $this->previous , 'search' => $this->search]
); ?>"> << </a>
</li>
The following attempts have been unsuccessful:
$this->search
$this->params()->fromRoute('search')
The pagination is called from the view using
{{ paginationControl(result, 'sliding', ['actsministries/asset/searchpaginator', 'AMBase']) }}
Should I be setting the value for search in the Service?
Upvotes: 0
Views: 182
Reputation: 76
1 - Create a view helper :
use Zend\View\Helper\AbstractHelper;
class Requesthelper extends AbstractHelper
{
protected $request;
//get Request
public function setRequest($request)
{
$this->request = $request;
}
public function getRequest()
{
return $this->request;
}
public function __invoke()
{
return $this->getRequest()->getServer()->get('QUERY_STRING');
}
}
2 - Module.php
public function getViewHelperConfig()
{
return array(
'invokables' => array(
),
'factories' => array(
'Requesthelper' => function($sm){
$helper = new YourModule\View\Helper\Requesthelper; \\the path to creatd view helper
$request = $sm->getServiceLocator()->get('Request');
$helper->setRequest($request);
return $helper;
}
),
);
}
3 - searchpaginator.phtml :
<?php
$parameterGet = $this->Requesthelper();
if ($parameterGet != ""){
$aParams = explode("&", $parameterGet);
foreach($aParams as $key => $value){
if(strpos($value, "page_reference=") !== false){
unset($aParams[$key]);
}
}
$parameterGet = implode("&", $aParams);
if($parameterGet != '')
$parameterGet = "&".$parameterGet;
}
?>
<?php if ($this->pageCount):?>
<div>
<ul class="pagination">
<!-- Previous page link -->
<?php if (isset($this->previous)): ?>
<li>
<a href="<?php echo $this->url($this->route); ?>?page_reference=<?php echo $this->previous.$parameterGet; ?>">
<<
</a>
</li>
<?php else: ?>
<li class="disabled">
<a href="#">
<<
</a>
</li>
<?php endif; ?>
<!-- Numbered page links -->
<?php foreach ($this->pagesInRange as $page): ?>
<?php if ($page != $this->current): ?>
<li>
<a href="<?php echo $this->url($this->route);?>?page_reference=<?php echo $page.$parameterGet; ?>">
<?php echo $page; ?>
</a>
</li>
<?php else: ?>
<li class="active">
<a href="#"><?php echo $page; ?></a>
</li>
<?php endif; ?>
<?php endforeach; ?>
<!-- Next page link -->
<?php if (isset($this->next)): ?>
<li>
<a href="<?php echo $this->url($this->route); ?>?page_reference=<?php echo $this->next.$parameterGet; ?>">
>>
</a>
</li>
<?php else: ?>
<li class="disabled">
<a href="#">
>>
</a>
</li>
<?php endif; ?>
</ul>
</div>
<?php endif; ?>
4 - index.phtml
<?php
// add at the end of the file after the table
echo $this->paginationControl(
// the paginator object
$this->paginator,
// the scrolling style
'sliding',
// the partial to use to render the control
'partial/searchpaginator.phtml',
// the route to link to when a user clicks a control link
array(
'route' => '/video/search'
)
);
?>
I hope that's what you look for
Upvotes: 1