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