No entanto, por vezes necessitamos de paginar resultados contidos num array e não num objecto do Doctrine.
Hoje vou mostrar como isso é possível.
Basta criar uma classe lib/MyArrayPager.class.php:
class MyArrayPager extends sfPager { protected $resultsArray = null; public function __construct($class = null, $maxPerPage = 10) { parent::__construct($class, $maxPerPage); } public function init() { $this->setNbResults(count($this->resultsArray)); if (($this->getPage() == 0 || $this->getMaxPerPage() == 0)) { $this->setLastPage(0); } else { $this->setLastPage(ceil($this->getNbResults() / $this->getMaxPerPage())); } } public function setResultArray($array) { $this->resultsArray = $array; } public function getResultArray() { return $this->resultsArray; } public function retrieveObject($offset) { return $this->resultsArray[$offset]; } public function getResults() { return array_slice($this->resultsArray, ($this->getPage() - 1) * $this->getMaxPerPage(), $this->maxPerPage); } }Agora, na acção em que queremos invocar o pager:
$this->pager = new MyArrayPager(null, 10); // (class, numero maximo por pagina) $this->pager->setResultArray($this->results); $this->pager->setPage($request->getParameter('page_num', 1)); $this->pager->init();Depois basta-nos tratar a vista da mesma forma que o fazemos com o sfDoctrinePager.
Snippet por scott meves.
Nenhum comentário:
Postar um comentário