[Zend 1.x] Pagination ajouts fonctionalitées
Bonjour,
Je travail sur une tâche a laquelle je fait appel à vous.
J'ai le système de pagination de Zend qui fonctionne très bien,
et je voudrait ajouter un système de memorisation du nombre d'élement afficher dans la page.
en ce moment sous la liste des elements j'ai un select ou je peux choisir le nombre d'élément à afficher.
je l'enregistre en bd mais je doit maintenant la charger au moment ou je reviens sur cette même page..
J'ai pensé a un redirect qui ne me semble pas être un solutions raisonnable..
voici mon code pour la pagination:
Code:
1 2 3 4 5 6 7 8 9 10 11
|
<select class="pagesize" onchange="window.location = this.options[this.selectedIndex].value;">
<?php for ($i = $numberOfPagesByStep; $i <= 5 * $numberOfPagesByStep; $i+=$numberOfPagesByStep): ?>
<option value="<?php echo $this->url(array('count' => $i)) ?>" <?php if ($this->itemCountPerPage == $i) echo 'selected="selected"';
$userAmountService->setUserAmountItemsPages($i,$this->url());
?>>
<?php echo $i ?> <?php echo $this->translate('results'); ?>
</option>
<?php endfor ?>
</select> |
Ce code affiche le select pour choisir le nombre d'élément à afficher et la pagination
J'ai ajoute ma fonction
Code:
setUserAmoutItemsPages(...)
qui enregistre le changement en bd pour cette utilisateur..
ma route sans le choix de l'utilisateur pour le nombre d'element dans la liste est la suivante:
Code:
http://localhost:8000/module/controller/action/page/1
et après le choix du nombre d'element dans la liste
Code:
http://localhost:8000/module/controller/action/page/1/count/250
représente 250 éléments dans la liste,...
Merci pour vos réactions. et pour la lecture ;)
UP : heritage Zend_Paginator
voici la methodes qui envoi a la vue les infos pour le nombre d'element dans les pages..
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
/**
* Creates the page collection.
*
* @param string $scrollingStyle Scrolling style
* @return stdClass
*/
protected function _createPages($scrollingStyle = null)
{
$pageCount = $this->count();
$currentPageNumber = $this->getCurrentPageNumber();
$pages = new stdClass();
$pages->pageCount = $pageCount;
$pages->itemCountPerPage = $this->getItemCountPerPage();
$pages->first = 1;
$pages->current = $currentPageNumber;
$pages->last = $pageCount;
// Previous and next
if ($currentPageNumber - 1 > 0) {
$pages->previous = $currentPageNumber - 1;
}
if ($currentPageNumber + 1 <= $pageCount) {
$pages->next = $currentPageNumber + 1;
}
// Pages in range
$scrollingStyle = $this->_loadScrollingStyle($scrollingStyle);
$pages->pagesInRange = $scrollingStyle->getPages($this);
$pages->firstPageInRange = min($pages->pagesInRange);
$pages->lastPageInRange = max($pages->pagesInRange);
// Item numbers
if ($this->getCurrentItems() !== null) {
$pages->currentItemCount = $this->getCurrentItemCount();
$pages->itemCountPerPage = $this->getItemCountPerPage();
$pages->totalItemCount = $this->getTotalItemCount();
$pages->firstItemNumber = (($currentPageNumber - 1) * $this->getItemCountPerPage()) + 1;
$pages->lastItemNumber = $pages->firstItemNumber + $pages->currentItemCount - 1;
}
return $pages;
} |
ma question est la suivante : comment créer un classe enfant afin de redefinir cette methode a ma conveance?
dans ma vue je fais
Code:
$this->itemCountPerPage
mais c'est la methode parent qui est appeler..
merci pour vos réactions.
voici plus clairement ce que je souhaite..
ma pagination est gérer comme voici par l'instance de zend paginator:
Code:
1 2 3 4
|
if (!$data instanceof \Zend_Paginator) {
$data = \Zend_Paginator::factory($data);
} |
et voici les methode afin de modifier le numero de la page et le nombre d'élément dans la page:
Code:
1 2 3
|
$data->setCurrentPageNumber($this->getPage())
->setItemCountPerPage($this->getPageSize()); |
c'est cette config que je veux changer.
Comment recupérer l'instance en cours afin d'injecter les valeurs en bdd dans ces methodes?
J'ai une route et chaque route je vais avoir une config différentes choisi par l'utilisateur..
merci pour vos réactions.