Ankündigung

Einklappen
Keine Ankündigung bisher.

Seiten im Forum anzeigen

Einklappen

Neue Werbung 2019

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Seiten im Forum anzeigen

    Hallo Leute!

    Da ich zurzeit an einem Forum arbeite, stellt sich mir das Problem, dass wenn zuviele Seiten pro Thread vorhanden sind es so aussieht:
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

    Ich wollte es nun aber so machen, dass es bei Seite 1 - 3 so aussieht:
    1 2 3 4 5 ... 25
    1 2 3 4 5 ... 25
    1 2 3 4 5 ... 25

    Bei allen Seiten die mehr als 3 von Seite 1 und mehr als 3 vor der letzten Seite entfernt sind soll es dann z. B. so aussehen:
    1 ... 15 16 17 18 19 ... 25

    Und bei den letzten 3 Seiten dann so:
    1 ... 21 22 23 24 25
    1 ... 21 22 23 24 25
    1 ... 21 22 23 24 25

    Ich hab da schon ne Idee, aber das wären massig If-Abfragen und es geht bestimmt einfacher, nur komme ich einfach nicht auf die Lösung.

    Übrigens soll das Fettgedruckte immer die derzeitig aufgerufene Seite darstellen.


    Grüße, Metal

  • #2
    Na dann zeig mal her, Deinen Ansatz!

    Kommentar


    • #3
      PHP-Code:
      if(isset($_GET['p'])) {
          
      $anfang $_GET['p'];
      } else {
          
      $anfang 0;
      }
      $seitenanzahl 10;
      $anfang $anfang*$seitenanzahl;
      $ende $seitenanzahl;

      $result2 mysql_query("SELECT COUNT(post_id) as gesamtanzahl FROM post WHERE thread_id = ".$_GET['thread']."");
      while(
      $row2 mysql_fetch_assoc($result2)) {
           
      $gesamtanzahl $row2['gesamtanzahl'];
           if(
      $gesamtanzahl $seitenanzahl) {
               
      $seiten ceil($gesamtanzahl/$seitenanzahl);
           } else {
               
      $seiten 1;
           }
                  
          
      $i 0;
          
      $seite 1;
          
      $seitee $_GET['p']+1;
          echo 
      "    <div class=\"seiten\" style=\"float: right;\">\n";
          echo 
      "Seite ";

          if(
      $_GET['p'] == OR $_GET['p'] == OR $_GET['p'] == 2) {
               while(
      $i 5) {
                   if(
      $_GET['p'] == $i) {
                       echo 
      "<span class=\"seite_on\">&nbsp;".$seite."&nbsp;</span>\n";
                   } else {
                       echo 
      "<span class=\"seite_off\"><a href=\"index.php?page=forum&forum=".$_GET['forum']."&subforum=".$_GET['subforum']."&thread=".$_GET['thread']."&p=".$i."\">&nbsp;".$seite."&nbsp;</a></span> \n";
                   }
                   
      $i++;
                   
      $seite++;
               }
               echo 
      "...\n";
               echo 
      "<span class=\"seite_off\"><a href=\"index.php?page=forum&forum=".$_GET['forum']."&subforum=".$_GET['subforum']."&thread=".$_GET['thread']."&p=".($seiten-1) ."\">&nbsp;".$seiten."&nbsp;</a></span> \n";
                      
           } elseif(
      $_GET['p'] == 3) {
               while(
      $i 6) {
                   if(
      $_GET['p'] == $i) {
                       echo 
      "<span class=\"seite_on\">&nbsp;".$seite."&nbsp;</span>\n";
                   } elseif(
      $i == 0) {
                       echo 
      "...\n";
                   } else {
                       echo 
      "<span class=\"seite_off\"><a href=\"index.php?page=forum&forum=".$_GET['forum']."&subforum=".$_GET['subforum']."&thread=".$_GET['thread']."&p=".$i."\">&nbsp;".$seite."&nbsp;</a></span> \n";
                   }
                   
      $i++;
                   
      $seite++;
               }
           } elseif(
      $_GET['p'] == 4) {
               while(
      $i 7) {
                   if(
      $_GET['p'] == $i) {
                       echo 
      "<span class=\"seite_on\">&nbsp;".$seite."&nbsp;</span>\n";
                   } elseif(
      $i == 0) {
                       echo 
      "<span class=\"seite_off\"><a href=\"index.php?page=forum&forum=".$_GET['forum']."&subforum=".$_GET['subforum']."&thread=".$_GET['thread']."&p=".$i."\">&nbsp;".$seite."&nbsp;</a></span> \n";
                   } elseif(
      $i == 1) {
                       echo 
      "...\n";
                   } else {
                       echo 
      "<span class=\"seite_off\"><a href=\"index.php?page=forum&forum=".$_GET['forum']."&subforum=".$_GET['subforum']."&thread=".$_GET['thread']."&p=".$i."\">&nbsp;".$seite."&nbsp;</a></span> \n";
                   }
                   
      $i++;
                   
      $seite++;
               }
           }
           echo 
      "    </div>\n";

      Kommentar


      • #4
        Wie stellst Du Dir eigentlich Seite "4" vor?

        Kommentar


        • #5
          hmmm...gute Überlegung. Jetzt wo du's sagst, denke ich mal so:
          1 2 3 4 5 6 ... 25

          Vorher dachte ich mir so:
          ... 2 3 4 5 6 ... 25 (ist aber irgendwie schwachsinnig, da man die erste Seite immer anklicken können sollte.)

          und bei seite 5 dann so:
          1 ... 3 4 5 6 7 ... 25

          Kommentar


          • #6
            Finde ich gar nicht so schlecht. Wenn man jetzt noch den Fall Seitengesamtzahl < 7 abfängt beschränkt sich das ganze doch auf 3 Unterscheidungen.

            Kommentar


            • #7
              Magst du mir vielleicht noch sagen, unter welchen 3 Bedingungen ich unterscheiden sollte? ^^''

              Kommentar


              • #8
                Naja eben (1-basierter Pseudocodeansatz):
                Code:
                if (gesamt < 8) 
                  stelle alle Elemente ohne ... dar
                else
                  if (aktuell < 5)
                    (6 Elemente) , ... , letztes Element
                  elseif (aktuell > gesamt - 5)
                    erstes Element , ... , (6 Elemente) 
                  else
                    erstes Element , ... , (element aktuell-2 bis aktuell+2) , ... , letztes Element

                Kommentar


                • #9
                  Vielen Dank, ich werde es mal ausprobieren. Auf jeden Fall klingt es vernünftig

                  Kommentar


                  • #10
                    Da ist die Markierung noch nicht dabei. Aber das bekommst DU schon hin.

                    Kommentar


                    • #11
                      Geht sicher schöner, aber hier mal eine Umsetzung:

                      PHP-Code:
                      <?
                      $pages = 18;
                      $current = isset ($_GET['page']) ? $_GET['page'] : 0;
                      $current = max (1 , min ($current , $pages));

                      function link ($iNumber , $iCurrent = -1)
                        {
                        echo '<a href="?page=' . $iNumber . '" >';
                        if ($iCurrent == $iNumber)
                          echo '<b>' . $iNumber . '</b>';
                        else
                          echo $iNumber;
                        echo '</a>';
                        }

                      if ($pages < 8) 
                        {
                        for ($i=1;$i<=$pages;$i++)
                          {
                          link ($i , $current); 
                          }
                        }
                      else
                        {
                        if ($current < 5)
                          {
                          for ($i=1;$i<7;$i++)
                            {
                            link ($i , $current); 
                            }
                          echo '... ';
                          link ($pages , $current); 
                          }
                        elseif ($current > $pages - 4)
                          {
                          link (1 , $current); 
                          echo ' ...';
                          for ($i=$pages - 5;$i<=$pages;$i++)
                            {
                            link ($i , $current); 
                            }
                          }
                        else
                          {
                          link (1 , $current); 
                          echo ' ... ';
                          for ($i=$current-2;$i<$current+3;$i++)
                            {
                            link ($i , $current); 
                            }
                          echo '... ';
                          link ($pages , $current); 
                          }
                        }
                      Die a-Tags kann man dann über CSS aufhübschen.

                      Kommentar


                      • #12
                        Jo besten Dank habs selber hinbekommen

                        Falls Interesse am PHP-Code besteht, poste ich den natürlich gerne

                        Kommentar


                        • #13
                          Ich setze das gerade noch objektorientiert um. Angebot steht auch meinerseits.

                          Kommentar


                          • #14
                            Danke, aber ich habe das ganze Forum nicht-OOP programmiert^^

                            Kommentar


                            • #15
                              Habe gerade überlegt, hier ist auch noch Optimierungsbedarf:
                              Code:
                              1 ... 3 4 5 6 7 ... 25
                              1 ... 19 20 21 22 23 ... 25
                              eine 2 bzw. 24 wäre da sinnvoller.

                              [edit]
                              Done. Ist eine Trivialänderung.

                              [edit2]
                              Jetzt habe ich auch das Problem des Springens behoben (1 ... bzw. 2 ...)

                              Kommentar

                              Lädt...
                              X