ik weet wel hoe je gewoon 1|2|3|4 enz..
misschien heb ja daar wat aan?
Link gekopieerd
Hmmz dat kan ik ook wel. Het gaat mij erom dat als er 100 zijn het erg lelijk wordt.
Hier ben ik nu mee bezig:
<?php
$aCharacters = Range(1, 120);
$iTotalCharacters = Count($aCharacters);
$iCurrent = IsSet($_GET['p']) ? $_GET['p'] : 1;
$bg = 1;
$iIf = 0;
For($iPage = 1; $iPage <= $iTotalCharacters; $iPage++)
{
echo ' <a href="c.php?p='.$iPage.'">'.$iPage.'</a> ';
If($iTotalCharacters > 11)
{
If($iCurrent > 5 && $iCurrent < $iTotalCharacters - 2)
{
If($iPage == 3)
{
echo '||1||';
$iPage = $iCurrent - 2;
}
ElseIf($iCurrent == $iTotalCharacters - 2)
{
echo '||2||';
$iPage = $iTotalCharacters - 1;
}
ElseIf($iPage == $iCurrent + 1)
{
echo '||3||';
$iPage = $iTotalCharacters - 3;
}
}
ElseIf($iCurrent <= 6)
{
If($iPage == 6)
{
echo '||5||';
$iPage = $iTotalCharacters - 3;
}
ElseIf($iCurrent >= 3 && $iPage == $iCurrent + 1)
{
echo '||4||';
$iPage = $iTotalCharacters - 3;
}
}
}
$bg++;
if($bg == $iTotalCharacters)
{
$iPage = $iTotalCharacters;
}
}
?>
Voorbeeld wat ik heb:
Totaal pagina's: 120
Huidige pagina: 35
1 2 3 || 34 35 36 || 118 119 120
Als ik op 116 ben:
1 2 3 ||1|| 115 116 117 ||3|| 118 119 120
Als ik op 117 ben:
1 2 3 ||1|| 116 117 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||3|| 118 ||
Ik weet opzich waar het aan ligt. iPage omhoog zetten kan wel. Maar naar beneden komt hij langs vele nog een keer. Dus ik denk dat ik nog een variabele laat mee tellen en dit de huidige wordt ofzo.
Edit
Ik heb het bijna!!!!!!!!!!!
<?php
$aCharacters = Range(1, 120);
$iTotalCharacters = Count($aCharacters);
$iCurrent = IsSet($_GET['p']) ? $_GET['p'] : 1;
$bg = 1;
$iIf = 0;
For($iPage = 1, $iPageEnd = 1; $iPage <= $iTotalCharacters, $iPageEnd <= $iTotalCharacters; $iPage++, $iPageEnd++)
{
echo ' <a href="c.php?p='.$iPage.'">'.$iPage.'</a> ';
If($iTotalCharacters > 11)
{
If($iCurrent > 5)
{
If($iPage == 3)
{
echo '||1||';
$iPage = $iCurrent - 2;
$iPageEnd = $iCurrent - 2;
}
ElseIf($iPage > 3 && $iCurrent == $iTotalCharacters - 2 && $iPageEnd == $iPage)
{
//$iPage++;
//$iPageEnd++;
}
ElseIf($iCurrent >= $iTotalCharacters - 4 && $iPageEnd >= $iTotalCharacters - 4)
{
}
ElseIf($iPage == $iCurrent + 1)
{
echo '||3||';
$iPage = $iTotalCharacters - 3;
$iPageEnd = $iTotalCharacters - 3;
}
}
ElseIf($iCurrent <= 6)
{
If($iPage == 6)
{
echo '||5||';
$iPage = $iTotalCharacters - 3;
$iPageEnd = $iTotalCharacters - 3;
}
ElseIf($iCurrent >= 3 && $iPage == $iCurrent + 1)
{
echo '||4||';
$iPage = $iTotalCharacters - 3;
$iPageEnd = $iTotalCharacters - 3;
}
}
ElseIf($iCurrent >= $iTotalCharacters - 2)
{
}
}
$bg++;
if($bg == $iTotalCharacters)
{
$iPage = $iTotalCharacters;
}
}
?>
1 probleem!
Wanneer ik op de laatste pagina zit zie ik dit:
1 2 3 ||1|| 119 120
Maar het moet het volgende zijn:
1 2 3 ||1|| 118 119 120
Ik word er knetter geack van gehe :p
Link gekopieerd
Probeer het eens zo:
<?php
$iTotal = 50;
$iCurrent = 10;
for($i = 1; $i <= $iTotal; $i++)
{
if($i < 3)
{
echo $i.' ';
}
elseif($i == 3)
{
echo $i.' ';
if($iCurrent != 4)
{
echo '|| ';
}
}
elseif($i == 4)
{
if($iCurrent == 4)
{
echo $i.' || ';
}
}
elseif($i > 4 && $i < $iTotal - 3)
{
if($i >= $iCurrent - 1 && $i <= $iCurrent + 1)
{
echo $i.' ';
}
}
elseif($i == $iTotal - 3)
{
if($iCurrent < $iTotal - 5)
{
echo '|| ';
}
else
{
echo $i.' ';
}
}
elseif($i > $iTotal - 3)
{
echo $i.' ';
}
}
?>
Wellicht dat er nog wat kleine foutjes in zitten, maar volgens mij doet het grotendeels wat jij wilt...
Wil je meer of minder pagina's zien, dan is het een kwestie van de waarden in de elseif-statements aanpassen.
Link gekopieerd
Misschien een beetje ingewikkeld geworden, maar is getest en werkt.
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
$aCharacters = Range(1, 120);
$iTotalCharacters = Count($aCharacters);
$iCurrent = IsSet($_GET['p']) ? $_GET['p'] : 1;
switch (true)
{
case $iTotalCharacters < 10:
for($i=1; $i<=$iTotalCharacters; $i++)
{
echo ($i == $iCurrent) ? ' '.$i.' ' : ' <a href="c.php?p='.$i.'">'.$i.'</a> ';
}
break;
case $iCurrent < 6:
for($i=1; $i<=6; $i++)
{
echo ($i == $iCurrent) ? ' '.$i.' ' : ' <a href="c.php?p='.$i.'">'.$i.'</a> ';
}
if($iTotalCharacters > 7)
{
echo ' || ';
for($i=($iTotalCharacters -2); $i<=$iTotalCharacters; $i++)
{
if($i <= $iTotalCharacters)
{
echo ($i == $iCurrent) ? ' '.$i.' ' : ' <a href="c.php?p='.$i.'">'.$i.'</a> ';
}
}
}
break;
case $iCurrent > ($iTotalCharacters-5):
for($i=1; $i<=3; $i++)
{
echo ($i == $iCurrent) ? ' '.$i.' ' : ' <a href="c.php?p='.$i.'">'.$i.'</a> ';
}
echo ' || ';
for($i=($iTotalCharacters-5); $i<=$iTotalCharacters; $i++)
{
echo ($i == $iCurrent) ? ' '.$i.' ' : ' <a href="c.php?p='.$i.'">'.$i.'</a> ';
}
break;
default:
for($i=1; $i<=3; $i++)
{
echo ($i == $iCurrent) ? ' '.$i.' ' : ' <a href="c.php?p='.$i.'">'.$i.'</a> ';
}
echo ' || ';
for($i=($iCurrent-1); $i<=($iCurrent +1); $i++)
{
echo ($i == $iCurrent) ? ' '.$i.' ' : ' <a href="c.php?p='.$i.'">'.$i.'</a> ';
}
echo ' || ';
for($i=($iTotalCharacters-2); $i<=$iTotalCharacters; $i++)
{
echo ($i == $iCurrent) ? ' '.$i.' ' : ' <a href="c.php?p='.$i.'">'.$i.'</a> ';
}
}
?>
Edit: Of iets korter genoteerd:
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
$aCharacters = Range(1, 120);
$iTotalCharacters = Count($aCharacters);
$iCurrent = IsSet($_GET['p']) ? $_GET['p'] : 1;
function show($iCurrent, $i)
{
return ($i == $iCurrent) ? ' '.$i.' ' : ' <a href="c.php?p='.$i.'">'.$i.'</a> ';
}
switch (true)
{
case $iTotalCharacters < 10:
for($i=1; $i<=$iTotalCharacters; $i++) { echo show($iCurrent, $i); }
break;
case $iCurrent < 6:
for($i=1; $i<=6; $i++) { echo show($iCurrent, $i); }
if($iTotalCharacters > 7)
{
echo ' || ';
for($i=($iTotalCharacters -2); $i<=$iTotalCharacters; $i++)
{
if($i <= $iTotalCharacters) { echo show($iCurrent, $i); }
}
}
break;
case $iCurrent > ($iTotalCharacters-5):
for($i=1; $i<=3; $i++) { echo show($iCurrent, $i); }
echo ' || ';
for($i=($iTotalCharacters-5); $i<=$iTotalCharacters; $i++) { echo show($iCurrent, $i); }
break;
default:
for($i=1; $i<=3; $i++) { echo show($iCurrent, $i); }
echo ' || ';
for($i=($iCurrent-1); $i<=($iCurrent +1); $i++) { echo show($iCurrent, $i); }
echo ' || ';
for($i=($iTotalCharacters-2); $i<=$iTotalCharacters; $i++) { echo show($iCurrent, $i); }
}
?>
Link gekopieerd
@SanThe: Waarom kies je voor zoveel verschillende loops? Het lijkt mij veel makkelijker om alle pagina's met 1 loop te doorlopen en voor elke pagina te bekijken of hij weergegeven moet worden of niet. A la mijn voorbeeld dus...
Link gekopieerd
De loops zijn allen zeer kort. Die van jou loopt een loop van 50. Ik gebruik alléén loops die ik nodig heb er zit geen enkele overbodige in.
Link gekopieerd
Ik heb dit opgelost met een array... Er zijn ontzettend mooie array functies waar je kan kijken of er waardes bestaan enzo. Ik geef een voorbeeld code:
(direct copy-paste uit een class :$)
<?php
//calculate available pages
$pages = ceil($totalcount/RESULTS_PER_PAGE);
//current page
if(isset($_GET['p']) && is_numeric($_GET['p']) && $_GET['p'] > 0 && $_GET['p'] <= $pages)
{
$this->current_page = $_GET['p'];
}
else
{
/**
* The requested page is not available
* Check if the page below the requested page exists
*
* This is usefull when we remove the last item from the list while
* the list item is placed on the last page without records.
*/
if(isset($_GET['p']) && is_numeric($_GET['p']) && ($_GET['p']-1) == $pages)
{
$this->current_page = $pages;
}
}
/**
* If we have more than 7 pages generate advanced paging
*/
if($pages > 7)
{
$page_numbers = array();
$page_numbers[] = 1;
$above = $this->current_page + 3;
$above = ($above > $pages-1) ? $pages : $above;
$above = ($above == ($pages-2)) ? ($pages-2) : $above;
$under = $this->current_page - 3;
$under = ($under < 2) ? 2 : $under;
$under = ($under == 3) ? 2 : $under;
for($i=$under;$i<$above;$i++)
{
$page_numbers[] = $i;
}
$page_numbers[] = $pages;
}
elseif($pages == 0)
{
//workaround when we have zero results
$page_numbers[] = 1;
$pages = 1;
$this->current_page = 1;
}
else
{
//easy paging
$page_numbers = range(1,$pages);
}
?>
Er zat nog 1 klein bugje in maar dit is het idee.
Aan het eind bevat de array $page_numbers de nummers die je wilt weergeven.
Nu heb ik in mijn template een klein checkje erin zitten of het vorige getal niet meer gelijk is aan huidig getal-1 dan even scheidings tekens zetten.
Nogmaals, dit is geen werkende code maar een voorbeeld :)
Link gekopieerd
Ik ben er ook achter. Kwam er achter toen ik net me computer uit gezet had. Haha.
Ik moest nog 1 if-statement bij ||2|| :) Om te controleren of $iCurrent gelijk is aan $iTotalCharacters.
Ik ga het zo testen. Maar iig thnkz en zal die van jullie ook even door kijken.
Link gekopieerd