code_junkie

Zend_Paginator blurring MVC lines

Nov 12th, 2011
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.17 KB | None | 0 0
  1. class Model
  2. {
  3. //...
  4. /**
  5. * @return array Array in the form: array( 'paginator' => obj, 'resultset' => obj )
  6. */
  7. public function getAll( $where = array(), $current_page = null, $per_page = null );
  8. //...
  9. }
  10.  
  11. class Model_UserDataMapper {
  12. public function getUsers($select, $page) {
  13. $pager = Zend_Paginator::factory($select);
  14. $pager->setItemCountPerPage(10)
  15. >setCurrentPageNumber($page)
  16. ->setFilter(new Zend_Filter_Callback(array($this,'getUserObjects')));
  17. }
  18.  
  19. public function getUserObjects($rows) {
  20. $users = array();
  21.  
  22. foreach($rows as $row) {
  23. $user = new Model_User($row->toArray());
  24.  
  25. $users[] = $user;
  26. }
  27.  
  28. return $users;
  29. }
  30. }
  31.  
  32. $select = $db->from('users')->order('name');
  33. $paginator = new Zend_Paginator(new Zend_Paginator_Adapter_DbSelect($select));
  34. $paginator->setCurrentPageNumber($this->_getParam('page', 1));
  35. $paginator->setItemCountPerPage(25);
  36. $this->view->paginator = $paginator;
  37.  
  38. $items = new Items();//setup model as usual in controller
  39. $this->view->paginator = Zend_Paginator::factory($items->getAll()); //initialize the pagination in the view NB getAll is just a custom function to encapsulate my query in the model that returns a Zend_Db_Table_Rowset
  40. $this->view->paginator->setCurrentPageNumber($page); //$page is just the page number that could be passed in as a param in the request
  41. $this->view->paginator->setView($this->view);
  42.  
  43. <?php foreach($this->paginator as $item):?>
  44. <?=$item->someProperty?>
  45. <?php endforeach;?>
  46.  
  47. class ModelSet extends Zend_Paginator_Adapter_DbSelect
  48. {
  49. public function __construct( ... )
  50. {
  51. // Create a new Zend_Db_Select ($select) representing the desired
  52. // data set using incoming criteria
  53. parent::__construct($select);
  54. }
  55. ...
  56. }
  57.  
  58. $modelSet = new ModelSet( ... );
  59. ...
  60. $pager = new Zend_Paginator( $modelSet );
  61. $pager->setItemCountPerPage( ... );
  62. $pager->setCurrentPageNumber( ... );
  63. ...
  64. // The first time the record set is actually retrieved will be at the beginning
  65. // of the first traversal
  66. foreach ($pager as $record)
  67. {
  68. // ... do stuff with the record ...
  69. }
Add Comment
Please, Sign In to add comment