From f0db3bc1a52e7bba98d843c5c8d928bf23d325e6 Mon Sep 17 00:00:00 2001 From: ornicar Date: Thu, 14 Apr 2011 16:23:10 -0700 Subject: [PATCH] Add raw and doctrine paginator adapter implementations --- Paginator/AbstractPaginatorAdapter.php | 54 ++++++++++++++++++++++++++ Paginator/DoctrinePaginatorAdapter.php | 38 ++++++++++++++++++ Paginator/RawPaginatorAdapter.php | 21 ++++++++++ 3 files changed, 113 insertions(+) create mode 100644 Paginator/AbstractPaginatorAdapter.php create mode 100644 Paginator/DoctrinePaginatorAdapter.php create mode 100644 Paginator/RawPaginatorAdapter.php diff --git a/Paginator/AbstractPaginatorAdapter.php b/Paginator/AbstractPaginatorAdapter.php new file mode 100644 index 0000000..c2b877f --- /dev/null +++ b/Paginator/AbstractPaginatorAdapter.php @@ -0,0 +1,54 @@ +searchable = $searchable; + $this->query = $query; + } + + protected function getElasticaResults($offset, $itemCountPerPage) + { + $query = clone $this->query; + $query->setFrom($offset); + $query->setLimit($itemCountPerPage); + + return $this->searchable->search($query)->getResults(); + } + + /** + * @see Zend\Paginator\Adapter::count + */ + public function count() + { + return $this->searchable->count($this->query); + } +} diff --git a/Paginator/DoctrinePaginatorAdapter.php b/Paginator/DoctrinePaginatorAdapter.php new file mode 100644 index 0000000..08c41d8 --- /dev/null +++ b/Paginator/DoctrinePaginatorAdapter.php @@ -0,0 +1,38 @@ +mapper = $mapper; + } + + /** + * @see Zend\Paginator\Adapter::getItems + */ + public function getItems($offset, $itemCountPerPage) + { + $results = $this->getElasticaResults($offset, $itemCountPerPage); + + return $this->mapper->fromElasticaObjects($results); + } +} diff --git a/Paginator/RawPaginatorAdapter.php b/Paginator/RawPaginatorAdapter.php new file mode 100644 index 0000000..7bdc009 --- /dev/null +++ b/Paginator/RawPaginatorAdapter.php @@ -0,0 +1,21 @@ +getElasticaResults($offset, $itemCountPerPage); + + return array_map(function($result) { return $result->getSource(); }, $results); + } +}