From 10e3fec8a260eb1eb34ec9696ef9e961fbc98098 Mon Sep 17 00:00:00 2001 From: Maxence Date: Sun, 2 Jun 2013 21:04:48 +0300 Subject: [PATCH 1/3] Add page limit to Collection I do not see any way to limit the number of object in a Collection. Collection::setPageSize() and Collection::setPageNumber() add a limit clause to the query. --- classes/Collection.php | 44 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/classes/Collection.php b/classes/Collection.php index 7f8094059..d27b2c395 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 = 10; 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,35 @@ 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 From 879aa9f98adeecb5e6932933696296c14f288692 Mon Sep 17 00:00:00 2001 From: Maxence Date: Sun, 2 Jun 2013 20:18:59 +0200 Subject: [PATCH 2/3] Use PrestaShop norme --- classes/Collection.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/classes/Collection.php b/classes/Collection.php index d27b2c395..f40fabf77 100644 --- a/classes/Collection.php +++ b/classes/Collection.php @@ -684,9 +684,8 @@ class CollectionCore implements Iterator, ArrayAccess, Countable public function setPageNumber($page_number) { $page_number = (int)$page_number; - if ($page_number > 0) { + if ($page_number > 0) $page_number--; - } $this->page_number = $page_number; return $this; From 371edf9edb25689f6325f93f332abf41dba9b697 Mon Sep 17 00:00:00 2001 From: Maxence Date: Mon, 3 Jun 2013 13:28:51 +0200 Subject: [PATCH 3/3] Keep retro-compatibility --- classes/Collection.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/Collection.php b/classes/Collection.php index f40fabf77..64d47ec60 100644 --- a/classes/Collection.php +++ b/classes/Collection.php @@ -83,7 +83,7 @@ class CollectionCore implements Iterator, ArrayAccess, Countable /** * @var int Size of a page */ - protected $page_size = 10; + protected $page_size = 0; protected $fields = array(); protected $alias = array();