From 3d9e5e439e63404159c1ef763c8b07dd15a367ec Mon Sep 17 00:00:00 2001 From: Bharat Mediratta Date: Sat, 3 Jan 2009 20:14:06 +0000 Subject: Stay on the right page when we navigate up in the breadcrumb. Introduce a "show" parameter which contains the id of the item that we want to show when we go to the parent's page. --- core/controllers/albums.php | 12 ++++++++++++ core/models/item.php | 13 +++++++++++++ 2 files changed, 25 insertions(+) (limited to 'core') diff --git a/core/controllers/albums.php b/core/controllers/albums.php index 668e868a..7f78303e 100644 --- a/core/controllers/albums.php +++ b/core/controllers/albums.php @@ -26,6 +26,18 @@ class Albums_Controller extends Items_Controller { access::required("view", $album); $page_size = module::get_var("core", "page_size", 9); + $show = $this->input->get("show"); + + if ($show) { + $index = $album->get_position($show); + $page = ceil($index / $page_size); + if ($page == 1) { + url::redirect("albums/$album->id"); + } else { + url::redirect("albums/$album->id?page=$page"); + } + } + $page = $this->input->get("page", "1"); $children_count = $album->viewable()->children_count(); $offset = ($page-1) * $page_size; diff --git a/core/models/item.php b/core/models/item.php index ffdaa7e9..6f56e726 100644 --- a/core/models/item.php +++ b/core/models/item.php @@ -234,4 +234,17 @@ class Item_Model extends ORM_MPTT { return model_cache::get("item", $this->album_cover_item_id); } + + /** + * Find the position of the given child id in this album. The resulting value is 1-indexed, so + * the first child in the album is at position 1. + */ + public function get_position($child_id) { + // Right now we only sort by id ascending, so bake that assumption in here. + // @todo fix this when we introduce sort orders. + return ORM::factory("item") + ->where("parent_id", $this->id) + ->where("id <=", $child_id) + ->count_all(); + } } -- cgit v1.2.3