From ddc5ad96db347e60c659aa756ecbd0e7e5528f12 Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Wed, 30 May 2012 12:59:02 -0300 Subject: [PATCH] Breadcrumbs --- includes/Breadcrumbs.inc | 78 ++++++++++++++++++++++++++++++++++++++++ islandora.module | 2 ++ 2 files changed, 80 insertions(+) create mode 100644 includes/Breadcrumbs.inc diff --git a/includes/Breadcrumbs.inc b/includes/Breadcrumbs.inc new file mode 100644 index 00000000..eb36111c --- /dev/null +++ b/includes/Breadcrumbs.inc @@ -0,0 +1,78 @@ +repository); + + if(isset($breadcrumbs[0])) { + unset($breadcrumbs[0]); + } + + $breadcrumbs = array_reverse($breadcrumbs); + + return $breadcrumbs; +} + +/** + * Builds an array of drupal links for use in breadcrumbs. + * + * @todo Make fully recursive... + * + * @global type $base_url + * @param type $pid + * @param type $breadcrumbs + * @param type $level + */ +function islandora_get_breadcrumbs_recursive($pid, &$breadcrumbs, $repository) { + // Before executing the query, we hve a base case of accessing the top-level collection + global $base_url; + static $max_level = 10; + static $level = -1; + + if (count($breadcrumbs) === 0) { + $level = $max_level; + } + + $root = variable_get('islandora_repository_pid', 'islandora:root'); + if ($pid == $root) { + $breadcrumbs[] = l(menu_get_active_title(), 'islandora'); + $breadcrumbs[] = l(t('Home'), ''); + } + else { + $query_string = 'select $parentObject $title $content from <#ri> + where ( + $title + and $parentObject $content + and ( + $parentObject + or $parentObject + or $parentObject + ) + and $parentObject + ) + minus $content + order by $title desc'; + $results = $repository->ri->itqlQuery($query_string); + + if (count($results) > 0 && $level > 0) { + $parent = $results[0]['parentObject']['value']; + $this_title = $results[0]['title']['value']; + + if (empty($this_title)) { + $this_title = t('-'); + } + + $breadcrumbs[] = l($this_title, "islandora/object/$pid"); + + $level--; + islandora_get_breadcrumbs_recursive($parent, $breadcrumbs, $repository); + } + else { + $breadcrumbs[] = '...'; //Add an non-link, as we don't know how to get back to the root. + islandora_get_breadcrumbs_recursive($root, $breadcrumbs, $repository); //And render the last two links and break (on the next pass). + } + } +} \ No newline at end of file diff --git a/islandora.module b/islandora.module index 76697a1e..3e1dabe3 100644 --- a/islandora.module +++ b/islandora.module @@ -480,6 +480,8 @@ function islandora_view_default_object() { * @return string */ function islandora_view_object($object_id = NULL) { + module_load_include('inc', 'islandora', 'includes/Breadcrumbs'); + drupal_set_breadcrumb(islandora_get_breadcrumbs($object_id)); //return $object_id; if (!isset($object_id)) { $object_id = variable_get('islandora_repository_pid', 'islandora:root');