diff options
author | Bharat Mediratta <bharat@menalto.com> | 2009-11-14 14:25:39 -0800 |
---|---|---|
committer | Bharat Mediratta <bharat@menalto.com> | 2009-11-14 14:25:39 -0800 |
commit | 081ce9f6ca07b834fd31d3d340990504dd68f821 (patch) | |
tree | bb6d8597bbedbf1327475b8c2ad4b63f0170f16d /modules | |
parent | 100a66d861849ab0d78dca84b0b06c1af973752a (diff) |
Normalize pagination so that pager.html.php can handle pagination for
both albums and movies. Kohana's paginator is not quite sufficient
for this, so create our own pagination logic in Theme_View with only
the stuff we need.
Clearly document the variables available in pager.html so that themers
know how to use it.
Fixes ticket #626.
Diffstat (limited to 'modules')
-rw-r--r-- | modules/gallery/controllers/albums.php | 2 | ||||
-rw-r--r-- | modules/gallery/libraries/Theme_View.php | 48 |
2 files changed, 42 insertions, 8 deletions
diff --git a/modules/gallery/controllers/albums.php b/modules/gallery/controllers/albums.php index a430b14d..4e37649c 100644 --- a/modules/gallery/controllers/albums.php +++ b/modules/gallery/controllers/albums.php @@ -65,6 +65,8 @@ class Albums_Controller extends Items_Controller { } $template = new Theme_View("page.html", "album"); + $template->set_global("page", $page); + $template->set_global("max_pages", $max_pages); $template->set_global("page_size", $page_size); $template->set_global("item", $album); $template->set_global("children", $album->viewable()->children($page_size, $offset)); diff --git a/modules/gallery/libraries/Theme_View.php b/modules/gallery/libraries/Theme_View.php index 7e6a0b2e..5e8bc728 100644 --- a/modules/gallery/libraries/Theme_View.php +++ b/modules/gallery/libraries/Theme_View.php @@ -135,16 +135,48 @@ class Theme_View_Core extends Gallery_View { return $menu->render(); } + /** + * Set up the data and render a pager. + * + * See themes/wind/views/pager.html for documentation on the variables generated here. + */ public function pager() { - if ($this->children_count) { - $this->pagination = new Pagination(); - $this->pagination->initialize( - array("query_string" => "page", - "total_items" => $this->children_count, - "items_per_page" => $this->page_size, - "style" => "classic")); - return $this->pagination->render(); + $v = new View("pager.html"); + $v->page_type = $this->page_type; + $v->first_page_url = null; + $v->previous_page_url = null; + $v->next_page_url = null; + $v->last_page_url = null; + + if ($this->page_type == "album") { + $v->page = $this->page; + $v->max_pages = $this->max_pages; + $v->total = $this->children_count; + if ($this->page != 1) { + $v->first_page_url = $this->item->url(); + $v->previous_page_url = $this->item->url("page=" . ($this->page - 1)); + } + + if ($this->page != $this->max_pages) { + $v->next_page_url = $this->item->url("page=" . ($this->page + 1)); + $v->last_page_url = $this->item->url("page={$this->max_pages}"); + } + + $v->first_visible_position = ($this->page - 1) * $this->page_size + 1; + $v->last_visible_position = $this->page * $this->page_size; + } else { + $v->position = $this->position; + $v->total = $this->sibling_count; + if ($v->previous_page = $this->previous_item) { + $v->previous_page_url = $this->previous_item->url(); + } + + if ($v->next_page = $this->next_item) { + $v->next_page_url = $this->next_item->url(); + } } + + return $v; } /** |