Blätterfunktion mehrere Abfragen

Funktioniert wunderbar soweit, nur irgendwo ist ein Fehler bei der der Seitengenerierung.

Mir wird angezeigt:

Seiten: 0 | 2 | 3 | 4 wenn ich auf Page 0 bin.

Wenn ich auf Page 1 bin siehts so aus: 1 | 1 | 3 | 4

irgendwo iss da noch der Wurm drin, ich suche mal :)

PHP:
// Aktuelle Seite aus URL ermitteln

$aktseite = preg_replace( "/[^0-9]/i", "", $_GET["searchpage"] ); 
$aktseite = (int) $aktseite;

//Die Items in Seiten aufteilen
$seiten = array_chunk($searchitems, 10, true);

//Navigator erstellen
foreach($seiten as $searchpage => $searchitems){
    //Die Anzuzeigenden beginnen nicht mit 0
    $showPageNr = $searchpage+1;
    if($aktseite == $searchpage){
        $navEntries[] = "<b>{$searchpage}</b>";        
    }else{
        $navEntries[] = "<a href='index.php?search={$search}&amp;searchpage={$searchpage}'>{$showPageNr}</a>";
    }
}
echo implode(' | ', $navEntries);

echo '<hr />';

//Die dazugehörigen Items ausgeben
foreach($seiten[$aktseite] as $item){
    //Im Pfad die ID und die Source mitgeben. Somit kannst du nachher die Richtigen Daten abholen
    $itemHTML[] = "<a href='?itemId={$item['id']}&source={$item['source']}'>{$item['titel']}</a>";    
}
echo implode("<br />\n", $itemHTML);
 
Du gibst dort $searchpage aus und nicht $showPageNr. Das ist der Fehler.
Der Fehler war schon in meinem Beispiel falsch. Habs dort korrigiert
 
Irgendwas stimmt immernoch nicht,

jetzt habe ich zwar z.b. Seite 1 | 2 | 3 | 4

aber wenn ich auf Seite 1 bin wird mir Seite 2 als aktuell angezeigt und die "Items" für Seite 4 werden nicht mehr ausgegeben.

Fehlerausgabe für die jeweils letzte Seite in diesem Fall Seite 4von4:

Notice: Undefined offset: 4 in search.php on line 170

Warning: Invalid argument supplied for foreach() in search.php on line 170

Notice: Undefined variable: itemHTML in search.php on line 175

Warning: implode() [function.implode]: Invalid arguments passed in search.php on line 175

PHP:
//Die Items in Seiten aufteilen
$seiten = array_chunk($searchitems, 10, true);

//Navigator erstellen
foreach($seiten as $searchpage => $searchitems){
    //Die Anzuzeigenden beginnen nicht mit 0
    $showPageNr = $searchpage+1;
    if($aktseite == $searchpage){
        $navEntries[] = "<b>{$showPageNr}</b>";        
    }else{
        $navEntries[] = "<a href='index.php?search={$search}&amp;searchpage={$showPageNr}'>{$showPageNr}</a>";
    }
}
 
Warum machst du ein Link auf $showpage? Der Link sollte auf $searchpage gehen und $showpage anzeigen
PHP:
        $navEntries[] = "<a href='index.php?search={$search}&amp;searchpage={$searchpage}'>{$showPageNr}</a>";
 
Ah Ok hab ich wohl übersehen, jetzt passt alles.

Die Seitennummer in der URL ist bei Seite 1 jetzt 0, was aber stimmen müsste weil wir ja unten 1 dazugezählt haben.

Eine Frage noch, wofür machst du die Klammern im Link ?

PHP:
$navEntries[] = "<a href='index.php?search={$search}&amp;searchpage={$searchpage}'>{$showPageNr}</a>";

Interessiert mich nur weil ich das so noch nie gesehen habe :)
 
Eine Sache hab ich noch,

wie errechne ich die Datensätze pro Seite, für eine Anzeige z.b. Datensatz 1-10 auf Seite 1 dann 11-20 auf Seite 2 usw...

Ich habe die Anzahl der Datensätze und die Anzahl der Seiten sowie die aktuelle Seite.

PHP:
// Anzahl der Einträge gesamt
$eintraege = count($seiten);

//Aktuelle Seite die gerade gewählt ist
$aktuelleseite = $aktseite +1;

//Datensätze pro Seite
$proSeite = 10;
 
Wieso machst du einen count von $seiten, wenn du doch die Einträge willst? Nagut, das Variablen-Konstrukt kenne ich nicht.

PHP:
// Anzahl der Einträge gesamt 
$eintraege = count($seiten); 

//Aktuelle Seite die gerade gewählt ist 
$aktuelleseite = $aktseite +1; 

//Datensätze pro Seite 
$proSeite = 10;

$akteintrag = $aktseite*$proSeite +1;
//Hier dann einfach eine foreach auf 10... nehme absichtlich aktseite, weil du sonst die aktuelle Seite mit abziehst... ;)

Wenn du auf Seite 5 bist, hast du somit Eintrag 41 ausgewählt, weil die ersten 40 ja schon vorher kamen.
 
Da wir bei array_chunk() den Flag true gesetzt haben, behalten die Splits die Indexe von vorher. Also denselben Index den sie schon in $searchitems hatten. Ich geh aml davon aus, dass du dort keinen expliziten Index gesetzt hattest. Ergo hast du da die Indexe 0 bis Anzahl-1 drin.
Jetzt kannst du auf den aktuellen Split zugreiffen und mit reset() den ersten Wert, sowie mit end() den letzten Wert auslesen (natürlich +1, da der Index bei 0 beginnt, deine Zählung aber bei 1).
Das kannst du gerade dort machen, wo du die aktuelle Seite eh schon ermittels
PHP:
foreach($seiten as $searchpage => $searchitems){
    //Die Anzuzeigenden beginnen nicht mit 0
    $showPageNr = $searchpage+1;
    if($aktseite == $searchpage){
        $navEntries[] = "<b>{$showPageNr}</b>";        
        $start = reset(array_keys($searchitems)) + 1;       
        $end = end(array_keys($searchitems)) + 1;
 
Zurück