Paginanummering V3.0
Versie 1.0 Dit is een functie waarmee je je pagina's kunt nummeren. Ook kun je, als er teveel pagina's zijn, dit inkorten, net zoals google dat doet voorbeeld: als je op pagina 14 zit van de 20 zou je normaal dit hebben: vorige 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 , 15, 16, 17, 18, 19, 20 volgende Je kunt dit ook verkorten: vorige ...12, 13, 14 , 15, 16... volgende dit doe je in de functie met de derde variabele ($scheiding) maar let op: Je moet opgeven hoeveel getallen er na de pagina waar je nu op bent komen. bij het voorbeeld hierboven zou het zo zijn: De SQL kun je zo invullen: En het aantal resultaten per pagina kun je instellen bij de $aantal (als tweede variabele in de functie) Je krijgt de output terug in een resource (je moet dus nog een fetch eroveen heen halen) De array luid: array ( => De query($sql).. met de LIMIT erbij, als je een SQL-text hebt verstuurd als input => De arrays die getoond moeten worden, alleen als je een array als input hebt verstuurd => Alle paginanummers die je wilt (vorige 1, 2, 3, etc) [e-l] => Eerste - Laatste (Dit kun je nog altijd onder je paginanummers zetten om wat makkelijker bij de eerste en laatste pagina te komen (vooral als je gebruikt maakt van de $scheiding => Het totale aantal resultaten wat je zonder LIMIT had gehad ); Ik hoop dat jullie er iets aan hebben! PS: Als er maar 1 pagina is, dan word er geen getal weergegeven Versie 2.0 Jorik's probleem is opgelost! Je kunt een array als input sturen, als de $input (1e variabele in de functie) Je krijgt als output de waarde niet terug, maar , let hier goed op! Ook zit er een nieuwe optie bij: $pagenaam, dit is handig voor als je meerdere keren deze functie gebruikt op 1 pagina. Dan is 't niet handig om steeds $_POST['page'] te gebruiken (kan eigenlijk zelfs niet), maar door deze zelf te bepalen kan dat wel! Ja, scheiding is ook niet verplicht, als je een $pagenaam invult en geen $scheiding wilt, kan dit: Vul gewoon een streepje (-) in om de $scheiding te escapen! Deze word dan NIET gebruikt in 't script! Versie 3.0 Ook de volgorde is nu veranderbaar: Soms wil je de nieuwste resultaten laten zien en dan veranderd pagina 1 (en de anderen) dus continu als er een nieuw resultaat is. Dit hoeft niet meer! Je kunt vanaf nu ook beginnen bij de 'laatste' pagina en dat op die pagina ook de meest recente resultaten staan. Vul gewoon de 5e variabele met 'DESC' in: en alles is omgedraaid, wat heel handig kan zijn, probeer het maar eens uit! Ook is het mogelijk om de 'Volgende' en 'Vorige' te veranderen naar bijvoorbeeld '«' en '»' als je te weinig ruimte hebt, ook zijn er andere combinaties toe te voegen, bijvoorbeeld als je verschillende talen hebt, kun je dit ook op deze manier doen. PS: Vind je een bug, zet dan aub hier neer/stuur een bericht naar mij! Ik zal 't proberen te fixen!
<?php
// Deze functie heb je nodig om de bladwijzer-functie te kunnen gebruiken.
// Deze functie staat ook http://www.phphulp.nl/php/scripts/2/1079/
function url($replace = array(), $url = 'x') {
// De array $geturl zetten, deze zal later alle GET waarden bevatten
$geturl = array();
// De URL geschikt maken, zodat deze gebruikt kan worden (als er geen URL is ingevuld, dan word de huidige URL gebruikt)
$url = $url == 'x' ? $_SERVER['PHP_SELF'] : $url;
$explurl = explode('?', $url);
$url = $explurl[0];
$url = basename($url);
// Als de opgegeven URL hetzelfde is als de URL van de pagina waar je nu op bent, dan zullen alle GET waarden
// ... ook weer meedoen. Als je dit ook wilt bij een URL die niet gelijk is, gebruik dan de functie: url($_GET);
if ($url == basename($_SERVER['PHP_SELF'])) {
global $_GET;
$geturl = $_GET;
}
// Hier worden de GET variabelen uit de opgegeven link gehaalt (stel je vult pagina.php?var=8 in,
// ... dan komt die var=8 ook weer voor in de nieuwe URL)
if (!empty($explurl[1])) {
$explurl2 = explode('&', $explurl[1]);
foreach ($explurl2 as $value) {
$explvalue = explode('=', $value);
$geturl[$explvalue[0]] = $explvalue[1];
}
}
// Hier worden alle GET variabelen die ingevuld werden als GET variabelen omgezet.
foreach ($replace as $key => $value) {
$geturl[$key] = $value;
}
// Hier dan, eindelijk de final touch: Alle GET variabelen worden aan de URL toegevoegd.
$newurl = $url;
foreach ($geturl as $key => $value) {
$newurl .= !empty($key) && !empty($value) ? htmlentities(($newurl == $url ? '?' :'&').$key.'='.urlencode($value)) : '';
}
return $newurl;
}
?>
<?php
function bladwijzer($input, $aantal, $scheiding = '-', $pagenaam = 'page', $volgorde = 'ASC', $vorigevolgende = 'regular') {
// De variabele 'totaal' zetten
if (is_array($input)) {
$totaal = count($input);
}
else {
$inputgedaan = mysql_query($input);
$totaal = mysql_num_rows($inputgedaan);
}
// Wat belangrijke variabelen: Aantal pagina's, huidige pagina en het beginpunt van de gewenste resultatien
$aantpages = ceil($totaal/$aantal);
$nopage = $volgorde == 'ASC' ? 1 : $aantpages;
$page = isset($_GET[$pagenaam]) ? $_GET[$pagenaam] : $nopage;
$begin = ($page-1) * $aantal;
$begin = $begin < 0 ? 0 : $begin;
// De results (en een scheiding tussen sql en array)
if (is_array($input)) {
foreach ($input as $key => $value) {
if ($i >= $begin && $i < ($begin+$aantal)) {
$return['array'][$key] = $value;
}
$i++;
}
}
else {
$return['sql'] = mysql_query($input." LIMIT ".$begin.",".$aantal);
if (mysql_error()) {
error_function('MySQL', mysql_error().'<br />SQL: '.$input." LIMIT ".$begin.",".$eind, 'function_bladwijzer.php', 28);
}
}
// De tekst bepalen voor 'Volgende' en 'Vorige'. Als je weinig ruimte hebt, zijn '«' en '»' wel handig.
$vorigetext = 'Vorige';
$volgendetext = 'Volgende';
$puntjes = '...';
if ($vorigevolgende == 'klein') {
$vorigetext = '»';
$volgendetext = '«';
$puntjes = '…';
}
else {
$vorigetext = 'Vorige';
$volgendetext = 'Volgende';
$puntjes = '...';
}
// Vorige
$vorige = $page > 1 ? '<a href="'.url(array($pagenaam => ($page-1))).'">'.$vorigetext.'</a>' : '';
// Volgende
$volgende = $aantpages >= 1 && ($page+1) <= $aantpages ? '<a href="'.url(array($pagenaam => ($page+1))).'">'.$volgendetext.'</a>' : '';
// Variabelen voor het inspringen (voor de $scheiding)
$i_begin = 0;
$i_eind = $aantpages;
if (is_numeric($scheiding)) {
$i_begin = $page-$scheiding;
$i_eind = $page+$scheiding;
if ($i_begin < 1) {
$i_eind -= $i_begin-1;
}
if ($i_eind > $aantpages) {
$i_begin -= $i_eind-$aantpages;
}
$vorigepuntjes = $page-$scheiding > 1 ? $puntjes : '';
$volgendepuntjes = $page+$scheiding < $totaal/$aantal ? $puntjes : '';
}
// De nummering
for ($i = $i_begin; $i <= $i_eind; $i++) {
if ($i >= 1 && $i <= $aantpages) {
$bladwijzer[] = $page == $i ? '<b>'.$i.'</b>' : '<a href="'.url(array($pagenaam => $i)).'">'.$i.'</a>';
}
}
if (isset($bladwijzer)) {
$return['nummering'] = $vorige.' '.$vorigepuntjes.implode(", ", $bladwijzer).$volgendepuntjes.' '.$volgende;
}
if ($volgorde != 'ASC') {
if (isset($bladwijzer)) {
$bladwijzer = array_reverse($bladwijzer);
$return['nummering'] = $volgende.' '.$volgendepuntjes.implode(", ", $bladwijzer).$vorigepuntjes.' '.$vorige;
}
}
$return['e - l'] = '<a href="'.url(array($pagenaam => $aantpages)).'">Last</a> - <a href="'.url(array($pagenaam => 1)).'">First</a>';
$return['totaal'] = $totaal;
return $return;
}
?>
Reacties
0