The Essence of Programming

Stronicowanie w PHP

27 maja 2008

Jest wiele możliwości stworzenia stronicowania w PHP. Ja zamierzam przedstawić jedną z nich, która moim zdaniem dobrze nadawać się będzie do użycia np. w różnego rodzaju skryptach galerii nie korzystających z baz danych. Dla nieświadomych, czym jest stronicowanie? - podziałem treści na strony ;)

Wyobraźmy sobie, że stworzyliśmy galerie plików. Pod uwagę wzięliśmy podział na obiekty. Obiektami mogą być pliki graficzne oraz foldery(zawierające inne pliki), oczywiście zawierać mogą one różne właściwości, np. typ, tytuł, url, kategorię, datę utworzenia.

W jaki sposób umożliwić podział tych obiektów, aby można było łatwo zaimplementować stronicowanie?

Wystarczy utworzyć tablicę obiektów(w przykładzie tym nieistotne jest skąd pobierane są dane):

A teraz najważniejszy fragment całego widowiska - funkcja array_chunk(). Dzieli ona naszą tablicę na mniejsze kawałki(tablice) po x elementów(w podanym przykładzie 5)

Wystarczy już tylko przekazać zmienną $ch do szablonów posiłkując się $_GET['page']:

albo po prostu wyświetlić określone dane bezpośrednio przy pomocy php:

W podanym przykładzie 0 strona wskazywać będzie na obiekty od 0 do 4, a strona 1 od 5 do 9. Jeśli chcemy by numerowanie stron zaczynało się od pierwszej strony, możemy odjąć 1 od zmiennej $_GET['page'].

Komentarze:
MatheW [27 grudnia 2007 18:16:23]

kod niezwykle wyraznie widoczny na tym tle :/

snipe [27 grudnia 2007 18:24:57]

@MatheW: zdaje sobie z tego sprawę i w niedługim czasie będą zmiany odnośnie designu :)

MySZ [27 grudnia 2007 19:17:59]

A do tego nic się pod Operą nie wyświetla…

talen [27 grudnia 2007 21:34:05]

podstawowa wada tego rozwiązania to konieczność odtworzenia całej listy obiektów przed wygenerowaniem odpowiednich stron. Nie lepiej stworzyć listę pustych obiektów, a dopiero w chwili ich wyświetlania wypełniać danymi ?

snipe [27 grudnia 2007 23:28:40]

@MySZ: Opera 9.25 wyświetla się tak samo jak pod FF.

@talen: co masz dokładnie na myśli mówiąc o storzeniu listy pustych obiektów? :) A co do rozwiązania zdaję sobie sprawę, że nie jest idealne, w końcu przetwarzamy wszystko a wybieramy tylko część – lekkie marnotrawstwo pamięci ;)

Marcin ``MySZ`` Sztolcman [28 grudnia 2007 01:38:10]

@snipe: pod 9.50 jest piękna pusta strona :)

talen [28 grudnia 2007 13:00:20]

@snipe: chodzi mi o tworzenie obiektów które, np.: znają tylko swój id i dopiero kiedy taki obiekt będzie przetwarzany przez szablon, to zaciąga sobie dane. W ten sposób nie trzeba, np.: pobierać informacji o 1000 plików, żeby wyświetlić 5.

Kilka informacji o autorze

Programista, blogger, uwielbia białą czekoladę ;)