Seitenanzahl verkürzen

lammpee

Mitglied
Hi

Ich habe mal ne Frage an euch. Hat wer sich schon einmal ein Seitenanzahl verkürzen script geschrieben ?

Ich will nähmlich auch eins machen nur weiß net wo ich anfangen soll.
Ich habe bis jetzt ein script zum Seiten aufteilen und weiß jetzt nicht wo ich was verändern solte könntet ihr mir sagen was man dafür alles machen muss?

Mein script:
PHP:
// Anzeige der Daten==>

$gbshow = $_GET["gbshow"];  //Abfrage auf welcher Seite man ist

//Wenn man keine Seite angegeben hat, ist man automatisch auf Seite 1
if(!isset($gbshow))
   {
   $gbshow = 1;
   }

//Einträge pro Seite: Hier 15 pro Seite
$gbeintraege_pro_seite = 6;



$gbstart = $gbshow * $gbeintraege_pro_seite - $gbeintraege_pro_seite;


$gbabfrage = "SELECT uhrzeit,datum,name,email,web_adresse,text FROM gastbook ORDER BY ID desc LIMIT $gbstart, $gbeintraege_pro_seite";
$gbergebnis = mysql_query($gbabfrage);

while ($gbdata = mysql_fetch_array ($gbergebnis, MYSQL_NUM))

    {
   echo $gbdata->id."<br>"; // Hier die Ausgabe der Einträge
$zusatztext1 = htmlspecialchars($gbdata[5], ENT_QUOTES);
$zusatztext2 = gbsmileize($zusatztext1);
$zusatztext3 = gbtext($zusatztext2);

echo "
<hr width=320 color=#ff6600>
<table bgcolor=#ffcc00 width=320><td align=center>
<table cellpadding=0 cellspacing=0 width=300 border=1>
<tr>
<td class=gastbeitragfelder width=150><font face=arial>$gbdata[0],$gbdata[1]</font></td>
<td class=gastbeitragfelder width=150><font face=arial>Email: <a  class=Schrift_Link_1 href=mailto:$gbdata[3]>$gbdata[3]</a></font></td>
</tr>
<tr>
<td class=gastbeitragfelder width=150><font face=arial>Name: $gbdata[2]</font></td>
<td class=gastbeitragfelder width=150><font face=arial>Web adresse:<a  class=Schrift_Link_1 href=http://$gbdata[4] target=_blank>$gbdata[4]</a></font></td>
</tr>
</table></td></table>
<table border=0 cellpadding=0 cellspacing=0 bgcolor=#ffcc00 width=320><td align=center>
<table cellpadding=0 cellspacing=0 width=300 border=1>
<td  class=gastbeitragfelder ><font face=arial>Text:<br><hr color=#000000>$zusatztext3</font></td></table>
</td></table>
<hr width=320 color=#ff6600>
";

}



$gbresult = mysql_query("SELECT id FROM gastbook");
$gbmenge = mysql_num_rows($gbresult);

//Errechnen wieviele Seiten es geben wird
$gbwieviel_seiten = $gbmenge / $gbeintraege_pro_seite;

//Ausgabe der Seitenlinks:
echo "<p></p><div align=\"\">";
echo "<font face=arial><b>Seite:</b></font> ";


//Ausgabe der Links zu den Seiten
for($gba=0; $gba < $gbwieviel_seiten; $gba++)
   {
   $gbb = $gba + 1;

   //Wenn der User sich auf dieser Seite befindet, keinen Link ausgeben
   if($gbshow == $gbb)
      {
      echo "  <font face=arial><u><b>$gbb</b></u></font> ";
      }

   //Aus dieser Seite ist der User nicht, also einen Link ausgeben
   else
      {
      echo "  <font face=arial><a class=Schrift_Link_1 href=\"?show=11&gbshow=$gbb\">$gbb</a></font> ";
      }


   }
echo "</div></p>";
echo "</form>";
}
?>

Bsp:

So ist es jetzt: 1 2 3 4 5 6 7 8 9

So wiel ich es haben: 1 2 ... 8 9
 
Sowas gab es hier wenn ich mich recht erinnere schonmal.
Guck mal mit der Suchfunktion nach Blaetterfunktion oder sowas in der Richtung, da duerftest Du was finden.
 
Hi!

Also im Prinzip ist das ganz einfach. Du brauchst ja nur 3 Dinge zu wissen:

1. wieviele Seiten gibt es insgesamt?
2. wieviele Seiten sollen ausgelassen werden?
3. ab welcher Seite soll ausgelassen werden?

Wenn du das weisst, dann durchlaufe einfach wie gewohnt deine for-Schleife und prüfst dabei aber ob du dich an der Stelle befindest, ab der ausgelassen werden soll. Wenn das zutrifft, gibst du "..." aus und setzt die Laufvariable einfach um die aktuelle Stelle addiert mit der Anzahl der ausgelassenen Seiten weiter nach vorne.

Der Quelltext:

PHP:
$anzahl      = 9;
$auslassen = 5;
$ab            = 2;

for ($j = 1; $j <= $anzahl; $j++) {

        echo $j."&nbsp;";

        if ($j == $ab) {

                  echo "...&nbsp;";
                  $j = $j+$auslassen;
        }
}

D.h.: es gibt insgesamt 9 Seiten ($anzahl) und ab der 2. Seite ($ab) sollen 5 Seiten ($auslassen) ausgelassen werden.

Simpel aber hoffe es hilft dir weiter.
 
so habe mal einbisschen geguckt und is ja alles schön und gut. Aber der fängt immer bei seite 1 an diese punkte zugeben. Wie kann ich es machen das er sie net mehr gibt ? sonder erst ab 4 oder 3 und wie kriege ich die 0 wech ?

PHP:
// Anzeige der Daten==>

$gbshow = $_GET["gbshow"];  //Abfrage auf welcher Seite man ist

//Wenn man keine Seite angegeben hat, ist man automatisch auf Seite 1
if(!isset($gbshow))
   {
   $gbshow = 1;
   }

//Einträge pro Seite: Hier 15 pro Seite
$gbeintraege_pro_seite = 1;



$gbstart = $gbshow * $gbeintraege_pro_seite - $gbeintraege_pro_seite;


$gbabfrage = "SELECT uhrzeit,datum,name,email,web_adresse,text FROM gastbook ORDER BY ID desc LIMIT $gbstart, $gbeintraege_pro_seite";
$gbergebnis = mysql_query($gbabfrage);

while ($gbdata = mysql_fetch_array ($gbergebnis, MYSQL_NUM))

    {
   echo $gbdata->id."<br>"; // Hier die Ausgabe der Einträge
$zusatztext1 = htmlspecialchars($gbdata[5], ENT_QUOTES);
$zusatztext2 = gbsmileize($zusatztext1);
$zusatztext3 = gbtext($zusatztext2);

echo "
<hr width=320 color=#ff6600>
<table bgcolor=#ffcc00 width=320><td align=center>
<table cellpadding=0 cellspacing=0 width=300 border=1>
<tr>
<td class=gastbeitragfelder width=150><font face=arial>$gbdata[0],$gbdata[1]</font></td>
<td class=gastbeitragfelder width=150><font face=arial>Email: <a  class=Schrift_Link_1 href=mailto:$gbdata[3]>$gbdata[3]</a></font></td>
</tr>
<tr>
<td class=gastbeitragfelder width=150><font face=arial>Name: $gbdata[2]</font></td>
<td class=gastbeitragfelder width=150><font face=arial>Web adresse:<a  class=Schrift_Link_1 href=http://$gbdata[4] target=_blank>$gbdata[4]</a></font></td>
</tr>
</table></td></table>
<table border=0 cellpadding=0 cellspacing=0 bgcolor=#ffcc00 width=320><td align=center>
<table cellpadding=0 cellspacing=0 width=300 border=1>
<td  class=gastbeitragfelder ><font face=arial>Text:<br><hr color=#000000>$zusatztext3</font></td></table>
</td></table>
<hr width=320 color=#ff6600>
";

}



$gbresult = mysql_query("SELECT id FROM gastbook");
$gbmenge = mysql_num_rows($gbresult);

//Errechnen wieviele Seiten es geben wird
$gbwieviel_seiten = $gbmenge / $gbeintraege_pro_seite;

//Ausgabe der Seitenlinks:
echo "<p></p><div align=\"\">";
echo "<font face=arial><b>Seite:</b></font> ";


//Ausgabe der Links zu den Seiten
for($gba=0; $gba < $gbwieviel_seiten; $gba++)
   {
   $gbb = $gba + 1;

   //Wenn der User sich auf dieser Seite befindet, keinen Link ausgeben
   if($gbshow == $gbb)
      {
      echo "  <font face=arial><u><b>$gbb</b></u></font> ";
      }

   //Aus dieser Seite ist der User nicht, also einen Link ausgeben
   else
      {
      echo "  <font face=arial><a class=Schrift_Link_1 href=\"?show=11&gbshow=$gbb\">$gbb</a></font> ";
      }


   }

$gbeintragzaehler1 = $gbeintragzaehler - 5;
for($gba=0; $gba < $gbwieviel_seiten; $gba++) {

        echo $gba."&nbsp;";

        if ($gba == $gbeintraege_pro_seite) {

                  echo "...&nbsp;";
                  $gba = $gba+$gbeintragzaehler1;
        }
}

echo "</div></p>";
echo "</form>";
}
?>
 
Schau auf welcher Seite du dich befindest.
Zähle die Seite, die links und rechts davon kommen müssen.
Prüfe jeweils, ob die Seitenzahl so groß ist, dass Punkte kommen sollen.
Wenn nicht einfach die Seitenzahlen ausgeben.
Wenn ja jeweils beispielsweise die nächsten 2 und die letzten 2 ausgeben.

Ist doch ganz einfach ;)
 
Wenn du meinst, dass der sofort nach der 1 die 3 Punkte ausgibt, dann glaube ich, dass das Problem ein Tippfehler ist:

$gbeintraege_pro_seite = 1;

Der Wert müsste doch 15 sein wenn ich dein Script richtig verstehe.

Damit du die 0 wegbekommst, musst du gaaanz weit die Augen aufmachen und nochmal mein Script angucken. Die for-Schleife fängt nämlich nicht bei 0 sondern bei 1 an zu zählen. Also muss der Kopf deiner for-Schleife so aussehen:

PHP:
for($gba=1; $gba <= $gbwieviel_seiten; $gba++)

Beachte auch, dass wenn du bei 1 anfängst zu zählen, die Bedingung '<=' lauten muss und nicht '<'.
 
Anscheinend hast du meinen Algorithmus nicht verstanden. Hier nochmal mein Algorithmus mit lediglich veränderten Variablen, damit es so aussieht wie du willst:

PHP:
$anzahl      = 13;
$auslassen = 6;
$ab            = 3;

for ($j = 1; $j <= $anzahl; $j++) {

        echo $j."&nbsp;";

        if ($j == $ab) {

                  echo "...&nbsp;";
                  $j = $j+$auslassen;
        }
}

Exakt auf deinen Quelltext abgeglichen, bedeutet das folgendes:

PHP:
$sovieleseitenueberspringen = $gbeintragzaehler - 5;
$punktenachdieserzahl = 3;

for($gba = 1; $gba < $gbwieviel_seiten; $gba++) {

          echo $gba."&nbsp;";

          if ($gba == $punktenachdieserzahl) {

                  echo "...&nbsp;";
                  $gba = $gba+$sovieleseitenueberspringen;
          }
}
 
Zurück