Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] Zmiana przesyłania z POST na GET
Forum PHP.pl > Forum > PHP > Frameworki
Ravik
Witam,

Chciałbym zapytać jak w tym kawałku kodu zmienić metodę przesyłania z POST na GET. Być może dla niektórych jest to banał, niestety ja nie mam pojęcia o zend framework (szukałem artykułów z tym związanych, jednak moje działania nie przyniosły skutku).

Będę zobowiązany za pomoc.

Funkcja odpowiadająca za wyszkuwanie:

  1. function searchAction() {
  2.  
  3.  
  4.  
  5. // get db adapter and session data
  6.  
  7. $db = Zend_Registry::get('db');
  8.  
  9. $db->setFetchMode(Zend_Db::FETCH_OBJ);
  10.  
  11. $search = new Zend_Session_Namespace('search');
  12.  
  13. $settings = new SettingsTable;
  14.  
  15. $pageLimit = $settings->fetchRow('title = "pageLimit"');
  16.  
  17.  
  18.  
  19. // if isset post data then set new search variables
  20.  
  21. if($this->_request->isPost()) {
  22.  
  23.  
  24.  
  25. $search->where = NULL;
  26.  
  27.  
  28.  
  29. // set where
  30.  
  31. foreach($this->_request->getPost() as $name => $value)
  32.  
  33. $post[$name] = $value;
  34.  
  35. if(!empty($post['advertisementType']))
  36.  
  37. $search->where .= ('(advertisements.advertisementType = '.intval($post['advertisementType'])).') AND ';
  38.  
  39. if(!empty($post['propertyType']))
  40.  
  41. $search->where .= ('(advertisements.propertyType = '.intval($post['propertyType'])).') AND ';
  42.  
  43. if(!empty($post['province']))
  44.  
  45. $search->where .= ('(advertisements.province = '.intval($post['province'])).') AND ';
  46.  
  47. if(!empty($post['city']))
  48.  
  49. $search->where .= ('(advertisements.city LIKE "%'.$post['city'].'%"').') AND ';
  50.  
  51. if(!empty($post['priceFrom']))
  52.  
  53. $search->where .= ('(advertisements.price > '.floatval($post['priceFrom'])).') AND ';
  54.  
  55. if(!empty($post['priceFor']))
  56.  
  57. $search->where .= ('(advertisements.price < '.floatval($post['priceFor'])).') AND ';
  58.  
  59. if(!empty($post['areaSizeFrom']))
  60.  
  61. $search->where .= ('(advertisements.areaSize > '.intval($post['areaSizeFrom'])).') AND ';
  62.  
  63. if(!empty($post['areaSizeFor']))
  64.  
  65. $search->where .= ('(advertisements.areaSize < '.intval($post['areaSizeFor'])).') AND ';
  66.  
  67. if(!empty($post['keyword']))
  68.  
  69. $search->where .= ('(advertisements.description LIKE "%'.$post['keyword'].'%"').') AND ';
  70.  
  71. $search->where = substr($search->where, 0, (strlen($search->where)-4));
  72.  
  73.  
  74.  
  75. }
  76.  
  77.  
  78.  
  79. if(!empty($search->where) && $this->_request->getParam('page') >= 1) {
  80.  
  81.  
  82.  
  83. // get count finded advertisements
  84.  
  85. $advertisements = new AdvertisementsTable;
  86.  
  87. $select = $advertisements->select();
  88.  
  89. $select->from($advertisements, 'count(id) as count')
  90.  
  91. ->where($search->where);
  92.  
  93. $row = $advertisements->fetchRow($select);
  94.  
  95. $this->view->search = true;
  96.  
  97.  
  98.  
  99. if($row->count > 0) {
  100.  
  101.  
  102.  
  103. // create final query
  104.  
  105. $select = $db->select();
  106.  
  107. $select->from('advertisements', array('id', 'areaSize', 'price', 'description', 'city', 'announceDate', 'promo'))
  108.  
  109. ->joinInner('propertyTypes', 'propertyTypes.id = advertisements.propertyType', 'type as propertyType')
  110.  
  111. ->joinInner('advertisementTypes', 'advertisementTypes.id = advertisements.advertisementType', 'type as advertisementType')
  112.  
  113. ->joinInner('provinces', 'provinces.id = advertisements.province', 'province')
  114.  
  115. ->joinLeft('images', 'images.advertisementId = advertisements.id', 'image')
  116.  
  117. ->where($search->where)
  118.  
  119. ->where('dayCounter > 0')
  120.  
  121. ->group('id')
  122.  
  123. ->order(array('promo DESC', 'announceDate DESC'))
  124.  
  125. ->limit($pageLimit->value, ($this->_request->getParam('page')-1)*$pageLimit->value);
  126.  
  127.  
  128.  
  129. $result = $db->query($select);
  130.  
  131. $this->view->advertisements = $result->fetchAll();
  132.  
  133.  
  134.  
  135. // set pages parameters
  136.  
  137. $this->view->pagesLink = 'adv/search/';
  138.  
  139. $this->view->pagesCount = $row->count;
  140.  
  141. $this->view->pagesLimit = $pageLimit->value;
  142.  
  143. $this->view->pagesCurrent = $this->_request->getParam('page');
  144.  
  145.  
  146.  
  147. }
  148.  
  149.  
  150.  
  151. }
  152.  
  153.  
  154.  
  155. }


HTML+PHP (wiem, żeby zmienić <form action="get">)

  1. <table style="width:370px;">
  2.  
  3. <form method="post" action="adv/search/1.html">
  4.  
  5. <fieldset>
  6.  
  7. <tr>
  8.  
  9. <td>Rodzaj ogłoszenia: </td>
  10.  
  11. <td>
  12.  
  13. <select class="sinput" name="advertisementType">
  14.  
  15. <option value="0">- wszystkie ogłoszenia -</option>
  16.  
  17. <?php
  18.  
  19. foreach($this->AdvertisementTypes as $AdvertisementType)
  20.  
  21. echo '<option value="'.$AdvertisementType->id.'">'.$AdvertisementType->type.'</option>';
  22.  
  23. ?>
  24.  
  25. </select>
  26.  
  27. </td>
  28.  
  29. </tr>
  30.  
  31.  
  32.  
  33. <tr>
  34.  
  35. <td>Typ nieruchomości: </td>
  36.  
  37. <td>
  38.  
  39. <select class="sinput" name="propertyType">
  40.  
  41. <option value="0">- wszystkie typy -</option>
  42.  
  43. <?php
  44.  
  45. foreach($this->PropertyTypes as $PropertyType)
  46.  
  47. echo '<option value="'.$PropertyType->id.'">'.$PropertyType->type.'</option>';
  48.  
  49. ?>
  50.  
  51. </select>
  52.  
  53. </td>
  54.  
  55. </tr>
  56.  
  57.  
  58.  
  59. <tr>
  60.  
  61. <td>Województwo: </td>
  62.  
  63. <td>
  64.  
  65. <select name="province" class="sinput">
  66.  
  67. <option selected="selected" value="0">- dowolne województwo -</option>
  68.  
  69. <?php
  70.  
  71. foreach($this->provinces as $province)
  72.  
  73. echo '<option value="'.$province->id.'">'.$province->province.'</option>';
  74.  
  75. ?>
  76.  
  77. </select>
  78.  
  79. </td>
  80.  
  81. </tr>
  82.  
  83.  
  84.  
  85. <tr>
  86.  
  87. <td>Miasto:</td>
  88.  
  89. <td><input name="city" class="sinput"/></td>
  90.  
  91. </tr>
  92.  
  93.  
  94.  
  95. <tr>
  96.  
  97. <td>Cena (PLN):</td>
  98.  
  99. <td>
  100.  
  101. od <input name="priceFrom" class="sinput2"/> do <input name="priceFor" class="sinput2"/>
  102.  
  103. </td>
  104.  
  105. </tr>
  106.  
  107.  
  108.  
  109. <tr>
  110.  
  111. <td>Powierzchnia (m<sup><small>2</small></sup>):</td>
  112.  
  113. <td>
  114.  
  115. od <input name="areaSizeFrom" class="sinput2"/> do <input name="areaSizeFor" class="sinput2"/>
  116.  
  117. </td>
  118.  
  119. </tr>
  120.  
  121.  
  122.  
  123. <tr>
  124.  
  125. <td>Słowo kluczowe:</td>
  126.  
  127. <td>
  128.  
  129. <input name="keyword" class="sinput"/>
  130.  
  131. </td>
  132.  
  133. </tr>
  134.  
  135.  
  136.  
  137. <tr>
  138.  
  139. <td></td>
  140.  
  141. <td>
  142.  
  143. <input type="image" style="margin-top:5px;margin-right:10px;" src="public/images/search.gif" onclick="this.form.submit()" value="Szukaj" />
  144.  
  145. </td>
  146.  
  147. </tr>
  148.  
  149.  
  150.  
  151.  
  152.  
  153. </fieldset>
  154.  
  155. </form>
  156.  
  157. </table>
darko
Primo: dokumentacja to Twój przyjaciel
Secundo: czyli zamieniasz każde if($this->_request->isPost()) na if($this->_request->isGet()) oraz foreach($this->_request->getPost() as $name => $value) na foreach($this->_request->getParams() as $name => $value)
Tertio: Po co chcesz to w ogóle zmieniać metodę na get?
Ravik
Dziękuję za pomoc.

Tertio: Po to, żeby po wejściu w dane ogłoszenie i naciśnięciu przycisku "Wstecz" nie było komunikatu o tym, że dane muszą zostać ponownie przesłane, tylko, żeby użytkownik wrócił do przeglądania ogloszeń. W przypadku IE "Strona sieci web wygasła".

Jeszcze pytanie w jaki sposób załatwić to ze stronicowaniem? Bo tutaj są przyjazne URLe, a kiedy kliknę przycisk strony "Następna" to przekierowuje mnie na stronę główną wyszukiwarki, a nie do kolejnych wyników. Wiem, że trzeba przekazać parametry do kolejnej podstrony, tylko nie bardzo wiem jak zrobić to zgodnie z założeniem frameworka.

Dodać kolejne $this->view->(tutaj nazwa z parametrami, tylko jak?)

  1.  
  2. // set pages parameters
  3. $this->view->pagesLink = 'adv/search/';
  4.  
  5. $this->view->pagesCount = $row->count;
  6.  
  7. $this->view->pagesLimit = $pageLimit->value;
  8.  
  9. $this->view->pagesCurrent = $this->_request->getParam('page');
  10.  
darko
W kontrolerze:
  1. $this->view->baseUrl = Zend_Controller_Front::getInstance()->getBaseUrl();
  2. $this->view->pageNumber = $cos_tam_z_modelu/kontrolera np. $this->_getParam('page');


W widoku phtml:

<a href="<?php echo $this->baseUrl . '/page/' . $this->pageNumber;?>">następna</a>

i "doklejasz" kolejne parametry itd.
Edit oczywiście pageNumber++ dla następnej i pageNumber-- dla poprzedniej smile.gif
Ravik
Szanuję Twój czas, ale czy mógłbyś mi wytłumaczyć mi to jak krowie na miedzy? W którym miejscu mam przerobić ten kod? Kombinuję już od paru godzin.

Kod kontrolera odpowiadający za stronicowanie wyników:

  1.  
  2. if(!empty($search->where) && $this->_request->getParam('page') >= 1) {
  3.  
  4. // get count finded advertisements
  5. $advertisements = new AdvertisementsTable;
  6. $select = $advertisements->select();
  7. $select->from($advertisements, 'count(id) as count')
  8. ->where($search->where);
  9. $row = $advertisements->fetchRow($select);
  10. $this->view->search = true;
  11.  
  12. if($row->count > 0) {
  13.  
  14. // create final query
  15. $select = $db->select();
  16. $select->from('advertisements', array('id', 'areaSize', 'price', 'description', 'city', 'announceDate', 'promo'))
  17. ->joinInner('propertyTypes', 'propertyTypes.id = advertisements.propertyType', 'type as propertyType')
  18. ->joinInner('advertisementTypes', 'advertisementTypes.id = advertisements.advertisementType', 'type as advertisementType')
  19. ->joinInner('provinces', 'provinces.id = advertisements.province', 'province')
  20. ->joinLeft('images', 'images.advertisementId = advertisements.id', 'image')
  21. ->where($search->where)
  22. ->where('dayCounter > 0')
  23. ->group('id')
  24. ->order(array('promo DESC', 'id DESC'))
  25. ->limit($pageLimit->value, ($this->_request->getParam('page')-1)*$pageLimit->value);
  26.  
  27. $result = $db->query($select);
  28. $this->view->advertisements = $result->fetchAll();
  29.  
  30. // set pages parameters
  31. $this->view->pagesLink = 'adv/search/';
  32. $this->view->pagesCount = $row->count;
  33. $this->view->pagesLimit = $pageLimit->value;
  34. $this->view->pagesCurrent = $this->_request->getParam('page');
  35.  
  36. }
  37.  
  38. }


Widok (renderowany w każdym pliku w którym ma być stronicowanie).

  1. <?php
  2. if(!empty($this->advertisements)) {
  3. echo '<hr/><center>';
  4.  
  5. // calculate count of all pages
  6. $pages = ceil($this->pagesCount / $this->pagesLimit);
  7.  
  8. // calculage advertisements to number
  9. if($this->pagesCurrent < $pages)
  10. $to = $this->pagesCurrent * $this->pagesLimit;
  11. else
  12. $to = $this->pagesCount;
  13.  
  14. // show back link / non link
  15. if($this->pagesCurrent > 1)
  16. echo '<a href="'.$this->pagesLink.($this->pagesCurrent - 1).'.html"><b>Ť poprzednie</b></a>';
  17. else
  18. echo '<b>Ť poprzednie</b>';
  19.  
  20. // show advertisements stats
  21. echo ' | Wyświetlone <b>'.(($this->pagesCurrent - 1)*$this->pagesLimit + 1).'</b>-<b>'.$to.' </b>z<b> '.$this->pagesCount.'</b> | ';
  22.  
  23. // show next link / non link
  24. if($this->pagesCurrent < $pages)
  25. echo '<a href="'.$this->pagesLink.($this->pagesCurrent + 1).'.html"><b>następne ť</b></a>';
  26. else
  27. echo '<b>następne ť</b>';
  28.  
  29. echo '</center>';
  30. }
  31. ?>
darko
Cytat(Ravik @ 18.03.2011, 16:22:04 ) *
Szanuję Twój czas, ale czy mógłbyś mi wytłumaczyć mi to jak krowie na miedzy? W którym miejscu mam przerobić ten kod? Kombinuję już od paru godzin.

To napisz konkretnie, co Ci nie działa i co chcesz osiągnąć, a jak znajdę chwilę, to się nad tym zastanowię i odpiszę.
Ravik
Dodaję:

  1. $this->view->baseUrl = Zend_Controller_Front::getInstance()->getBaseUrl();
  2. $this->view->pageNumber = $this->_getParam('page');


po

  1. $this->view->pagesLink = 'adv/search/';
  2. $this->view->pagesCount = $row->count;
  3. $this->view->pagesLimit = $pageLimit->value;
  4. $this->view->pagesCurrent = $this->_request->getParam('page');


Usuwałem, modyfikowałem nazwy, ale bezskutecznie (biała strona, całkowity błąd). Gdybyś mógł sprecyzować jak działa i jak połączyć to z obecnym stronicowaniem:

  1. $this->view->pageNumber = $this->_getParam('page');


Bo w całym dokumencie nie mam zmiennej pageNumber (jest gdzieś zadeklarowana we frameworku?)

Chcę osiągnąć aby stronicowanie działało tak jak wcześniej, z tym, że dla każdej strony przekazywane są parametry poprzez URL.

Link do podstron po wyszukiwaniu metodą POST wyglądał tak:
adv/search/1.html

druga strona

adv/search/2.html

itd.

Chcę aby do każdej (liczba).html były przekazywane wszystkie parametry (GET) tj. żeby link wyglądał tak:

adv/search/1.html?advertisementType=0&propertyType=0&province=5&areaSizeFrom=&areaSizeFor=&city=&priceFrom=&priceFor=&keyword=&x=6&y=14

Druga strona

adv/search/2.html?advertisementType=0&propertyType=0&province=5&areaSizeFrom=&areaSizeFor=&city=&priceFrom=&priceFor=&keyword=&x=6&y=14

Będę wdzięczny za wszelkie wskazówki.
darko
Daj na początku szablonu roboczo linijkę:

albo ini_set'em poustawiaj odpowiednie wartości stąd przynajmniej będziesz wiedział, co jest źle. Odnośnie pokazywania wyników wyszukiwania w postaci strona1.html, strona2.html, to pewnie będziesz musiał też zmodyfikować .htaccess, który przepisuje regułę linków dla stron z wynikami. W tym momencie na podstawie kodu, który wrzuciłeś nie jestem w stanie nic więcej powiedzieć. pageNumber to chyba była tylko przykładowa nazwa zmiennej przechowującej aktualną stronę z wynikami.
Ravik
Wszystko działa teraz świetnie (wyszukiwanie i przekierowywanie na kolejne podstrony), z tym, że w każdym przypadku wyszukiwania obcina ilość ogłoszeń do 14. Na pierwszej stronie jest ich 10, a na drugiej już 4, pojawia się również link do kolejnej strony (na drugiej stronie), ale po kliknięciu w niego (przejściu na stronę trzecią i wyżej) pojawia się komunikat, że nie ma już ogłoszeń. Przykład działania można zobaczyć na: domowisko.pl i wybrać kryteria wg. województwa np. "mazowieckie" i kliknąć "Szukaj".

Obecny wygląd funkcji z kontrolera odpowiadająca za wyszukiwanie:

  1. function searchAction() {
  2.  
  3. // get db adapter and session data
  4. $db = Zend_Registry::get('db');
  5. $db->setFetchMode(Zend_Db::FETCH_OBJ);
  6. $search = new Zend_Session_Namespace('search');
  7. $settings = new SettingsTable;
  8. $pageLimit = $settings->fetchRow('title = "pageLimit"');
  9.  
  10. // if isset post data then set new search variables
  11. if($this->_request->isGet()) {
  12.  
  13. $search->where = NULL;
  14.  
  15. // set where
  16. foreach($this->_request->getParams() as $name => $value)
  17. $post[$name] = $value;
  18. if(!empty($post['advertisementType']))
  19. $search->where .= ('(advertisements.advertisementType = '.intval($post['advertisementType'])).') AND ';
  20. if(!empty($post['propertyType']))
  21. $search->where .= ('(advertisements.propertyType = '.intval($post['propertyType'])).') AND ';
  22. if(!empty($post['province']))
  23. $search->where .= ('(advertisements.province = '.intval($post['province'])).') AND ';
  24. if(!empty($post['city']))
  25. $search->where .= ('(advertisements.city LIKE "%'.$post['city'].'%"').') AND ';
  26. if(!empty($post['priceFrom']))
  27. $search->where .= ('(advertisements.price > '.floatval($post['priceFrom'])).') AND ';
  28. if(!empty($post['priceFor']))
  29. $search->where .= ('(advertisements.price < '.floatval($post['priceFor'])).') AND ';
  30. if(!empty($post['areaSizeFrom']))
  31. $search->where .= ('(advertisements.areaSize > '.intval($post['areaSizeFrom'])).') AND ';
  32. if(!empty($post['areaSizeFor']))
  33. $search->where .= ('(advertisements.areaSize < '.intval($post['areaSizeFor'])).') AND ';
  34. if(!empty($post['keyword']))
  35. $search->where .= ('(advertisements.otherInfo LIKE "%'.$post['keyword'].'%"').') AND ';
  36. $search->where = substr($search->where, 0, (strlen($search->where)-4));
  37.  
  38. }
  39.  
  40. if(!empty($search->where) && $this->_request->getParam('page') >= 1) {
  41.  
  42. // get count finded advertisements
  43. $advertisements = new AdvertisementsTable;
  44. $select = $advertisements->select();
  45. $select->from($advertisements, 'count(id) as count')
  46. ->where($search->where);
  47. $row = $advertisements->fetchRow($select);
  48. $this->view->search = true;
  49.  
  50. if($row->count > 0) {
  51.  
  52. // create final query
  53. $select = $db->select();
  54. $select->from('advertisements', array('id', 'areaSize', 'price', 'description', 'city', 'announceDate', 'promo'))
  55. ->joinInner('propertyTypes', 'propertyTypes.id = advertisements.propertyType', 'type as propertyType')
  56. ->joinInner('advertisementTypes', 'advertisementTypes.id = advertisements.advertisementType', 'type as advertisementType')
  57. ->joinInner('provinces', 'provinces.id = advertisements.province', 'province')
  58. ->joinLeft('images', 'images.advertisementId = advertisements.id', 'image')
  59. ->where($search->where)
  60. ->where('dayCounter > 0')
  61. ->group('id')
  62. ->order(array('promo DESC', 'id DESC'))
  63. ->limit($pageLimit->value, ($this->_request->getParam('page')-1)*$pageLimit->value);
  64.  
  65. $result = $db->query($select);
  66. $this->view->advertisements = $result->fetchAll();
  67.  
  68. // set pages parameters
  69. $this->view->pagesLink = 'adv/search/';
  70. $this->view->pagesCount = $row->count;
  71. $this->view->pagesLimit = $pageLimit->value;
  72. $this->view->pagesCurrent = $this->_request->getParam('page');
  73.  
  74. $this->view->province = $this->_request->getParam('province');
  75. $this->view->advertisementType = $this->_request->getParam('advertisementType');
  76. $this->view->propertyType = $this->_request->getParam('propertyType');
  77. $this->view->areaSizeFrom = $this->_request->getParam('areaSizeFrom');
  78. $this->view->areaSizeFor = $this->_request->getParam('areaSizeFor');
  79. $this->view->city = $this->_request->getParam('city');
  80. $this->view->priceFor = $this->_request->getParam('priceFor');
  81. $this->view->keyword = $this->_request->getParam('keyword');
  82.  
  83. }
  84.  
  85. }
  86.  
  87. }
  88.  


Plik odpowiadający za wyświetlenie linków

  1. <?php
  2. if(!empty($this->advertisements)) {
  3. echo '<hr/><center>';
  4.  
  5. // calculate count of all pages
  6. $pages = ceil($this->pagesCount / $this->pagesLimit);
  7.  
  8. // calculage advertisements to number
  9. if($this->pagesCurrent < $pages)
  10. $to = $this->pagesCurrent * $this->pagesLimit;
  11. else
  12. $to = $this->pagesCount;
  13.  
  14. // show back link / non link
  15. if($this->pagesCurrent > 1)
  16. echo '<a href="'.$this->pagesLink.($this->pagesCurrent - 1).'.html?advertisementType='.$this->advertisementType.'&propertyType='.$this->propertyType.'&province='.$this->province.'&areaSizeFrom='.$this->areaSizeFrom.'&areaSizeFor='.$this->areaSizeFor.'&city='.$this->city.'&priceFrom='.$this->priceFrom.'&priceFor='.$this->priceFor.'&keyword='.$this->keyword.'"><b>Ť poprzednie</b></a>';
  17.  
  18. else
  19. echo '<b>Ť poprzednie</b>';
  20.  
  21. // show advertisements stats
  22. echo ' | Wyświetlone <b>'.(($this->pagesCurrent - 1)*$this->pagesLimit + 1).'</b>-<b>'.$to.' </b>z<b> '.$this->pagesCount.'</b> | ';
  23.  
  24. // show next link / non link
  25. if($this->pagesCurrent < $pages)
  26. echo '<a href="'.$this->pagesLink.($this->pagesCurrent + 1).'.html?advertisementType='.$this->advertisementType.'&propertyType='.$this->propertyType.'&province='.$this->province.'&areaSizeFrom='.$this->areaSizeFrom.'&areaSizeFor='.$this->areaSizeFor.'&city='.$this->city.'&priceFrom='.$this->priceFrom.'&priceFor='.$this->priceFor.'&keyword='.$this->keyword.'"><b>następne ť</b></a>';
  27. else
  28. echo '<b>następne ť</b>';
  29.  
  30. echo '</center>';
  31. }
  32. ?>


Routing z wyszukiwania:

  1. routes.search.type = "Zend_Controller_Router_Route_Regex"
  2. routes.search.route = "adv/search/(\d+).html"
  3. routes.search.map.page = 1
  4. routes.search.defaults.controller = adv
  5. routes.search.defaults.action = search
darko
Może użyj gotowej klasy nospora
Ravik
Niestety to mnie nie ustawia, bo całość opiera się na frameworku, i musiałbym przerabiać kilkanaście plików, odpowiednio nazywając zmienne.
A kiedy klikamy na mapkę z województwami to stronicowanie działa poprawnie (z tym, że tam są przyjazne linki)

Może problem błahy?
werek
@Ravik: widzę że ponownie chcesz wynaleźć koło smile.gif spoko do stronicowania w zend framework jest już od dawna gotowy komponent który działa wyśmienicie nazywa się Zend_Paginator

http://framework.zend.com/manual/en/zend.paginator.html

za jego pomocą możesz stworzyć sobie select'a (dowolnego dziedziczącego po Zend_Db_Select, przykłady w dokumentacji) którego możesz dowolnie obwarować warunkami, tworząć tym samym kompletny automat, dodając klase formularza dziedziczącą po zend_form całą akcję będziesz mógł załatwić w jedenj akcji

ty stworzysz select'a a paginator automagicznie bedzie trzymał stan w zależności od parametru i działa z routerami, polecam lekture przykłady są naprawde dobre
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.