Pagination class
Često koristim klase u php pogotovu za HTML5
Pager za tabelaran prikaz baze podataka u nekoliko stranica sa tabelama koje imaju odredjenu velicinu
Poenta je u klasi Pagination koja je pogon za kreiranje tabla u jednoj stranici
Klasa Pagination preosleđujemo parametre koje zatim štampamo metodama a izborom Prev i Next kao i najvaznije jezicke sa stranicama
OVA KLASA JE AUTORSKO DELO I SLOBODNA JE ZA DALJE KORISCENJE, IZMENE, DOPUNE ZA SVE LJUBITELJE PHP a
by Miroslav Mitic 06.10.2017.
email : php@wind.in.rs
NAPOMENA: Lično volim da koristim Bootstrap i on je implementiran u ovom primeru,vi menjajte po zelji
class Pagination
{
// ----- parametri konekcije --------------
private $servername;
private $username ;
private $password ;
private $dbname ;
// --- --- glavne promenjive -----------
private $upit; // glavni upit, u obzir dolaze upiti koje on vrati
private $ukupno_slogova; // ili ti broj zapisa koje vraca upit
private $br_strana; // samo ime kaze
private $limit = 30; // broj podataka po strani (ima default vrednost)
public $izabrani =1; // default prva strana
public $page = 1; // tekuca stranica
private $polja = array(); // polja za prikaz
function __construct ( $_parametri, $_p, $_upit,$_limit)
{
$this->set_DB_params($_parametri);
$this->set_polja($_p);
$this->set_Limit ($_limit);
$this->set_Upit($_upit);
$this-> set_Ukupno_Slogova();
$this-> set_br_strana();
}
//-----------------------------
//- ---- --- SETERI -----------
//-----------------------------
function set_DB_params($parametri)
{
/* Ovo ne zavisi od korisnickog unosa */
$this->servername = $parametri[0];
$this->username = $parametri[1];
$this->password = $parametri[2];
$this->dbname = $parametri[3];
}
// ---------------------------------------------
function set_polja($_polja)
{
for($i =0; $i
}
// ---------------------------------------------
function set_Limit ($data)
{
$this->limit = $data;
}
// ---------------------------------------------
function set_Upit($data)
{
$this->upit = $data;
}
// ---------------------------------------------
function set_Ukupno_Slogova()
{
try {
$conn = new PDO("mysql:host=$servername;dbname=$this->dbname", $this->username, $this->password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// echo "Konekcija uspela
";
$ukupno = $conn->query($this->upit);
$this->ukupno_slogova = $ukupno->rowCount();
}
{
echo " Greska ne mogu da odredim koliko ima zapisa : " . $e->getMessage();
}
}
function set_br_strana()
{
$this->br_strana = (int) ( $this->ukupno_slogova / $this->limit ) ;
$br_na_zadnjoj_strani = $this->ukupno_slogova - $this->br_strana* $this->limit;
if($br_na_zadnjoj_strani>0) {$this->br_strana++;}
}
// --------------
// -- GETERI ----
// ---------------
private function getControlData()
{
/* Ova funkcija je samo za testiranje klase u toku programiranja */
echo "< h3 >Kontrola parametara klase - samo za test < /h3 > ";
echo " Upit " . $this->upit . "<BR>";
echo " DB name " . $this->dbname . "<BR>";
echo " Limit " . $this->limit . "<BR>";
echo " ukupno slogoava " . $this->ukupno_slogova . "<BR>";
echo " Broj strana " . $this->br_strana . "<BR>";
echo "Polja za prikaz";
print_r($this->polja);
}
// -------------------
// print funkcije
// -------------------
public function print_pages()
{
print '<ul class="pagination">';
for ($i =0 , $counter = 1; $i< $this->br_strana; $i++)
{
printf ( '%s%s%s%s%s', '<li> <a href="?page=' ,$counter, '" >' , $counter , '</a></li>');
$counter++;
}
print '</ul>';
}
// ----------------------
public function print_prew()
{
if(isset($_GET['page']) )
{ $this->page = $_GET['page']-1; }
else $this->page =1;
if($this->page <1) {$this->page = 1;}
echo "<a href= ?page=". $this->page . " >Prethodni</a>";
}
// ------------------------
public function print_next()
{
if(isset($_GET['page']) )
{ $this->page = $_GET['page']+1; }
else $this->page =1;
if($this->page <1) {$this->page = 1;}
echo "<a href= ?page=". $this->page . " > Sledeci</ >";
if ($this->page > $this->br_strana) {$this->page = $this->br_strana;}
}
// ---------------------
function stampa_tabelu()
{
$this-> izabrani = $_GET['page'];
try {
$conn = new PDO("mysql:host=$servername;dbname=$this->dbname", $this->username, $this->password);
// set the PDO error mode to exception uvek ovako
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$of = ($this->izabrani -1 ) * $this->limit;
$upit1 = $this->upit . "LIMIT " . $of . "," . $this->limit ;
print'<table class="table table-striped">'; // zato sto volimo bootstrap, mozete naravno ovo da izmenite
//$polja = array ('ID','MESTO' , 'TIP' , 'NAZIV_DELA', 'DATUM', 'NAPOMENE'); // polja tabele baze podataka
echo "< tr >";
for($i =0;$i< count($this->polja) ; $i++)
{
echo '<th >' .$this->polja[$i]. '</ th >';
}
echo "< /tr >";
foreach( $conn->query($upit1) as $row)
{
echo "< tr >";
for($i =0; $i< count($this->polja) ; $i++)
{
echo '<td >' .$row[$i]. '</td >';
}
echo "< tr >";
}
print '</table>';
}
catch (Exception $e)
{
echo " table print error - Connection failed: " . $e->getMessage();
}
}
// -------------------
}
// kraj klase
$_parametri = array('localhost','boss','neka_prilicno_zaguljena_sifra','maticni_naziv_baze podataka');
$_polja_za_prikaz = array('ID','MESTO' , 'TIP' , 'NAZIV_DELA', 'DATUM', 'NAPOMENE');
// polja tabele baze podataka koja zelimo prikazati
$upit = "SELECT * FROM interv ";
$prikaza_po_stranici = 30;
$Stranicenje = new Pagination ( $_parametri, $_polja_za_prikaz, $upit, $prikaza_po_stranici);
// $Stranicenje ->getControlData(); // samo za tesitranje
?>
<div class="container">
<h2>Pager</h2>
<p> Pagination klasa - TEST:
<ul class="pager">
<< li class="previous">
<?php
$Stranicenje-> print_prew();
?>
</li>
<?php
$Stranicenje-> print_pages();
?>
<li class="next">
<?php
$Stranicenje-> print_next();
?>
</li>
<br><?php
$Stranicenje->stampa_tabelu();
?>
</div >
< /div >
pvc: 613