Hi!
Ich habe folgendes benutzt um den zusatz Wert für rechts zu berechnen:
if($_GET[p] > 3) {
$start = $_GET[p] - 3;
}
if($_GET[p] <= ($pnb - 4)) {
$end = $_GET[p] + 4;
}
Damit beachtest du erstmal nur den Normalfall. Im Nicht-Normal-Fall sind zudem $start und/oder $end übrigens nicht definiert. Mit nicht definierten Werten weiterzurechnen ist zwar unter PHP gestattet, aber wenig sinnvoll bis fehleranfällig. Wer weiß, was irgendwer vorher schon mit diesen Variablen angestellt hat.
for($c=$start; $c>$end; $c++) {
Du müsstest dann hier Notice-Meldungen angezeigt bekommen, wenn du das error_reporting auf E_ALL (und display_errors auf on) stehen hast.
Meine Idee war, dass es immer geht also auch bei 1 Seite oder 3 geht.
Für die Ränder sind Ausnahmen zu betrachten. Du benötigst auf der anderen Seite einen Korrekturwert, den du zusätzlich zu den drei normalen Seiten zuschlägst. Desweiteren ist der Fall mit weniger als 7 Seiten zu berücksichtigen.
Ich verstehe das mit max noch nicht ganz. Im php manual steht es werden arrays benutzt.
Da steht aber auch eine zweite Syntax mit Einzelwerten.
Also mit den Code funktionieren alle Werte die zwischen 4 und letzte Seite - 4 liegen.
Jetzt kommen wir zum Problem dass ich noch nicht lösen konnte.
Also was rechts dazu kommt habe ich so gelöstif(($_GET[p] - 3) < 1) {
$ends_add = ($_GET[p] -3) * -1;
}
Ja, so gehts auch (abgesehen vom Nicht-Vorhandensein von $ends_add, wenn die Bedingung nicht zutrifft). Das was du mit der Bedingung sicherstellst, mache ich mit max(0, ...). Ich berechne den Wert mit einem Einzeiler, mit der angenehmen Nebenwirkung, dass immer ein Ergebnis entsteht, das einer Variable zugewiesen wird und nicht nur manchmal. (Statt *-1 kannst du übrigens auch einfach nur ein Minuszeichen vor die öffnende Klammer setzen.)
Jetzt fehlt noch links und dazu kommt, dass ich noch überprüfen muss ob es auf der anderen Seite noch genung Seiten gibt?
Vielleicht klappt es ja mit der max() funktion
Nein, hier benötigst du nach meiner Methode das Pendant min(). Die Logik zum Einsatz von min() und max() zur Begrenzung auf einen Minimal- oder Maximalwert ist genau entgegengesetzt als die Funktionen heißen.
f: feststehender Wert, v: variabler (zu prüfender) Wert
min(f, v)
Solange v kleiner als f ist, ist das Ergebnis v, ansonsten f. Das Ergebnis ist also maximal f.
max(f, v)
Solange v größer als f ist, ist das Ergebnis v, ansonsten f. Das Ergebnis ist also minimal f.
Aber zurück zum Thema. maxpages minus p ergibt die Differenz zum rechten Rand. Die darf nicht größer als 3 werden. 3 minus differenz ergibt die Anzahl der links hinzuzufügenden Seiten.
Prüfung: 3 - differenz = ?
3 - (>3) -> gibt es nicht, wird abgefangen.
3 - 3 = 0
3 - 2 = 1
usw.
Bleibt noch der Fall abzufangen, dass jemand als aktuelle Seite einen Wert kleiner als 0 (oder 1, wenn du mit 1 anfängst zu zählen) und der maximalen Seitenzahl angibt.
Lo!