Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZendFramework] Dorobienie przycisku "wyświetl więcej"
Ravik
post
Post #1





Grupa: Zarejestrowani
Postów: 95
Pomógł: 3
Dołączył: 8.05.2009

Ostrzeżenie: (0%)
-----


Witam,

Mam tutaj kod PHP odpowiadający za wyśietlenie określonych rekordów z bazy danych, których ilość na stronie jest limitowana również rekordem z bazy danych. Chodzi mi o to, że w pliku widoku chcę umieścić przycisk "wyświetl więcej" i po kliknięciu tego przycisku przeładowuje się strona i ilość wyświetlanych rekordów zwiększa się o 10. Przy kolejnym kliknięciu ma się dziać dokładnie to samo. Nie mam pojęcia jak zrobić to w Zendzie. W jaki sposób mam zmodyfikować ten kod PHP, aby po klknięciu w link zmienić zmienną $limit o +10 i w jaki sposób wysłać to w pliku wyglądu?

Będę wdzięczny za wszelkie wskazówki.

Pozdrawiam

  1. function newAction() {
  2.  
  3. $db = Zend_Registry::get('db');
  4. $db->setFetchMode(Zend_Db::FETCH_OBJ);
  5.  
  6. $settings = new SettingsTable;
  7. $limit = $settings->fetchRow('title = "newLimit"'); // limit pobierany z bazy danych i na tej podstawie jest określona liczba ogłoszeń, które mają się pojawiać na stronie
  8.  
  9. $select = $db->select();
  10. $select->from('advertisements', array('id', 'areaSize', 'price', 'description', 'city', 'announceDate', 'promo'))
  11. ->joinInner('propertyTypes', 'propertyTypes.id = advertisements.propertyType', 'type as propertyType')
  12. ->joinInner('advertisementTypes', 'advertisementTypes.id = advertisements.advertisementType', 'type as advertisementType')
  13. ->joinInner('provinces', 'provinces.id = advertisements.province', 'province')
  14. ->joinLeft('images', 'images.advertisementId = advertisements.id', 'image')
  15. ->where('dayCounter > 0')
  16. ->group('id')
  17. ->limit($limit->value, 0);
  18.  
  19. $result = $db->query($select);
  20. $this->view->advertisements = $result->fetchAll();
  21. $this->view->hideBack = 1;
  22.  
  23. }
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Pilsener
post
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Cytat
zbyt dużo pojęcia o Zendzie nie mam
- zawsze można zajrzeć do dokumentacji, co prawda taka ona sobie ale lepsze to niż nic (IMG:style_emoticons/default/wink.gif)

Dobrze montujesz zapytanie do bazy, musisz tylko przenieść to do modelu.
Cytat
Tylko w kolejnych plikach zmienia się $_name i $_primary. W modelu nie ma ani jednej funkcji zwracającej lub pobierającej coś.
- name to nazwa tabeli a primary to klucz główny - zalecane jest, aby jedna tabela w bazie odpowiadała jednemu modelowi stąd takie kodowanie.

Dlatego musisz dodać metodę (czy tam funkcję) do modelu:
  1. class AdvertisementsTable extends Zend_Db_Table_Abstract {
  2.  
  3. protected $_name = 'advertisements';
  4. protected $_primary = 'id';
  5.  
  6. public function getData($more=null){
  7.  
  8. }
  9. }


A wywołać ją w kontrolerze:
  1. $model = new Model_AdvertisementsTable();
  2. $this->view->data = $model->getData($this->_getParam('more'));


Oczywiście do metody getData wstawiasz swoje zapytanie:
  1. class AdvertisementsTable extends Zend_Db_Table_Abstract {
  2.  
  3. protected $_name = 'advertisements';
  4. protected $_primary = 'id';
  5.  
  6. public function getData($more=null){
  7. $select = $this->select();
  8. $select->setIntegrityCheck(false); //to takie dziwadło, domyślnie jest 'true' i nie można pobrać danych z innej tabeli (np. typu ogłoszenia)
  9. $select->from($this->_name, array('id', 'areaSize', 'price', 'description', 'city', 'announceDate', 'promo'))
  10. ->joinInner('propertyTypes', 'propertyTypes.id = advertisements.propertyType', 'type as propertyType')
  11. ->joinInner('advertisementTypes', 'advertisementTypes.id = advertisements.advertisementType', 'type as advertisementType')
  12. ->joinInner('provinces', 'provinces.id = advertisements.province', 'province')
  13. ->joinLeft('images', 'images.advertisementId = advertisements.id', 'image')
  14. ->where('dayCounter > 0')
  15. ->group('advertisements.id')
  16. ->order('announceDate DESC')
  17. ->limit($more, 0);
  18. return $this->fetchAll($select);
  19. }
  20. }


Taka jest mniej więcej logika tego.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 9.10.2025 - 18:15