Seitennavigation für Bildergalerie (Mathematik)
zwerg
- php
0 Nachgereicht: Link zur Galerie
zwerg0 Tom0 steckl0 zehbaeh
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
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.
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 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
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
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
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
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.
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
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
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
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"
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
hi Tom und zwerg,
@@zwerg:
http://nimmet.de/bildergalerie/original.txt in reiner Textform
http://nimmet.de/bildergalerie/originalindex.php Das Script im Einsatz
auch erhältlich auf
http://nimmet.net/bildergalerie/original.txt
http://nimmet.net/bildergalerie/originalindex.php
:)
Grüße aus H im R,
Primus Enginus
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
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
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
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*
Hello,
http://nimmet.de/ du bloeder affe
Das kann er aber nicht. Schade.
Ein harzliches Glückauf
Tom vom Berg
http://bergpost.annerschbarrich.de
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*
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
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*
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
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*
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
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*
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
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
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*
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
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
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*
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
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.
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
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)
...