zwerg: Seitennavigation für Bildergalerie (Mathematik)

Glück auf!

Ich bin gerade dabei, eine Seitennavigation für meine Bildergalerie zu schreiben.

Es sollen je 20 Vorschaubilder auf einer Seite angezeigt werden. Nun fehlt mir das Verständnis, wie ich das am besten realisiere.

Das habe ich bisher:

Die aktuelle Seite übernehme ich mit.
$seite = $_GET["seite"];

Die Bildernamen liegen in dem Array $bilder.

Das zähle ich nun, um die Gesamtzahl der Bilder zu bekommen.
$anzahl = count($bilder);

Die Anzahl der anzuzeigenden Bilder ordne ich ebenfalls einer Variablen zu
$anzeige = 20;

Jetzt komme ich zu der Ausgabeschleife und zu meinem Problem (Start unproblematisch, aber das Ende kriege ich nicht hin, wenn $anzahl nicht restlos durch $anzeige (20) teilbar.

  
for ($i = ($seite-1) * $anzeige; $i <= ($seite * $anzeige) ; $i++) { ?>  
<img src="../bilder/<?php echo $bilder[$i] ?>" alt="hatta" title="auch"/>  
<?php } ?>  

Ich vermute, dass ich da mit dem Modulo-Operator arbeiten muss, aber ich steh da irgendwie gerade aufm Schlauch. Wie kriege ich das Ende der Schleife auch dann hin, wenn ich bei $anzahl / $anzeige ein Rest bleibt?

Freundliche Grüße

zwerg Alex

  1. Uuups, den Link vergessen (irgendwie speichert das Forum meine URL nicht bei den Einstellungen). Also falls es der Lösung dienlich sein sollte:

    http://zwergenspiegel.de/gallery/index.php
    Dann auf irgend nen Album klicken. Bei dem ersten Album passt es zufällig gerade, weil 40/20 = 0.

  2. Hello,

    vielleicht bekommst Du von Engin das Galeriescript, dass wir im Dezember zusammen erstellt haben. Daraus kannst Du schon eine  Menge sehen.

    Im Prinzip kannst Du nur solange ausgeben, wie Material da ist.

    Du holst Dir also alle Bilddateipfade mit glob
    Du bereinigst das Array um alle Einträge, die keine Bilder sind.
    Du zählst, wieviele es sind.

    Nun willst Du Seite 2 ausgeben:

    • Du berechnest $start
    • Du berechnest $stop = $start + $maximages_per_page;

    du baust die Schleife auf

    $lfd_nr = 0;

    foreach($_dateipfad as $pfad)
      {
        if($lfd_nr >= $start)
        {
           $out .= image_tag($pfad);
        }

    $lfd_nr++;

    if ($lfd_nr > $stop) break;
      }

    Ob das nun mit den Bounds passt, musst Du mal selber überlegen und wann man $lfd_nr erhöhen muss.

    Aus dem ganzen Konstrukt machst Du Dir eine Funktion, die den HTML-Code als String zurückliefert und nur ein paar Argumente übernimmt:

    $pageno, $directory, $maximages_per_page   # fehlt noch was?

    Liebe Grüße

    Tom vom Berg

    --
    Nur selber lernen macht schlau
  3. Hi,

    Das zähle ich nun, um die Gesamtzahl der Bilder zu bekommen.
    $anzahl = count($bilder);

    for ($i = ($seite-1) * $anzeige; $i <= ($seite * $anzeige) ; $i++) { ?>
    <img src="../bilder/<?php echo $bilder[$i] ?>" alt="hatta" title="auch"/>
    <?php } ?>

      
    
    > Ich vermute, dass ich da mit dem Modulo-Operator arbeiten muss, aber ich steh da irgendwie gerade aufm Schlauch. Wie kriege ich das Ende der Schleife auch dann hin, wenn ich bei $anzahl / $anzeige ein Rest bleibt?  
      
    Du kannst in der for-Schleife auch 2 Bedingungen verwenden und diese mit AND oder OR verknüpfen.  
    Die 2. Bedingung müsste dann "$i < $anzahl" (evtl. auch "<=" statt "<") lauten und mit [AND](http://tut.php-quake.net/logical.html#u2) verknüpft werden.  
      
    mfG,  
    steckl
    
    1. Glück auf Steckl!

      Erstmal danke, für deine Antwort.

      Du kannst in der for-Schleife auch 2 Bedingungen verwenden und diese mit AND oder OR verknüpfen.

      Ich glaub, ich hab dich nicht so ganz richtig verstanden, aber du hast mich auf eine Idee gebracht:

      for ($i = ($seite-1) * $anzeige; if($i <= $anzahl){$seite * $anzeige - 1; } else { $anzahl; } ; $i++) { blabla }

      Aber das funktioniert nicht so, wie ich dachte:
      Parse error: syntax error, unexpected T_IF, expecting ';'

      Hast vlt. jmd. einen Korrekturvorschlag für meinen Ansatz oder könntest du Steckl mir deinen Ansatz mal etwas trivialer erklären?

      Freundliche Grüße

      zwerg Alex

      1. Glück auf!

        Nochmal vielen Dank, an Steckl und Tom.

        Ich hab jetzt - glaub ich zumindest - ne Lösung gefunden:

        for ($i = ($seite-1) * $anzeige; $i <= $seite * $anzeige - 1 AND $i < $anzahl; $i++) { bla }

        Freundliche Grüße

        zwerg Alex

        1. Lieber zwerg,

          Du suchst anscheinend fmod(), oder?

          Aber Dein Problem lässt sich doch viel einfacher lösen! Du willst doch immer 20 Bilder anzeigen... also tu das doch!

          $seite = isset($_GET['seite']) ? abs($_GET['seite']) : 0;  
          // nicht über das Ende hinaus...  
          if ($seite > count($bilder) - 21) {  
              $seite = count($bilder) - 21;  
          }  
            
          $anfang = $seite;  
          $ende = $seite + 21;  
          $html = "\r\n";  
            
          for ($i = $anfang; $i < $ende; $i++) {  
              $html .= '<img src="../bilder/'  
                       .$bilder[$i]  
                       .'" alt="hatta" title="auch"/>'  
                       ."\r\n";  
          }  
            
          echo $html;
          

          Liebe Grüße aus Ellwangen,

          Felix Riesterer.

          --
          ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
        2. Hi,

          for ($i = ($seite-1) * $anzeige; $i <= $seite * $anzeige - 1 AND $i < $anzahl; $i++) { bla }

          Genau so hab ich's gemeint.
          Vielleicht wäre es für die Übersichtlichkeit noch besser, wenn du Klammern setzt:

          for ($i = ($seite-1) * $anzeige; ($i <= $seite * $anzeige - 1) AND ($i < $anzahl); $i++) { bla }

          Das ist aber Geschmacksache.

          mfG,
          steckl

          1. Glück auf steckl!

            Genau so hab ich's gemeint.

            Und ich hab dieses "self" schon wieder verflucht, weil mir niemand nen fertiges Rezept geliefert hat, sondern nur so nen paar Zutaten gesagt hat.
            Aber hinterher ist man dann doch immer stolzer, wenn man ne Lösung hat, über die man auch selber noch grübeln musste :)

            Vielleicht wäre es für die Übersichtlichkeit noch besser, wenn du Klammern setzt:

            for ($i = ($seite-1) * $anzeige; ($i <= $seite * $anzeige - 1) AND ($i < $anzahl); $i++) { bla }

            Das ist aber Geschmacksache.

            Finde ich auch besser und werde ich nachher umsetzen.

            Besten Dank nochmal.

            Freundliche Grüß

            zwerg Alex

            1. Hello Alex,

              Und ich hab dieses "self" schon wieder verflucht, weil mir niemand nen fertiges Rezept geliefert hat,

              Protest: Ich habe Dir gesagt, woher Du es bekommst. Bisschen Archivarbeit hätte genügt. Nur leider ist mein Server im Moment im Umzug. Sonst hätte ich Dir auch einen Link genannt. Engin hätte Dir aber bestimmt helfen können.

              Wenn er nicht zufällig vorbeigekommen ist, so liegt das sicherlich daran, dass er auch noch arbeitet nebenbei ;-))

              Liebe Grüße

              Tom vom Berg

              --
              Nur selber lernen macht schlau
              1. Glück auf!

                Hello Alex,

                Und ich hab dieses "self" schon wieder verflucht, weil mir niemand nen fertiges Rezept geliefert hat,

                Protest: Ich habe Dir gesagt, woher Du es bekommst. Bisschen Archivarbeit hätte genügt. Nur leider ist mein Server im Moment im Umzug. Sonst hätte ich Dir auch einen Link genannt. Engin hätte Dir aber bestimmt helfen können.

                Ja gut, vlt. hast du mir gestern mehr als die Zutaten ... vlt. sogar ein Rezept geliefert ... aber ich denke gestern hätte es nichtmal gereicht, dass du mir das essen gekocht und serviert hättest, sondern du hättest mich auch noch füttern müssen ;)

                Freundliche Grüße

                zwerg Alex

                [1] Ich hoffe da steht jetzt in jeder Ansicht
                "Nee, schuld war die Dummheit von zwerg"

              2. hi Tom,

                Und ich hab dieses "self" schon wieder verflucht, weil mir niemand nen fertiges Rezept geliefert hat,

                Protest: Ich habe Dir gesagt, woher Du es bekommst. Bisschen Archivarbeit hätte genügt. Nur leider ist mein Server im Moment im Umzug. Sonst hätte ich Dir auch einen Link genannt. Engin hätte Dir aber bestimmt helfen können.

                Wenn er nicht zufällig vorbeigekommen ist, so liegt das sicherlich daran, dass er auch noch arbeitet nebenbei ;-))

                Schuldige, bin zurzeit so vertieft in mein neuestes Projekt, das ich hier nur noch halbherzig mitlesen kann. :)

                @@zwerg:

                http://nimmet.de/bildergalerie/original.txt in reiner Textform

                http://nimmet.de/bildergalerie/originalindex.php Das Script im Einsatz

                Grüße aus H im R an Tom,
                Primus Enginus

                  1. Glück auf Engin!

                    Schöne Galerie hast du da. Grds. will ich mich aber erstmal selbst versuchen bzw. wenn ich net weiter komme auch mal das Forum um Hilfe bitten. Danke aber trotzdem, dass du mir auch deinen Quellcode zur Verfügung gestellt hast :) Werd da vlt. auch mal den ein oder anderen Blick reinwerfen, vlt. kann ich für  meine jetzt fast fertigen Galerie (nur die Kommentarfunktion fehlt noch) noch  was abgucken.

                    Freundliche Grüße

                    zwerg Alex

                    1. hi zwerg,

                      Schöne Galerie hast du da. Grds. will ich mich aber erstmal selbst versuchen bzw. wenn ich net weiter komme auch mal das Forum um Hilfe bitten.

                      http://dann.nimmet.net/mir-doch-egal! <-- Der ist NagelNeu, du bekommst ihn als erster  :-)

                      hast natürlich recht, nur selber lernen macht schlau. Ich bin leider noch der absolute NooB was Programmieren angeht.

                      Danke aber trotzdem, dass du mir auch deinen Quellcode zur Verfügung gestellt hast :) Werd da vlt. auch mal den ein oder anderen Blick reinwerfen, vlt. kann ich für  meine jetzt fast fertigen Galerie (nur die Kommentarfunktion fehlt noch) noch  was abgucken.

                      Der lob gebührt Tom, der hat das schöne Script geschrieben, ich hab mich lediglich um die Ausgabe, das XHTML und die CSS gekümmert, ab und an noch die ein oder andere Idee war auch noch von mir, aber den Rest hat Tom verbrochen.  :)

                      Grüße aus H im R an zwerg,
                      Primus Enginus

                      1. Glück auf Engin!

                        http://dann.nimmet.net/mir-doch-egal! <-- Der ist NagelNeu, du bekommst ihn als erster  :-)

                        Hehe, nimmet.net is echt ne coole Domain und die komplette URL mit Subdomain setzt noch einen drauf. Danke, dass du mir diese inhaltlich wertvolle Seite als erstes präsentiert hast. Das Layout ist auch 1a ... nur an der Validität hapert es noch :-P

                        Freundliche Grüße

                        zwerg Alex

                        1. Ave zwerg!

                          Hehe, nimmet.net is echt ne coole Domain und die komplette URL mit Subdomain setzt noch einen drauf. Danke, dass du mir diese inhaltlich wertvolle Seite als erstes präsentiert hast. Das Layout ist auch 1a ...

                          Da musste ich mich vor kurzem Spurten, um die Domain zu kriegen, Patrick hatte auch schon Interesse. Jetzt hab ich das Gegenstück zu nimmet.de.  :-)

                          nur an der Validität hapert es noch :-P

                          Danke für den Hinweis, hab da wohl ein <head>chen vergessen, ist korrigiert.

                          Somit steht die Seite der freien verlinkung zur verfügung.  :)

                          Grüße aus H im R an zwerg,
                            Primus Enginus*

                          1. Hello,

                            http://nimmet.de/ du bloeder affe

                            Das kann er aber nicht. Schade.

                            Ein harzliches Glückauf

                            Tom vom Berg

                            http://bergpost.annerschbarrich.de

                            --
                            Nur selber lernen macht schlau
                            1. Ave Tom!

                              http://nimmet.de/ du bloeder affe

                              Das kann er aber nicht. Schade.

                              Dafür aber jetzt

                              http://na-nun.nimmet.de/schaise  :-)))

                              und jetzt auch

                              http://na-nun.nimmet.de/schaise du bloeder affe!  :-))

                              Grüße aus H im R an Tom,
                                Primus Enginus*

                          2. Hallo Engin!

                            Da musste ich mich vor kurzem Spurten, um die Domain zu kriegen, Patrick hatte auch schon Interesse. Jetzt hab ich das Gegenstück zu nimmet.de.  :-)

                            Ja, Du hattest genau einen Tag Zeit, die Domain zu nimmet oder .net ;)

                            Jetzt hast Du sie nimmet und das ist auch gut so ;)

                            Viele Grüße aus Frankfurt/Main,
                            Patrick

                            --

                            _ - jenseits vom delirium - _
                            [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                            Nichts ist unmöglich? Doch!
                            Heute schon gegökt?
                            1. Ave Patrick!

                              Da musste ich mich vor kurzem Spurten, um die Domain zu kriegen, Patrick hatte auch schon Interesse. Jetzt hab ich das Gegenstück zu nimmet.de.  :-)
                              Ja, Du hattest genau einen Tag Zeit, die Domain zu nimmet oder .net ;)

                              Danke das ich Gedenkzeit bekommen hab.  :)

                              Jetzt hast Du sie nimmet und das ist auch gut so ;)

                              Ja, das war die richtige entscheidung. :) Und 88 Subdomains hab i au no, mal sehen, was sich mit denen so anfangen lässt. :-)))

                              http://kultdose.de hat jetzt auch webspace, teilt sich den webspace mit nimmet.net und nimmet.de, jetzt kann ich auch damit arbeiten.

                              Ich bin so Glücklich. :))

                              Grüße aus H im R an Patrick,
                                Primus Enginus*

                              1. Hallo Engin!

                                Ja, das war die richtige entscheidung. :) Und 88 Subdomains hab i au no,

                                Fehlen noch elf. Dann kann man trällern:

                                99 Subdomains
                                nimmet oder nimmet.net...

                                Ich bin so Glücklich. :))

                                Ja. ;)

                                Viele Grüße aus Frankfurt/Main,
                                Patrick

                                --

                                _ - jenseits vom delirium - _
                                [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                                Nichts ist unmöglich? Doch!
                                Heute schon gegökt?
                                1. Ave Patrick!

                                  Ja, das war die richtige entscheidung. :) Und 88 Subdomains hab i au no,

                                  Fehlen noch elf. Dann kann man trällern:

                                  99 Subdomains
                                  nimmet oder nimmet.net...

                                  Da fehlt ein @(at)

                                  99 Subdomains @
                                  nimmet oder nimmet.net

                                  :-)

                                  Ich bin so Glücklich. :))
                                  Ja. ;)

                                  Fragt sich nur, was ich jetzt auf diesen vielen Domains und Subdomains anstell. Schau mal in das nimmet Verzeichnis, ich werd bekloppt.  :)
                                  Ich hab schon angefangen, subdomains in unterverzeichnisse zu verweisen um nicht mein Wurzelroot noch mehr zu füllen.

                                  Grüße aus H im R an Patrick,
                                    Primus Enginus*

                                  1. Hallo Engin!

                                    Fragt sich nur, was ich jetzt auf diesen vielen Domains und Subdomains anstell.

                                    Warum hast Du überhaupt so viele eingerichtet? ;)
                                    Ich komme mit 4 aus:

                                    selfspezial.
                                    old.
                                    advent-2000.
                                    goek.

                                    Schau mal in das nimmet Verzeichnis, ich werd bekloppt.  :)

                                    Hm, ja... kann ich jetzt verstehen ;)

                                    Ich hab schon angefangen, subdomains in unterverzeichnisse zu verweisen um nicht mein Wurzelroot noch mehr zu füllen.

                                    Ja, sonst nimmet schnell unübersichtliche Ausmaße an ;)

                                    Viele Grüße aus Frankfurt/Main,
                                    Patrick

                                    --

                                    _ - jenseits vom delirium - _
                                    [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                                    Nichts ist unmöglich? Doch!
                                    Heute schon gegökt?
                                    1. Ave Patrick!

                                      Fragt sich nur, was ich jetzt auf diesen vielen Domains und Subdomains anstell.
                                      Warum hast Du überhaupt so viele eingerichtet? ;)
                                      Ich komme mit 4 aus:

                                      Nicht umsonst nennt man mich auch "Primus _Maximus_ Enginus", ich liebe die Maxime. :)

                                      Schau mal in das nimmet Verzeichnis, ich werd bekloppt.  :)
                                      Hm, ja... kann ich jetzt verstehen ;)

                                      Ich will dir nicht noch zumuten, dir die unterverzeichnis Strukturen anzusehen, da würdest du dir vor´n Kopp schlagen.

                                      Ich hab schon angefangen, subdomains in unterverzeichnisse zu verweisen um nicht mein Wurzelroot noch mehr zu füllen.
                                      Ja, sonst nimmet schnell unübersichtliche Ausmaße an ;)

                                      Dat haddet schon, es kann nur noch schlimmer werden.  haddet.de ist übrigens noch frei. :)

                                      Grüße aus H im R an Patrick,
                                        Primus Enginus*

                                      1. Hallo Engin!

                                        Dat haddet schon, es kann nur noch schlimmer werden.  haddet.de ist übrigens noch frei. :)

                                        Wie lange? haddet.net auch?

                                        P.S.: Langsam sollte wir in den Chat gehen, sage ich mir selbst als Mod...

                                        Viele Grüße aus Frankfurt/Main,
                                        Patrick

                                        --

                                        _ - jenseits vom delirium - _
                                        [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                                        Nichts ist unmöglich? Doch!
                                        Heute schon gegökt?
                                        1. Hello,

                                          Wie lange? haddet.net auch?

                                          Wenn schon, dann "ey.haddu.dat"

                                          Aber gibt es die TLD 'dat' überhaupt?

                                          Ein harzliches Glückauf

                                          Tom vom Berg

                                          http://bergpost.annerschbarrich.de

                                          --
                                          Nur selber lernen macht schlau
                                        2. Ave Patrick!

                                          Dat haddet schon, es kann nur noch schlimmer werden.  haddet.de ist übrigens noch frei. :)
                                          Wie lange? haddet.net auch?

                                          Bis du zuschlägst. :)

                                          P.S.: Langsam sollte wir in den Chat gehen, sage ich mir selbst als Mod...

                                          Chat ist Doof, das erfordert viel zu viel Aufmerksamkeit. :)
                                          Ausserdem komm ich nicht bis zum Chat durch, hab es ein Paar mal versucht aber schnell wieder aufgegeben.

                                          Grüße aus H im R an Patrick,
                                            Primus Enginus*

                              2. Hello,

                                Und 88 Subdomains hab i au no, mal sehen, was sich mit denen so anfangen lässt. :-)))

                                Subdomains kosten ja hoffentlich nichts.
                                Wenn es um reale Domains geht, ich habe das jetzt gemacht mit dem Domain-Reseller-Service.
                                DE-Domains kann ich jetzt ziemlich schmerzlos und preisgünstig konnektieren.
                                Die ersten sind jedenfalls sauber und bewuem durchgelaufen. Die Voreinstellungen sind

                                • A-record
                                • *.domain.---
                                • MX-record

                                also eigentlich das, was man als "Kleinanwender" zu 99% benötigt.
                                Änderungen sind dann anschließend möglich.

                                Wenn ein Server wieder richtig läuft, werde ich das Paket da irgendwo reinstellen.
                                Das geht dann natürlich auch für Andere; das lohnt sich aber erst ab ca. 50-100 Registrierungen im Monat.

                                Ein harzliches Glückauf

                                Tom vom Berg

                                http://bergpost.annerschbarrich.de

                                --
                                Nur selber lernen macht schlau
                                1. Ave Tom!

                                  Und 88 Subdomains hab i au no, mal sehen, was sich mit denen so anfangen lässt. :-)))
                                  Subdomains kosten ja hoffentlich nichts.

                                  Nein, Subdoamins sind im Paket inklusive, 100 an der Zahl - Plus die 3-4 Hundert Subdomains die ich noch von den anderen Domains zur verfügung hab.

                                  Wenn es um reale Domains geht, ich habe das jetzt gemacht mit dem Domain-Reseller-Service.

                                  Hehe, das habe ich gleich zu beginn meiner HTML Karriere gemacht, ich krieg Provisionen von ein Paar Domain anbietern. :)
                                  NoSpam
                                  Da haben sich einige auch schon bezahlt gemacht, überhaupt, die ganze Seite Klic*&Sur* hat sich bezahlt gemacht. :)

                                  Grüße aus H im R an Tom,
                                    Primus Enginus*

          2. Glück auf steckl!

            for ($i = ($seite-1) * $anzeige; $i <= $seite * $anzeige - 1 AND $i < $anzahl; $i++) { bla }

            Genau so hab ich's gemeint.

            Hab das wohl gestern nicht mehr verstanden, 'tschuldige.

            Vielleicht wäre es für die Übersichtlichkeit noch besser, wenn du Klammern setzt:

            for ($i = ($seite-1) * $anzeige; ($i <= $seite * $anzeige - 1) AND ($i < $anzahl); $i++) { bla }

            Das ist aber Geschmacksache.

            Jo, das gefällt mir auch besser; gerade umgesetzt. Hast einen guten Geschmack ;)

            Freundliche Grüße

            zwerg Alex

            1. Ich dachte, dass Posting vorhin von der Arbeit wurde nicht abgeschickt ... hhhhm ... ich schieb das mal auf die Zeitumstellung und hau mich jetzt mal hin und hol den verpassten Schlaf vom WE nach.

              1. Hi,

                ich schieb das mal auf die Zeitumstellung ...

                Jaja, die Zeitumstellung. Ich hab mich heute auch schon gefragt, warum man die nicht auf Montag Vormittag legen kann.

                ... und hau mich jetzt mal hin und hol den verpassten Schlaf vom WE nach.

                Gute Nacht,
                steckl

  4. Hallo,

    du könntest das auch mittels "array_chunk" lösen:

    $bilder = array_chunk($bilder, $anzeige);
    $seite = max(0, min(count($bilder)-1, intval($_GET['seite'])-1));
    foreach($bilder[$seite] as $bild)
    ...