Avatar billede JJ77 Juniormester
26. marts 2006 - 03:02 Der er 4 kommentarer og
1 løsning

Vis maks 25 sider i paging

Jeg har nedenstående paging som virker fint. Men mit problem er at den bare viser antal sider uendeligt, så der bare bliver vist flere linier med links. Kan man ikke få den til at stoppe ved 25 og så vise et eller andet ala, se næste 25 eller noget i den stil.. er åben for forslag :)

Det er selve linksene i pagingen, der maks skal være 25 af. Hvis der fx er rigtig mange annoncer og der er over 25 sider (med 20 annoncer pr side), så bliver paging linksene vist på flere linier hvilket ikke er optimalt rent designmæssigt:)
Forrige 1 2 3 4 5 ... 23 24 25 Næste


$pr_side = "20"; //Definerer antal resultater pr. side

$s = (isset($_GET['s']) ? intval($_GET['s']) : 0); // Så er der også input-validering "NY KODE"

if (!isset($s))
{
    $s = "0"; //Tjekker om $s - som står for start - er sat, hvis ikke sættes den
}

if(!isset($_GET['selectName']) || $_GET['selectName']=="") {
    $g_total = mysql_query("select count(id) as total from salgAfProdukt
    WHERE gruppe LIKE '%".$_GET['gruppe']."%' AND (produkt LIKE '%".$_GET['search']."%' OR supplerendeTekst LIKE '%".$_GET['search']."%')") or die(mysql_error());
} else {
    $g_total = mysql_query("select count(id) as total from salgAfProdukt
    WHERE gruppe LIKE '%".$_GET['gruppe']."%' AND (produkt LIKE '%".$_GET['search']."%' OR supplerendeTekst LIKE '%".$_GET['search']."%')
    AND salgAfProdukt.postNr BETWEEN LEFT('".$_GET['selectName']."',4) AND RIGHT('".$_GET['selectName']."',4)
    AND kategori LIKE '%".$_GET['selectKategori']."%'") or die(mysql_error());
}

$total = mysql_result($g_total,0);
if($total>$pr_side)
{
if ($total > $_GET['s']+3){
##
#Find ud af om derskal være et Forrige link
##
if ($_GET['s'] >= $pr_side) { //Tjekker om værdien af $s er større eller lig $pr_side
    $previous_s = $_GET['s']-$pr_side; //Regner ud hvor mysql skal starte hvis forrige side kaldes
    echo "<a href='?s=$previous_s&search=$_GET[search]&selectKategori=$_GET[selectKategori]&selectName=$_GET[selectName]&gruppe=$_GET[gruppe]'><font color=\"#4682B4\">Forrige</font></a> "; //Udskriver linket
}

##
#Find ud af hvis/hvor mange sider der er rows til
##
$page = 1; //Definerer hvor sidetal skal starte
for($start=0; $total > $start; $start=$start+$pr_side){ //For-løkke der kører indtil der ikke er nok rows til en side mere
    if ($start != $_GET['s']) { //Tjekker om linket vil komme til at pege på den side man er på
        echo "<a href='?s=$start&search=$_GET[search]&selectKategori=$_GET[selectKategori]&selectName=$_GET[selectName]&gruppe=$_GET[gruppe]'><font color=\"#4682B4\">$page</font></a> "; //...hvis ikke, udskrives link med værdien af $page
    } else { //Ellers, dvs. hvis linket vil pege på den side man er på..
        echo "<font color=\"#000000\">$page </font>"; //...udskrives værdien af $page bare, altså ikke som link
    }
    $page++; //Lægger en til $page til næste gang løkken køres
}

##
#Find ud af om der skal være et næste link
##
if ($total > $_GET['s']+$pr_side) { //Tjekker om der er flere sider
    $next_s = $_GET['s']+$pr_side; //Regner ud hvor mysql skal starte hvis næste side kaldes
    echo "<a href='?s=$next_s&search=$_GET[search]&selectKategori=$_GET[selectKategori]&selectName=$_GET[selectName]&gruppe=$_GET[gruppe]'><font color=\"#4682B4\">Næste</font></a>"; //Udskriver linket "næste"
Avatar billede jakobdo Ekspert
26. marts 2006 - 11:02 #1
Prøv at ret din kode: FIND UD AF HVIS/HVOR MANGE SIDER DER ER ROWS TIL.

Så indsætter du koden:

##
#Find ud af hvis/hvor mange sider der er rows til
##
$page = 1; //Definerer hvor sidetal skal starte
$maxPages = 5; //Hvor mange sider der skal være foran og efter aktuelle side?

//For-løkke der kører indtil der ikke er nok rows til en side mere
for($start=0; $total > $start; $start=$start+$pr_side)
{
    //Tjekker om linket vil komme til at pege på den side man er på
    if ($start != $_GET['s'])
    {
        //Tjekker om vi skal udskrive sidenummer eller ej - ikke et pænt hack.
        if(($start < ($offset+($pr_side*$maxPages))) && ($start >= ($offset-($pr_side*$maxPages))))
        {
            echo "<a href='?s=$start&search=$_GET[search]&selectKategori=$_GET[selectKategori]&selectName=$_GET[selectName]&gruppe=$_GET[gruppe]'><font color=\"#4682B4\">$page</font></a> "; //...hvis ikke, udskrives link med værdien af $page
        }
    }
    //Ellers, dvs. hvis linket vil pege på den side man er på..
    else
    {
        echo "<font color=\"#000000\">$page </font>"; //...udskrives værdien af $page bare, altså ikke som link
    }
    $page++; //Lægger en til $page til næste gang løkken køres
}
Avatar billede JJ77 Juniormester
26. marts 2006 - 15:18 #2
Der var da noget af det jeg tænkte på, men det virker lidt mystisk.. Det er kun sidste link som ændrer sig (16) Forrige 1 2 3 4 5 6 7 8 9 10 16 Næste
. Desuden stusser jeg lidt over variablen $offset?
Ku være fed hvis det hele rykkede sig så det ser således ud hvis den sættes til at vise 10 sider: Forrige 6 7 8 9 10 11 12 13 14 15 Næste
Avatar billede jakobdo Ekspert
26. marts 2006 - 15:41 #3
$offset var en jeg brugte, du skal bruge $_GET['s']
Avatar billede JJ77 Juniormester
26. marts 2006 - 17:12 #4
Det ser nu ud som nedenstående, og det lader til at det virker perfekt:) Ser det helt rigtigt ud?.. vil bare lige være helt sikker inden jeg sætter det i alle dokumenter... og mange tak for hjælpen:) igen igen.

##
#Find ud af hvis/hvor mange sider der er rows til
##
$page = 1; //Definerer hvor sidetal skal starte
$maxPages = 5; //Hvor mange sider der skal være foran og efter aktuelle side?

//For-løkke der kører indtil der ikke er nok rows til en side mere
for($start=0; $total > $start; $start=$start+$pr_side)
{
    //Tjekker om linket vil komme til at pege på den side man er på
    if ($start != $_GET['s'])
    {
        //Tjekker om vi skal udskrive sidenummer eller ej - ikke et pænt hack.
        if(($start < ($_GET['s']+($pr_side*$maxPages))) && ($start >= ($_GET['s']-($pr_side*$maxPages))))
        {
            echo "<a href='?s=$start&search=$_GET[search]&selectKategori=$_GET[selectKategori]&selectName=$_GET[selectName]&gruppe=$_GET[gruppe]'><font color=\"#4682B4\">$page</font></a> "; //...hvis ikke, udskrives link med værdien af $page
        }
    }
    //Ellers, dvs. hvis linket vil pege på den side man er på..
    else
    {
        echo "<font color=\"#000000\">$page </font>"; //...udskrives værdien af $page bare, altså ikke som link
    }
    $page++; //Lægger en til $page til næste gang løkken køres
}
Avatar billede jakobdo Ekspert
26. marts 2006 - 17:22 #5
Det ser rigtigt ud ja!
Og tak for point!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester