squiblo Posted September 9, 2009 Share Posted September 9, 2009 i have a pagination script working fine but the numbers at the bottom do not indicate what page i am currently on, how can change this to show that i am currently on page 5 for example by making the number 5 bold or underlined <?php for ($i=1; $i<=$maxPages; $i++) echo ($i === $page) ? $i .' ' : '<a href="?page='. $i . (strlen($search) ? '&search=' . $search : '') .'" class="pagenumbers">'. $i .'</a> '; ?> Quote Link to comment https://forums.phpfreaks.com/topic/173664-solved-page-numbers/ Share on other sites More sharing options...
TeNDoLLA Posted September 9, 2009 Share Posted September 9, 2009 Actually it is indicating it already now, it is not printing the current page as link now. But the code below would change it not a link and bolded. echo ($i === $page) ? '<strong>' . $i .'</strong> ' : '<a href="?page='. $i . (strlen($search) ? '&search=' . $search : '') .'" class="pagenumbers">'. $i .'</a> '; Quote Link to comment https://forums.phpfreaks.com/topic/173664-solved-page-numbers/#findComment-915417 Share on other sites More sharing options...
squiblo Posted September 9, 2009 Author Share Posted September 9, 2009 indicating what page i am on is perfect now, the last thing is only echoing 10 page numbers at a time when $maxPages => 10 Quote Link to comment https://forums.phpfreaks.com/topic/173664-solved-page-numbers/#findComment-915426 Share on other sites More sharing options...
TeNDoLLA Posted September 9, 2009 Share Posted September 9, 2009 Changing that piece of code should have not affected anything else but bolding the page number if its current. I tested it and for me it prints all pages no matter how many there are. This is the code I tested and it works. <?php // Print pages for ($i=1; $i<=$maxPages; $i++) { echo ($i === $page) ? '<strong>' . $i .'</strong> ' : '<a href="?page='. $i . (strlen($search) ? '&search=' . $search : '') .'">'. $i .'</a> '; } Quote Link to comment https://forums.phpfreaks.com/topic/173664-solved-page-numbers/#findComment-915465 Share on other sites More sharing options...
squiblo Posted September 9, 2009 Author Share Posted September 9, 2009 sorry ill explain it a bit better, the page numbers below the results are infinate depending on the amount of results and the results per page, the page numbers can go above ten but i do not think that is user friendly... i tried this but on the 10th page the option to click next is not linked and will not allow you to view page 11... $maxPages = ceil($foundnum / $perPage); //may come out as a decimal if ($maxPages > 10) $maxPages = 10; Quote Link to comment https://forums.phpfreaks.com/topic/173664-solved-page-numbers/#findComment-915483 Share on other sites More sharing options...
premiso Posted September 9, 2009 Share Posted September 9, 2009 Well you are checking if maxpages is greater than 10, if it is you set it to 10...why would it goto 11 given that logic? Quote Link to comment https://forums.phpfreaks.com/topic/173664-solved-page-numbers/#findComment-915497 Share on other sites More sharing options...
squiblo Posted September 9, 2009 Author Share Posted September 9, 2009 that is why i need help with it, i understand why the page will not goto 11, on the 1st page i would like the page numbers shown like "1 2 3 4 5 6 7 8 9 10" but the second page to show "2 3 4 5 6 7 8 9 10 11" Quote Link to comment https://forums.phpfreaks.com/topic/173664-solved-page-numbers/#findComment-915505 Share on other sites More sharing options...
TeNDoLLA Posted September 9, 2009 Share Posted September 9, 2009 You probably should code the paging like that it would print out something like this, say you are on the page 10 and the print will be: prev ... 8 9 10 11 12 ... next. And make it dynamic. But I don't have the time to do everything for you ready. Maybe someone else has. There is still plenty of tutorials that show how to do this if you search on google. And I think I had a paging class somewhere if you want I can find and post it here. It had this functionality and some others also. Edit: but I think the class might not help but instead make it more complicated. So it might be a good idea to try to understand and learn the current code and try modifying it. Or follow some tutorial. Quote Link to comment https://forums.phpfreaks.com/topic/173664-solved-page-numbers/#findComment-915508 Share on other sites More sharing options...
squiblo Posted September 9, 2009 Author Share Posted September 9, 2009 if you could post the class im sure i would find it very useful thank you for your help Quote Link to comment https://forums.phpfreaks.com/topic/173664-solved-page-numbers/#findComment-915514 Share on other sites More sharing options...
TeNDoLLA Posted September 9, 2009 Share Posted September 9, 2009 First of all a WARNING, this class was created once for a specific app and thats why it might not be optimal to all apps. Also this might break a little concepts of OOP but here goes. <?php /* * * Pagination class. * */ class PagerException extends Exception {} class Pager { // vars private $currentPage; private $totalPages; private $url; // Extra GET parameters before the paging parameter. private $urlEnd; // (optional) if there is need for an addon to the url after paging stuff ie. searches, sorting, etc. private $extra; // Some other extra to the href attribute eg. added javascript. private $firstPageButton; private $lastPageButton; private $nextButton; private $previousButton; private $interval; private $maxInterval; private $pagePrefix; private $pageSuffix; // Constructor function __construct($totalPages, $url = '', $currentPage = 1, $urlEnd = null, $extra = null, $beginWithQuestionMark = false) { if ($currentPage > $totalPages) { throw new PagerException('Current page can not be larger than total pages.'); } else { $this->currentPage = $currentPage; } $this->totalPages = $totalPages; $this->firstPageButton = '«'; $this->lastPageButton = '»'; $this->previousButton = '‹'; $this->nextButton = '›'; if (!strlen($url)) { $this->url = '?p='; } else if ($beginWithQuestionMark) { $this->url = '?p='; } else { $this->url = $url .'&p='; } $this->maxInterval = intval(floor(($this->totalPages/2)))-1; $this->interval = 2; $this->pagePrefix = ''; $this->pageSuffix = ''; if (!is_null($urlEnd)) { $this->urlEnd = $urlEnd; } if (!is_null($extra)) { $this->extra = $extra; } } // Initialize pager. function init() { $output = ''; // First page button. if ($this->currentPage == 1) { $output .= $this->firstPageButton .' '; } else { $output .= '<a href="'.$this->url.'1'. $this->urlEnd .'" '. $this->extra .'>'.$this->firstPageButton.'</a> '; } // Previous page button. if ($this->currentPage == 1) { $output .= $this->previousButton .' '; } else { $output .= '<a href="'.$this->url.($this->currentPage-1) . $this->urlEnd .'" '. $this->extra .'>'.$this->previousButton.'</a> '; } // When there is very few pages. if($this->totalPages <= (2*$this->interval+1)) { $i = 1; while ($i <= $this->totalPages) { if ($i == $this->currentPage) { $output .= $this->pagePrefix.$this->currentPage.$this->pageSuffix.' '; } else { $output .= '<a href="'.$this->url.$i . $this->urlEnd .'" '. $this->extra .'>'.$this->pagePrefix.$i.$this->pageSuffix.'</a> '; } $i++; } } // when current_page <= interval + 1 else if ($this->currentPage <= $this->interval+1) { $i = 1; while($i < $this->currentPage) { $output .= '<a href="'.$this->url.$i . $this->urlEnd .'" '. $this->extra .'>'.$this->pagePrefix.$i.$this->pageSuffix.'</a> '; $i++; } $output .= $this->pagePrefix.$this->currentPage.$this->pageSuffix.' '; $i = $this->currentPage+1; while ($i <= $this->currentPage + $this->interval) { $output .= '<a href="'.$this->url . $i . $this->urlEnd .'" '. $this->extra .'>'.$this->pagePrefix.$i.$this->pageSuffix.'</a> '; $i++; } $output .= '... '; } // when current_page >= total_pages - interval else if ($this->currentPage >= ($this->totalPages - $this->interval)) { $output .= '... '; $i = $this->currentPage - $this->interval; while($i < $this->currentPage) { $output .= '<a href="'.$this->url . $i . $this->urlEnd .'" '. $this->extra .'>'.$this->pagePrefix.$i.$this->pageSuffix.'</a> '; $i++; } $output .= $this->pagePrefix.$this->currentPage.$this->pageSuffix.' '; $i = $this->currentPage+1; while ($i <= $this->totalPages) { $output .= '<a href="'.$this->url . $i . $this->urlEnd .'" '. $this->extra .'>'.$this->pagePrefix.$i.$this->pageSuffix.'</a> '; $i++; } } // when current_page is somewhere between and there is more pages than 2*interval+currentpage. else { $output .= '... '; $i = $this->currentPage - $this->interval; while ($i < $this->currentPage) { $output .= '<a href="'.$this->url.$i . $this->urlEnd . '" '. $this->extra .'>'.$this->pagePrefix.$i.$this->pageSuffix.'</a> '; $i++; } $output .= $this->pagePrefix.$this->currentPage.$this->pageSuffix.' '; $i = $this->currentPage+1; while ($i <= $this->currentPage+$this->interval) { $output .= '<a href="'.$this->url . $i . $this->urlEnd .'" '. $this->extra .'>'.$this->pagePrefix.$i.$this->pageSuffix.'</a> '; $i++; } $output .= '... '; } // Next page button. if ($this->currentPage == $this->totalPages) { $output .= $this->nextButton .' '; } else { $output .= '<a href="'.$this->url . ($this->currentPage+1) . $this->urlEnd .'" '. $this->extra .'>'.$this->nextButton.'</a> '; } // Last page button if ($this->currentPage == $this->totalPages) { $output .= $this->lastPageButton .' '; } else { $output .= '<a href="'.$this->url . $this->totalPages . $this->urlEnd .'" '. $this->extra .'>'.$this->lastPageButton.'</a> '; } return $output; } // Get current page. function getCurrentPage() { return $this->currentPage; } // Sets the current page. function setCurrentPage($page) { if ($page < 1 || $page > $this->totalPages) { throw new PagerException('Invalid page number.'); } else { $this->currentPage = $page; } } // To set customized first page button. function setFirstPageButton($code) { $this->firstPageButton = $code; } // To set customized last page button. function setLastPageButton($code) { $this->lastPageButton = $code; } // To set customized previous page button. function setPreviousButton($code) { $this->previousButton = $code; } // To set customized next page button. function setNextButton($code) { $this->nextButton = $code; } // To set customized page prefix. function setPagePrefix($prefix) { $this->pagePrefix = $prefix; } // To set customized page suffix. function setPageSuffix($suffix) { $this->pageSuffix = $suffix; } // To set how many next/previous page links we will show around current page. function setInterval($interval) { if ($interval < 1 || $interval > $this->maxInterval) { throw new PagerException('Invalid interval number.'); } else { $this->interval = $interval; } } } And usage for example <?php $currentPage = 10; $maxPages = 20; $paging = new Pager($maxPages, null, $currentPage, null, null, true); echo $paging->init(); Of course you calculate the maxpages and currentpage etc. based on your queries. And might modify the url if needed. Plus some other stuff which is not so well commented. Quote Link to comment https://forums.phpfreaks.com/topic/173664-solved-page-numbers/#findComment-915518 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.