summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorBharat Mediratta <bharat@menalto.com>2009-11-14 14:25:39 -0800
committerBharat Mediratta <bharat@menalto.com>2009-11-14 14:25:39 -0800
commit081ce9f6ca07b834fd31d3d340990504dd68f821 (patch)
treebb6d8597bbedbf1327475b8c2ad4b63f0170f16d /modules
parent100a66d861849ab0d78dca84b0b06c1af973752a (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.php2
-rw-r--r--modules/gallery/libraries/Theme_View.php48
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;
}
/**