phpzend-frameworkpaginationzend-paginator

Zend pagination with limited number of links and dots between


I have implemented a Zend Pagination but can't figure out how to limit the number of links in the pagination. I know about setPageRange, but it isn't exactly what i want.

Currently the pagination looks like this.

< | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | >

But what i want is something like this:

for page 1

< | 1 | 2 | 3 | ... | 14 | 15 | 16 | >

for page 8

< | 1 | 2 | 3 | ... | 7 | 8 | 9 | ... | 14 | 15 | 16 | >

for page 14

< | 1 | 2 | 3 | ... | 13 | 14 | 15 | 16 | >

Solution

  • here i can give you pagination helper script which i have implemented in one of my application and it is same like as above you want.

    <?php
    
     if ($this->pageCount) :
     $midRange = floor(sizeof($this->pagesInRange) / 2);
     if (($this->current + $midRange) < $this->pageCount && $this->pageCount > 5) : 
        array_pop($this->pagesInRange); 
     $display_end = true;
     endif; 
    
     ?>
    <div class="paginationControl<?php echo  $this->position; ?>">
    
     <div class="paginationControl_pages">
     <!-- Previous page link -->
    
     <?php if (isset($this->previous)): ?>
     <?php if($this->extraVar != "" ){ ?>
                <a href="<?php echo  $this->url(array_merge($this->extraVar,array('page' => $this->previous))). $this->query; ?>" class="paging-active">&nbsp;Previous&nbsp;</a> &nbsp;
     <?php }else {?>
                <a href="<?php echo  $this->url(array('page' => $this->previous)). $this->query; ?>" class="paging-active">&nbsp;Previous&nbsp;</a> &nbsp;
     <?php }?>
     <?php else: ?>
     <span class="paging-active"><strong>&nbsp;Previous&nbsp;</strong></span>&nbsp;
     <?php endif; ?>
     <span ><?php if (($this->current - $midRange) > $this->first && $this->pageCount > 5): ?></span>
     <?php  
     array_shift($this->pagesInRange);?>
    
     <?php if($this->extraVar != "" ){ ?>
      <a href="<?php echo $this->url(array_merge($this->extraVar,array('page' => $this->first))) . $this->query; ?>" ><span class="paging"><?php echo $this->first ?></span></a>...
     <?php } else {?> 
     <a href="<?php echo $this->url(array('page' => $this->first)) . $this->query; ?>" ><span class="paging"><?php echo $this->first ?></span></a>...
     <?php }?>
    
     <?php endif; ?>
     <!-- Numbered page links -->
     <?php foreach ($this->pagesInRange as $page): ?>
    
     <?php if ($page != $this->current): ?>
    
     <?php if($this->extraVar != "" ){ ?>
                <a href="<?php echo $this->url(array_merge($this->extraVar,array('page'=>$page))); ?>""><span class="paging"><?php echo $page; ?></span></a>
            <?php }else{ ?>  
                <a href="<?php echo $this->url(array('page'=>$page)); ?>"><span class="paging"><?php echo $page; ?></span></a>
            <?php } ?>
    
     <?php else: ?>
    
            <span class="paging-active"><strong><?php echo $page; ?>&nbsp;&nbsp;</strong></span>
     <?php endif; ?>
     <?php endforeach; ?>
     <?php if (!empty($display_end)) : 
     ?>
     <?php if($this->extraVar != "" ){ ?>
     ...<a href="<?php echo $this->url(array_merge($this->extraVar,array('page' => $this->last))) . $this->query; ?>" ><span class="paging"><?php echo $this->last ?></span></a> 
     <?php }else{?>
     ...<a href="<?php echo $this->url(array('page' => $this->last)) . $this->query; ?>" ><span class="paging"><?php echo $this->last ?></span></a> 
     <?php }?>
     <?php endif; ?>
     <!-- Next page link -->
     <?php if (isset($this->next)): ?>
      <?php if($this->extraVar != "" ){ ?>
      &nbsp;<a href="<?php echo $this->url(array_merge($this->extraVar,array('page' => $this->next))) . $this->query; ?>" class="paging-active">&nbsp;Next&nbsp;</a>&nbsp;
      <?php }else{?>
     &nbsp;<a href="<?php echo $this->url(array('page' => $this->next)) . $this->query; ?>" class="paging-active">&nbsp;Next&nbsp;</a>&nbsp;
     <?php }?>
     <?php else: ?>
     &nbsp;<span class="paging-active"><strong>Next&nbsp;&nbsp;</strong></span>&nbsp;
     <?php endif; ?>
     </div>
    </div>
    <?php endif; ?>
    

    hope this will sure help you to get your desire OUTPUT.