PHP Paging ohne MySQL/mit scandir
seVes
- php
Servus!
ich hab eine Galerie gecodet, die mir jetzt seitenweise einen bestimmten Bereich an Bildern anzeigen soll.
Mit scandir ermittle ich die Dateien und mit count berechne ich, um wieviele Dateien es sich handelt. An dessen wird das PHP-Paging aufgebaut, was auch funktioniert.
Nun fehlt mir aber der Part, wo sonst - wie bei allen Tutorials - das Mysql greift mit seinem "LIMIT <startpunkt>, <wieviel>", sprich "LIMIT 0, 20"
Wie kann ich das ohne MySQL umsetzen?
Hello,
Mit scandir ermittle ich die Dateien und mit count berechne ich, um wieviele Dateien es sich handelt. An dessen wird das PHP-Paging aufgebaut, was auch funktioniert.
Nun fehlt mir aber der Part, wo sonst - wie bei allen Tutorials - das Mysql greift mit seinem "LIMIT <startpunkt>, <wieviel>", sprich "LIMIT 0, 20"
Wie kann ich das ohne MySQL umsetzen?
Wo kneift es denn?
Das Ganze wird aber kritisch, wenn es viele Einträge im Verzeichnis gibt, diese nicht alle Bilder sind und der Besucherstrom auf der Seite wächst. Dann sollte man es ggf. trennen:
Verzeichnis auslesen
Selection durchführen
temporäres Ergebnis in Session speichern
Aufbau der Seitenanzeige nur noch aus der Session
fürs erste siehe http://selfhtml.bitworks.de/snippets/directories_auslesen/
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Grüße,
- temporäres Ergebnis in Session speichern
was spricht gegen GET?
MFG
bleicher
Hallo,
was spricht gegen GET?
nichts, es spricht bei Paging solcher Bilderseiten alles dafür.
Freundliche Grüße
Vinzenz
Servus!
erstmal danke für die Antworten,
Directory auslesenund die ganzen Dateien in ein array hauen oder so ist alles kein Problem.
Ich sträube mich einfach gegen den nutzen von einer weiteren MySQL-Table, in der alle Bilddateien gespeichert sind und ich dann allerdings bequem über LIMIT arbeiten könnt. Was aber wenn 2 Bilder hinzukommen? dann muss ich immer die Table aktualisieren, dass wird mir zu stressig!
Daher hat eine Table jetzt einfach nur den Galerienamen und den Pfad zur Galerie gespeichert. auf den Pfad wird einfach scandir angewant und des Resultat in entsprechenden HTML-TAG (img, a) eingepackt. Das Paging klappt soweit auch, allerdings...
Ja...allerdings muss ich Ihm jetzt quasi sowas sagen wie:
(Bildanzahl pro Seite 20)
Wenn Seite 6 gewählt, dann nimm aus dem Bildarray (scandir) die Einträge 6*20 - (6*20)+20 und gib diese wieder.
Das ist mein Problem... ;-)
Hallo,
was spricht gegen GET?
nichts, es spricht bei Paging solcher Bilderseiten alles dafür.
Freundliche Grüße
Vinzenz
Hi,
bitte zitiere vernünftig, und serviere kein TOFU
Ja...allerdings muss ich Ihm jetzt quasi sowas sagen wie:
(Bildanzahl pro Seite 20)
Wenn Seite 6 gewählt, dann nimm aus dem Bildarray (scandir) die Einträge 6*20 - (6*20)+20 und gib diese wieder.
Das ist mein Problem... ;-)
Zu dem dir Pragma schon vor vier Stunden was geschrieben hat.
MfG ChrisB
Servus!
kann ich nichts mitanfangen, weil diese Logik hab ich Dir ja selbst grad geschrieben. Mir fehlen nur diese PHP-Befehle dazu, wie sie heißen, um einen Datenbereich in einem Array auszuwählen. :)
In TCL kenn ich lindex und lrange... *mhm*
Hi,
bitte zitiere vernünftig, und serviere kein TOFU
Ja...allerdings muss ich Ihm jetzt quasi sowas sagen wie:
(Bildanzahl pro Seite 20)
Wenn Seite 6 gewählt, dann nimm aus dem Bildarray (scandir) die Einträge 6*20 - (6*20)+20 und gib diese wieder.
Das ist mein Problem... ;-)
Zu dem dir Pragma schon vor vier Stunden was geschrieben hat.
MfG ChrisB
Hi,
kann ich nichts mitanfangen,
Mti deutscher Sprache generell, oder was?
Sonst hättest du den Hinweis bzgl. des Zitierstils ja wohl nicht ignoriert.
weil diese Logik hab ich Dir ja selbst grad geschrieben. Mir fehlen nur diese PHP-Befehle dazu, wie sie heißen, um einen Datenbereich in einem Array auszuwählen.
Pragmas Vorschlag war leicht anders - erst gar nicht ins Array zu packen, was sowieso nicht interessant ist.
In beiden Fällen wirst du irgendeine Art von Schleife brauchen - also überlege dir, welcher Schleifentyp sich eignen könnte.
MfG ChrisB
Servus!
Habs nun selbst rausgefunden und das Lösungswort war schlicht und ergreifend "array_slice".
Hi,
kann ich nichts mitanfangen,
Mti deutscher Sprache generell, oder was?
Sonst hättest du den Hinweis bzgl. des Zitierstils ja wohl nicht ignoriert.
weil diese Logik hab ich Dir ja selbst grad geschrieben. Mir fehlen nur diese PHP-Befehle dazu, wie sie heißen, um einen Datenbereich in einem Array auszuwählen.
Pragmas Vorschlag war leicht anders - erst gar nicht ins Array zu packen, was sowieso nicht interessant ist.
In beiden Fällen wirst du irgendeine Art von Schleife brauchen - also überlege dir, welcher Schleifentyp sich eignen könnte.
MfG ChrisB
Hi,
Habs nun selbst rausgefunden
Und dafür, den mehrfachen Hinweis bzgl. des Zitierens zu berücksichtigen, bist du einfach zu blöd?
MfG ChrisB
Hello,
was spricht gegen GET?
nichts, es spricht bei Paging solcher Bilderseiten alles dafür.
Dann hast Du nicht aufmerksam genug gelesen.
siehe https://forum.selfhtml.org/?t=191494&m=1277175
Ich habe hier einen Fall, bei dem ca. 140.000 Bilder im Verzeichnis liegen. Sie enthalten im Namen die Usernummer, das Speicherdatum und eine kurze Bezeichnung. Man kann eine Selektion über die drei Bereiche durchführen. Es wird _keine_ Datenbank verwendet.
Die Ergebnismenge hat typischerweise bis zu 100 Bilder. Jeweils 10 sollen auf einer Seite verlinkt werden (mittels kleiner Vorschau) und zwischen den Seiten wird geblättert.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Grüße,
wäre es hier nicht schon sinnvoll den HTML für die Gallerieseiten nach upload fest zu generieren?
MFG
bleicher
Hello,
wäre es hier nicht schon sinnvoll den HTML für die Gallerieseiten nach upload fest zu generieren?
Ich kann jetzt nur raten, was Du da vor hast, aber vermutlich ist das Ganze dann nicht mehr sehr flexibel. Was ist, wenn Du ein Bild löschst? dann verschieben sich doch die Seiten. Das Gleiche gilt, wenn anstelle von sonst 5 Bildern pro Seite plötzlich 7 angezeigt werden sollen, oder wenn z.B. nur alle Bilder angezeigt werden sollen, die viele blaue Pixel enthalten... (das bitte alles nur als Beispiele zu sehen)
Das Beste ist sicherlich immer die Verwendung einer Datenbank für die Metadaten, nicht jedoch für die Bilddaten selber :-)
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Ich kann jetzt nur raten, was Du da vor hast, aber vermutlich ist das Ganze dann nicht mehr sehr flexibel. Was ist, wenn Du ein Bild löschst? dann verschieben sich doch die Seiten. Das Gleiche gilt, wenn anstelle von sonst 5 Bildern pro Seite plötzlich 7 angezeigt werden sollen, oder wenn z.B. nur alle Bilder angezeigt werden sollen, die viele blaue Pixel enthalten... (das bitte alles nur als Beispiele zu sehen)
Bis auf die "items per page" gelten sämtliche Einschränkungen auch für Deinen Session Ansatz. Unterschied: Bei etwaigen Updates müssen entweder:
a) alle Sessions reorganisiert werden
b) alle HTML Seiten reorganisiert werden
bei dem ca. 140.000 Bilder im Verzeichnis liegen... Die Ergebnismenge hat typischerweise bis zu 100 Bilder.
Moment. Wenn Du Pech hast, kann Treffer 100 für Deine Session also bei Kandidat 139.999 kommen? Geht bestimmt zügig...
Grüße,
Ich kann jetzt nur raten, was Du da vor hast, aber vermutlich ist das Ganze dann nicht mehr sehr flexibel. Was ist, wenn Du ein Bild löschst? dann verschieben sich doch die Seiten. Das Gleiche gilt, wenn anstelle von sonst 5 Bildern pro Seite plötzlich 7 angezeigt werden sollen, oder wenn z.B. nur alle Bilder angezeigt werden sollen, die viele blaue Pixel enthalten... (das bitte alles nur als Beispiele zu sehen)
suchfunktion war nicht vorgesehen, und neugenerieren der seiten bei änderung dürfte uU besser sien als jedes mal einzelne seiten zu generieren - be iwenigen veränderungen und vielen besucher wäre htmlablage wohl sinnvoller, bei vielen veränderungen mit weniger aufrufen eindeutig datenbank - der rest ist whl dazwischen^^
vllt "hartgenerierung" für "archivseiten" die 99% niht mehr geändert werden mit umleitung auf datenbank falls datei fehlt?
MFG
bleicher
Hello,
Grüße,
- temporäres Ergebnis in Session speichern
was spricht gegen GET?
Ich sprach davon, wenn die Selektion auf eine sehr große Anzahl von Files ausgeführt wird, und man dann die Ergenismenge durchblättern will, dann ist es vorteilhaft, die Ergebnismenge zwischenzuspeichern, um sie nicht jedes Mal neu aufbauen zu müssen.
Ist es nun klar?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Wenn Du damit rechnen magst, einmal wirklich viele Dateien in Deinem Ordner zu haben: verwende ein DBMS, muss ja nicht Mysql sein(z.B. SQLite).
Zur konkreten Frage:
Du musst mitzählen. Verwerfe Deine Scandir items, bis Du an dem gewünschten "Startpunkt" angekommen bist. Beende Dein Scandir, wenn Du ("Startpunkt" + "wieviel") erreicht hast.