diff --git a/classes/Collection.php b/classes/Collection.php index 7f8094059..64d47ec60 100644 --- a/classes/Collection.php +++ b/classes/Collection.php @@ -74,6 +74,16 @@ class CollectionCore implements Iterator, ArrayAccess, Countable * @var int Total of elements for iteration */ protected $total; + + /** + * @var int Page number + */ + protected $page_number = 0; + + /** + * @var int Size of a page + */ + protected $page_size = 0; protected $fields = array(); protected $alias = array(); @@ -334,6 +344,11 @@ class CollectionCore implements Iterator, ArrayAccess, Countable break; } } + + // All limit clause + if ($this->page_size) + $this->query->limit($this->page_size, $this->page_number * $this->page_size); + // Shall we display query for debug ? if ($display_query) @@ -659,6 +674,34 @@ class CollectionCore implements Iterator, ArrayAccess, Countable } return $this->fields[$field]; } + + /** + * Set the page number + * + * @param int $page_number + * @return Collection + */ + public function setPageNumber($page_number) + { + $page_number = (int)$page_number; + if ($page_number > 0) + $page_number--; + + $this->page_number = $page_number; + return $this; + } + + /** + * Set the nuber of item per page + * + * @param int $page_size + * @return Collection + */ + public function setPageSize($page_size) + { + $this->page_size = (int)$page_size; + return $this; + } /** * Generate uniq alias from association name