<?php /** TEST */ include_once('Navigator.php'); $currentPageNr = $_GET['pageNr']; if (!$currentPageNr) $currentPageNr = 0; ?> statischer Aufruf<br /> <?php //Für die möglichen Paramter siehe' static function getHtml' in Navigator.php echo Navigator::getHtml($currentPageNr, 1000); ?> <hr /> Mit Navigation als Objekt<br /> <?php //Für die möglichen Paramter siehe' static function _construct' in Navigator.php $nav = new Navigator(1000, 'testNavigator.php'); echo $nav->jumpByGet("."); ?> <hr /> Über die Item-Nummer. Dies wird gebraucht, falls man nicht über die PageNummer einsteigt<br /> Die erste Item-ummer der ausgewählten Seite ist <?php echo $intemNr = $nav->getFirstItemNrFromPageNr($currentPageNr) ?> <br /> Die passende Navigation dazu:<br /> <?php echo $nav->jumpWithItemNr($intemNr);?> <hr />
<?php /** * @copyright mpl by ERB software * All rights reserved * @author stefan.erb@erb-software.com */ class Navigator { protected $targetAdress; protected $varName; protected $range; protected $itemsPerPage; protected $startPageNumbers; protected $pages; protected $currentPageNr; /** * static method. * @access public * @param Number $currentPageNr * @param see constructor * @param String $glue * @return String html-Code for the Navigation */ public static function getHtml($currentPageNr, $itemCount, $targetAdress = __FILE__, $itemsPerPage=10, $range=4, $varName='pageNr', $glue = ' '){ $nav = new Navigator($itemCount, $targetAdress, $itemsPerPage, $range, $varName); return $nav->jump($currentPageNr, $glue); } /** * constructor * @access public * @param Number $itemCount how many items exists * @param String $targetAdress adress of the link-target * @param Number $itemsPerPage how many items ar on one page * @param Number $range how many entries ar laft and right of the currentPageNr * @param String $varName name of the var with the pageNr */ public function __construct($itemCount, $targetAdress = __FILE__, $itemsPerPage=10, $range=4, $varName='pageNr'){ $this->targetAdress = basename($targetAdress); $this->varName = $varName; $this->range = $range; $this->itemsPerPage = $itemsPerPage; $this->startPageNumbers = range(0, $itemCount-1, $itemsPerPage); $this->pages=array(); } /** * jump to the currentPageNr * @access public * @param Number $currentPageNr * @param String $glue * @return String html-Code for the Navigation */ public function jump($currentPageNr, $glue = ' '){ $this->currentPageNr = $currentPageNr; //create the list of all pageNr $pageNrs = array_keys($this->startPageNumbers); // create the range with all showed pageNr $rangeStart = ($currentPageNr > $this->range) ? $currentPageNr - $this->range :0 ; $rangeLength = 2 * $this->range +1; $range = array_slice($pageNrs, $rangeStart, $rangeLength); // list of all showed pageNr $pages = array(); // add first-link '<<' if ($currentPageNr != $firstPageNr = reset($pageNrs)) { $pages[] = $this->createLinkInfo($firstPageNr, '<<'); } // add previous-link '<' if (reset($range) > $firstPageNr){ $pages[] = $this->createLinkInfo($currentPageNr-1, '<'); } // add the page-links foreach ($range as $pageNr){ $pages[] = $this->createLinkInfo($pageNr, $pageNr+1); } // add next-link '>' if (end($range) < $lastPageNr = end($pageNrs)){ $pages[] = $this->createLinkInfo($currentPageNr+1, '>'); } // add last-link '>>' if ($currentPageNr != $lastPageNr){ $pages[] = $this->createLinkInfo($lastPageNr, '>>'); } //return as string, separeted by $glue return implode($glue, $pages); } /** * jump to the currentPageNr and take the number from $_GET * @access public * @param String $glue * @return String html-Code for the Navigation */ public function jumpByGet($glue = ' '){ return $this->jump($_GET[$this->varName], $glue); } /** * jump to the current page with the itemNumber * @access public * @param Number $itemNr * @param String $glue * @return String html-Code for the Navigation */ public function jumpWithItemNr($itemNr, $glue = ' '){ $pageNr = floor($itemNr / $this->itemsPerPage); return $this->jump($pageNr, $glue); } /** * * @access public * @param Number $pageNr * @return Number $itemNr */ public function getFirstItemNrFromPageNr($pageNr){ return $this->startPageNumbers[$pageNr]; } /** * create the html-link for the pageNr * @access protected * @param Number $pageNr * @param String $label * @return String */ protected function createLinkInfo($pageNr, $label){ if ($pageNr == $this->currentPageNr) $label = "<b>{$label}</b>"; return "<a href=\"{$this->targetAdress}?{$this->varName}={$pageNr}\">{$label}</a>"; } } ?>
Ein weiterer Testfall
<?php //Einbinden der Navigation-Klasse include_once('navigator.php'); //Settings define('C_ITEM_PER_PAGE', 25); define('C_NAV_RANGE', 4); define('C_GET_NAV_PARAM', 'pageNr'); //$_GET auswerten $currentPageNr = $_GET[C_GET_NAV_PARAM]; if (!$currentPageNr) $currentPageNr = 0; //TODO DB-Daten auslesen: Kein LIMIT verwenden, sondern alle Daten auslesen //Ich simuliere hier mal die Resultate mit $x Einträgen $rowCount = 30; for($i = 0; $i < $rowCount; $i++){ $rows[$i] = "Eintrag #{$i}"; } //Navigator erstellen $nav = new Navigator(count($rows), basename(__FILE__), C_ITEM_PER_PAGE, C_NAV_RANGE, C_GET_NAV_PARAM); $navBar = $nav->jump($currentPageNr); //Erste anzuzeigende ID auslesen $firstId = $nav->getFirstItemNrFromPageNr($currentPageNr); //Dei entsprechenden Zeilen aussuchen $selectedRows = array_slice($rows, $firstId, C_ITEM_PER_PAGE); //Datenausgabe echo $navBar; echo "<hr />"; echo implode('<br />', $selectedRows); echo "<hr />"; echo $navBar; ?>
Kategorien: CatPhp