Stronicowanie w PHP

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.

class GObject {
	public $type;
	public $title;
	public $url;
	public $category;
	public $date;

	function __construct($type, $title, $url, $category) {
		$this->type = $type;
		$this->title = $title;
		$this->content = $url;
		$this->author = $category;
		$this->date = date('d-m-Y');
	}
}

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):

for($i; $i < 10; $i++) {
	$g_objects[] = new GObject('file', 'Super plik'.$i, 'jakis url'.$i, 'snipe'.$i);
}

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)

$ch = array_chunk($g_objects, 5);

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

$smarty->assign($ch[$_GET['page']]);

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

foreach($ch[$_GET['page']] as $one_object) {
	echo $one_object->title;
}

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'].

7 thoughts on “Stronicowanie w PHP

  1. 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 ?

  2. @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 😉

  3. @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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *