'custom_breadcrumbs_views', 'field' => 'views_path', 'type' => 'views', 'name_constructor' => '_custom_breadcrumbs_views_breadcrumb_name', ); return $breadcrumb_type_info; } /** * Constructs a default name to display in the admin screen. * * @param $breadcrumb * The breadcrumb object. * * @return * A text string that will be used as the breadcrumb name. */ function _custom_breadcrumbs_views_breadcrumb_name($breadcrumb) { if (isset($breadcrumb->views_path)) { return $breadcrumb->views_path; } } /** * Implements hook_menu(). */ function custom_breadcrumbs_views_menu() { $items = array(); $items['admin/build/custom_breadcrumbs/views/add'] = array( 'title' => 'Views', 'page callback' => 'drupal_get_form', 'page arguments' => array('custom_breadcrumbs_views_form', 'views'), 'access callback' => 'user_access', 'access arguments' => array('administer custom breadcrumbs'), 'type' => MENU_LOCAL_TASK, 'weight' => 5, ); $items['admin/build/custom_breadcrumbs/views/edit'] = array( 'title' => 'Edit custom breadcrumb for views', 'page callback' => 'drupal_get_form', 'page arguments' => array('custom_breadcrumbs_views_form', 'views'), 'access callback' => 'user_access', 'access arguments' => array('administer custom breadcrumbs'), 'type' => MENU_CALLBACK, ); return $items; } /** * Implements hook_views_pre_render(). */ function custom_breadcrumbs_views_views_pre_render(&$view) { // Don't really do anything with the view. This is just a pretense to insert a breadcrumb. global $language; $languages = array('language' => $language->language, 'all' => ''); $curpath = drupal_get_normal_path($_GET['q']); // Check to see if the view path matches the current path. foreach ($view->display as $id => $display) { // Identify allowed displays for breadcrumb replacement. if (!_custom_breadcrumbs_allowed_display($display)) continue; $viewpath = _custom_breadcrumbs_construct_view_path($display); if (_custom_breadcrumbs_match_path($curpath, $viewpath)) { $loadpath = $display->display_options['path']; $breadcrumbs = custom_breadcrumbs_load_breadcrumbs('custom_breadcrumbs_views', NULL, array('views_path' => $loadpath), $languages); if (!empty($breadcrumbs)) { if ($breadcrumb = custom_breadcrumbs_select_breadcrumb($breadcrumbs, array('view' => $view))) { // Select breadcrumb for the matching display with the greatest number of explicit arguments. $num = substr_count($breadcrumb->views_path, '%'); if (!isset($max) || (isset($max) && ($num > $max))) { $max = $num; $candidate = $breadcrumb; $max_id = $id; } } } } } if (isset($candidate)) { $objs = _custom_breadcrumbs_views_token_types($view->display[$max_id]); $objs['view'] = $view; if (!isset($objs['node']) && isset($view->result[0]->nid)) { $node = node_load(array('nid' => $view->result[0]->nid)); $objs['node'] = $node; } custom_breadcrumbs_set_breadcrumb($candidate, $objs); return; } if (variable_get('custom_breadcrumbs_set_menu_breadcrumb', FALSE) && (!custom_breadcrumbs_exclude_path())) { // If a views breadcrumb has not been defined for this view, then use the default menu structure. custom_breadcrumbs_set_menu_breadcrumb(); } } /** * Form builder; Displays an edit form for a views breadcrumb. * * @param $type * The type of custom breadcrumb to edit. * * @ingroup forms * @see custom_breadcrumbs_form_validate() * @see custom_breadcrumbs_form_submit() */ function custom_breadcrumbs_views_form(&$form_state, $type) { $form = array(); $breadcrumb = NULL; $bid = arg(5); if (isset($bid)) { drupal_set_title(t('Edit Custom Breadcrumb for View')); $breadcrumbs = custom_breadcrumbs_load_breadcrumbs('custom_breadcrumbs_views', NULL, array('bid' => $bid)); $breadcrumb = array_pop($breadcrumbs); } else { drupal_set_title(t('Add Custom Breadcrumb for View')); } $options = array(); $views = views_get_all_views(); foreach ($views as $view) { if (!isset($view->disabled) || (isset($view->disabled) && !$view->disabled)) { foreach ($view->display as $display) { if (_custom_breadcrumbs_allowed_display($display)) { $name = $display->display_options['path']; $options[$name] = $name; } } } } $form['views_path'] = array( '#type' => 'select', '#title' => t('Views Path'), '#required' => TRUE, '#options' => $options, '#description' => t('The path to the view that this custom breadcrumb trail will apply to.'), '#default_value' => isset($breadcrumb->views_path) ? $breadcrumb->views_path : NULL, '#weight' => -10, ); // Store information needed to save this breadcrumb. $form['#module'] = 'custom_breadcrumbs_views'; $form['#infokey'] = 'views'; $form += custom_breadcrumbs_common_form_elements($bid, $breadcrumb); $form['visibility_php']['#description'] = t('Determine whether this breadcrumb should be displayed by using a PHP snippet to return TRUE or FALSE.'); $form['#submit'][] = 'custom_breadcrumbs_form_submit'; $form['#validate'][] = 'custom_breadcrumbs_form_validate'; return $form; }