Clasa Pagination prezentata in aceasta pagina poate fi utilizata pentru paginare continut stocat in baza de date MySQL, intr-un Array, sau intr-un sir cu un text prea mare ce trebuie impartit in mai multe segmente /pagini.
Scriptul este destul de flexibil, se poate usor seta numarul de randuri (sau elemente din Array) care sa fie afisate in pagina; sau cand se pagineaza un text aflat intr-un singur sir, se poate alege impartirea lui intr-un anumit numar de segmente, sau in functie de un numar maxim de caractere (fara a taia cuvintele).
Detalii despre cod sunt in comentariile din clasa.
<?php /* Clasa Paginare - marplo.net/php-mysql/ */ class Pagination { /* EDITATI datele din acest array daca paginati randuri din tabel MySQ Adaugati datele dv. pentru conectare la baza de date MySQL (serverul MySQL, utilizator, parola, baza_de_date) */ protected $mysql = array( 'host'=> 'localhost', 'user'=> 'root', 'pass'=> 'parola', 'dbname'=> 'nume_baza_date' ); public $table ='pgtest'; // AICI adaugati numele tabelului MySQL // properties public $rowsperpage = 12; // numarul de randuri (elemente array) adaugate in pagina public $txtchr = 800; // numarul maxim de caractwere, cand se face paginarea unui continut text public $txtpieces = 0; // numarul de parti /pagini, cand se face paginarea unui continut text public $range = 3; // numarul de link-uri afisate in jurul celui curent protected $conn = false; // va retine conexiunea mysql protected $idpage = 0; // indexul paginii curente protected $totalpages = 0; // numarul total de pagini protected $pag; // retine numele fisierului care foloseste clasa ($_SERVER['PHP_SELF']) // Constructor public function __construct() { // seteaza proprietatile $pag si $idpage (intreg, pozitiv) $this->pag = $_SERVER['PHP_SELF']; $this->idpage = isset($_GET['pg']) ? intval(abs($_GET['pg']-1)) : 0; } // metoda pt crearea conectarii la baza de date MySQL public function setConn() { // daca se realizeaza cu succes conectarea la baza de date, o retine in perroprietatea $conn if($conn = new mysqli($this->mysql['host'], $this->mysql['user'], $this->mysql['pass'], $this->mysql['dbname'])) { $sql ='SET character_set_client="utf8",character_set_connection="utf8",character_set_results="utf8";'; if($conn->query($sql)) $this->conn = $conn; } return $this->conn; } // Selecteaza randurile din tabelul mysql pentru pagina curenta. Returneaza un sir cu acestea, cu cod html public function getMysqlRows() { $this->setConn(); // apeleaza metoda setConn() pt. a crea conexiunea la MySQL $startrow = $this->idpage * $this->rowsperpage; // randul de la care incepe selectarea continutului $re =''; // variabila ce va fi returnata // daca e creata conectarea la baza de date MySQL if($this->conn !== false) { // SELECT pt. a afla numarul total de pagini ($totalpages) $sql = "SELECT COUNT(*) FROM `$this->table`"; // efectueaza interogarea, apoi vor fi selectate randurile if($resql = $this->conn->query($sql)) { // daca $resql contine cel putin un rand, le preia si seteaza $totalpages if($resql->num_rows > 0) { $row = $resql->fetch_row(); $this->totalpages = ceil($row[0] / $this->rowsperpage); // Definire SELECT care preia randurile pt. pagina curenta // LIMIT $startrow, $this->rowsperpage ; specifica sa fie selectate doar randurile paginii curente $sql = "SELECT * FROM `$this->table` LIMIT $startrow, $this->rowsperpage"; if($resql = $this->conn->query($sql)) { // daca $resql contine cel putin un rand if($resql->num_rows > 0) { // AICI MODIFICATI numele coloanelor si creati codul HTML while($row = $resql->fetch_assoc()) { $re .= '<h3>'. $row['title']. '</h3>'. $row['id']. '<div class="content">'. $row['content']. '</div>'; } } else $re .='0 rezultate'; } else $re .='0 inregistrari in table'; } } else $re .='Eroare: '. $this->conn->error; $this->conn->close(); } else $re .='Nu exista connectare la baza de date MySQL '. mysqli_connect_error(); return $re; } // primeste un Arry cu continutul ce trebuie paginat. Returneaza un sir cu elementele pt. pagina curenta public function getArrRows($arr) { $startrow = $this->idpage * $this->rowsperpage; // elementul de la care incepe preluarea $ar_page = array_slice($arr, $startrow, $this->rowsperpage); // preia elementele pt. pagina curenta $nre = count($ar_page); $this->totalpages = ceil(count($arr) / $this->rowsperpage); // seteaza numar total de pagini $re =''; // variabila ce va fi returnata // AICI ADAUGATI CODUL HTML PT REZULTATUL CE CONTINE FIECARE ELEMENT for($i=0; $i<$nre; $i++) { $re .='<div class="content">'. $ar_page[$i]. '</div>'; } return $re; } // metoda pt paginare text, imparte sirul in functie de numarul de caractere ($txtchr), sau nr. parti (txtpieces) public function getText($text) { // daca $txtpieces e mai mare decat 0, imparte $text intr-un numar de parti /pagini specificat in $txtpieces // altfel, imparte textul in functie de numarul maxim de caractere din $txtchr if($this->txtpieces>0) { $this->txtchr = ceil(strlen($text) / $this->txtpieces); // seteaza $txtchr in functie de nr. parti } // imparte textul si creaza un Array cu partile obtinute. Returneaza sirul pt. pagina curenta $newtext = wordwrap($text, $this->txtchr, '#|#'); $ar_text = explode('#|#', $newtext); $nr_pieces = count($ar_text); // daca paginarea e dupa numarul de parti, si sunt prea multe segmente - uneste pe ultimile doua if($this->txtpieces>0 && $nr_pieces>$this->txtpieces) { $ar_text[$nr_pieces-2] .=' '. $ar_text[$nr_pieces-1]; unset($ar_text[$nr_pieces-1]); } $this->totalpages = count($ar_text); // seteaza nr. total de pagini if($this->idpage > $this->totalpages) $this->idpage = $this->totalpages; // seteaza un sir care sa fie adaugat la sfarsitul continutului text, daca nu e ultima pagina $end = ($this->idpage+1)<$this->totalpages ? ' ...[<i> Continuare in pagina urmatoarte</i>].' : ''; return $ar_text[$this->idpage]. $end; } // metoda ce seteaza link-urile //$str, optional - sir cu nume=valoare public function getLinks($str='') { $re =''; // variabila ce va contine randurile returnate $currentpage = $this->idpage + 1; // deoarece indexul paginii incepe de la 0, adauga 1 ca sa seteze pagina curenta $pg =($str=='')?'?pg=':'?'.$str.'&pg=';; // numele pt valoarea GET adaugata in URL // daca $totalpages>0 si nr total pagini e mai mare sau egal cu pagina curenta if($this->totalpages>0 && $this->totalpages >= $currentpage) { // Link-uri inapoi, daca pagina curenta nu e prima if ($currentpage > 1) { // adauga << pentru link la prima pagina $re .=' <a href="'. $this->pag. '" title="Link 1"><<</a> 1 '; $prevpage = $currentpage - 1; // pagina anterioara // adauga < pt link la pagina anterioara, daca nu e 1 if($prevpage>1) $re .=' <a href="'. $this->pag. $pg. $prevpage. '" title="Link '. $prevpage. '">Anterior <</a> '; } // seteaza link-urile din jurul paginii curente for($x = ($currentpage - $this->range); $x <= ($currentpage + $this->range); $x++) { // daca e un numar intre prima si ultima pagina if (($x > 0) && ($x <= $this->totalpages)) { // daca e nr. pagina curenta, afiseaza fara link, altfel adauga link if ($x == $currentpage) $re .=' [<b>'. $x. '</b>] '; else $re .=' <a href="'. $this->pag. $pg. $x. '" title="Link '. $x. '">'. $x. '</a> '; } } // Daca pagina curenta nu e ultima, adauga link pentru pagina urmatoare si ultima if ($currentpage != $this->totalpages) { $nextpage = $currentpage + 1; // obtine pagina urmatoare // adauga > pt. pagina urmatoare (daca e mai mare decat $this->range si mai mica decat $totalpages) if($nextpage>$this->range && $nextpage<$this->totalpages) $re .=' <a href="'. $this->pag. $pg. $nextpage. '" title="Link '. $nextpage. '">> Urmatoarea</a> '; // adauga >> pentru ultima pagina, daca e mai mare decat $this->range if($this->totalpages>$this->range) $re .=' <a href="'. $this->pag. $pg. $this->totalpages. '" title="Link '. $this->totalpages. '">'. $this->totalpages. ' >></a> '; } } // adauga link-urile intr-un DIV si-l returneaza if(strlen($re)>1) $re ='<div class="linkspg">'. $re. '</div>'; return $re; } }
include('class.pagination.php');3. Creati o instanta de obiect la clasa, cu sintaxa:
<?php // include clasa Pagination include('class.pagination.php'); // creaza obiectul cu instanta la clasa $objPg = new Pagination(); // daca doriti sa modificati numele tabelului, setati proprietatea "table" // $objPg->table = 'nume_tabel'; // pt. a modifica numarul de randuri adaugate in pagina, setati "rowsperpage" // $objPg->rowsperpage = 8; // afiseaza continutul echo $objPg->getMysqlRows(); // afiseaza link-urile de paginare echo $objPg->getLinks(); //sau, cu un sir aditional nume=valoare in link-urile de paginare // echo $objPg->getLinks('id=2'); ?>
<?php // Array cu date $source = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','y','x','z'); // include clasa Pagination include('class.pagination.php'); // creaza obiectul cu instanta la clasa $objPg = new Pagination(); // modifica nr. elemente in pagina $objPg->rowsperpage = 8; // afiseaza continutul echo $objPg->getArrRows($source); // afiseaza link-urile de paginare echo $objPg->getLinks(); //sau, cu un sir aditional nume=valoare in link-urile de paginare // echo $objPg->getLinks('id=2'); ?>
<?php // Un sir cu textul ce va fi paginat $source = 'Aici puteti adauga un sir cu text lung, sau puteti prelua sirul dintr-un fisier extern, de exemplu cu functia file_get_contents().'; // include clasa Pagination include('class.pagination.php'); // creaza obiectul cu instanta la clasa $objPg = new Pagination(); // modifica numarul maxim de caractere pentru textul paginat $objPg->txtchr = 40; // daca doriti sa paginati /impartiti textul intr-un nr. de parti, setati proprietatea "txtpieces" // $objPg->txtpieces = 6; // afiseaza continutul echo $objPg->getText($source); // afiseaza link-urile de paginare echo $objPg->getLinks(); //sau, cu un sir aditional nume=valoare in link-urile de paginare // echo $objPg->getLinks('id=2'); ?>
<input type="checkbox" name="a_name" value="value" checked="checked" />
#id { background:url("path_to_image.png"); background-size:contain; background-repeat:no-repeat; }
var rest8_7 = 8 % 7; alert(rest8_7);
$nr = ceil(3.5); echo $nr; // 4
Alex wants to buy a bike. - Alex vrea sa cumpere o bicicleta.
Leí unos libros. - Am citit niste carti.