Technologie i narzędzia: język PHP 5, Java, JavaScript, Python, system Zend Framework, Django, biblioteka jQuery, Smarty, platforma Eclipse, MySQL, SVN, CVS, UML, Firefox.
WebProgramming - wszystko o serwisach internetowych
O serwisach internetowych.
[php] Prosta obsługa stronicowania - część 2.
Przyszedł czas na pozostałą część aplikacji, czyli kontroler i widok. Przypomnę tylko, iż ten artykuł przedstawia ciąg dalszy idei, którą przedstawiłem w artykule “[php] Prosta obsługa stronicowania - część 1” (łatwo się zresztą domyślić) - proponuję więc zapoznanie się najpierw z pierwszą częścią, jeżeli wcześniej tego nie uczyniłeś.
Skończyliśmy poprzednio na zbudowaniu warstwy modelu - w naszym przypadku była to metoda zwracająca listę użytkowników, czas na jej wykorzystanie. W klasie kontrolera wpisujemy, więc:
-
$model = new Users();
-
$login = $this->_getParam(‘query’); // TODO: Dodaj filtrowanie
-
// Pobierz listę użytkowników dla odpowiedniej strony i przekaż do widoku
-
$this->view->items = $model->fetchUsers((int) $this->_getParam(‘page’), $login);
Innymi słowy przekazujemy listę użytkowników do widoku. W widoku listę tą wyświetlamy oraz budujemy stronicowanie (czyli linki z numerami kolejnych stron):
-
<?php foreach($this->items as $item): ?>
-
<?= $item->id ?>. <?= $item->login ?> <br />
-
<?php endforeach; ?>
-
-
<?php if ($this->items->getCount() >= 1): ?>
-
<div class="pageList">
-
<?php for ($i = 1; $i <= $this->items->getMaxPage(); $i++): ?>
-
<?php if ($i == $this->items->getPage()): ?>
-
<span class="page pageActive"><?= $i ?></span>
-
<?php else: ?>
-
<span class="page">
-
<a href="/users/index/page/<?= $i ?>/"><?= $i ?></a>
-
</span>
-
<?php endif; ?>
-
<?php endfor; ?>
-
</div>
-
<?php endif; ?>
Dla ułatwienia kod odpowiedzialny za budowanie stronicowania możemy “przerzucić” do View Helper - dzięki czemu nie będziemy musieli powtarzać tego samego kodu w kilku miejscach.
Podstawowym plusem tego rozwiązania jest elastyczność - na żadnym etapie nie narzucamy niepotrzebnych warunków. Dzięki temu posiadamy zarówno duże możliwości modyfikacji zapytania (operujemy w końcu obiektem klasy Zend_Db_Table), jak i budowania widoku. Jednocześnie mamy ułatwione zadanie tworząc listę elementów poprzez opakowanie wspólnych części. Warto nadmienić, iż powyższe rozwiązanie jest zgodne z metodą DRY (ang. Don’t repeat yourself), na przykład: ustawianie liczby elementów na stronie tylko w jednym miejscu (w Modelu), wspieranie budowania wtyczek widoku.
Napisz komentarz