protected function getPagination() { $filter = new RokGallery_Site_DetailFilter($this->gallery_id, $this->order_by, $this->order_direction); $query = $filter->getQuery(); $current_pager = new Doctrine_Pager($query, $this->current_page, $this->items_per_page); $current_page_ids = $current_pager->execute(array(), Doctrine_Core::HYDRATE_SCALAR); $current_index = 0; foreach ($current_page_ids as $index => $id_holder) { if ($this->id == $id_holder['s_id']) { $current_index = $index; break; } } if ($current_pager->getFirstIndice() + $current_index > $current_pager->getFirstIndice()) { $this->prev_page = $this->current_page; $this->prev_id = $current_page_ids[$current_index - 1]['s_id']; } if ($current_pager->getFirstIndice() + $current_index < $current_pager->getLastIndice()) { $this->next_page = $this->current_page; $this->next_id = $current_page_ids[$current_index + 1]['s_id']; } if ($current_pager->getFirstIndice() + $current_index == $current_pager->getFirstIndice()) { $this->prev_page = $current_pager->getPreviousPage(); if ($current_pager->getFirstPage() != $this->current_page) { $prev_pager = new Doctrine_Pager($query, $this->current_page - 1, $this->items_per_page); $prev_page_ids = $prev_pager->execute(array(), Doctrine_Core::HYDRATE_SCALAR); $this->prev_id = $prev_page_ids[count($prev_page_ids) - 1]['s_id']; } } if ($current_pager->getFirstIndice() + $current_index == $current_pager->getLastIndice()) { $this->next_page = $current_pager->getNextPage(); if ($current_pager->getLastPage() != $this->current_page) { $next_pager = new Doctrine_Pager($query, $this->current_page + 1, $this->items_per_page); $next_page_ids = $next_pager->execute(array(), Doctrine_Core::HYDRATE_SCALAR); $this->next_id = $next_page_ids[0]['s_id']; } } }