View source
<?php
module_load_include('inc', 'custom_breadcrumbs', 'custom_breadcrumbs.admin');
module_load_include('inc', 'custom_breadcrumbs', 'custom_breadcrumbs_common');
function custom_breadcrumbs_views_cb_breadcrumb_info() {
$breadcrumb_type_info = array();
$breadcrumb_type_info['views'] = array(
'table' => 'custom_breadcrumbs_views',
'field' => 'views_path',
'type' => 'views',
'name_constructor' => '_custom_breadcrumbs_views_breadcrumb_name',
);
return $breadcrumb_type_info;
}
function _custom_breadcrumbs_views_breadcrumb_name($breadcrumb) {
if (isset($breadcrumb->views_path)) {
return $breadcrumb->views_path;
}
}
function custom_breadcrumbs_views_menu() {
$items = array();
$items['admin/structure/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/structure/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;
}
function custom_breadcrumbs_views_views_post_render(&$view) {
global $language;
$languages = array(
'language' => $language->language,
'all' => '',
);
$curpath = drupal_get_normal_path($_GET['q']);
foreach ($view->display as $id => $display) {
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,
))) {
$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($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()) {
custom_breadcrumbs_set_menu_breadcrumb();
}
}
function custom_breadcrumbs_views_form($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,
);
$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. Do not use opening and closing php tags.');
$form['#submit'][] = 'custom_breadcrumbs_form_submit';
$form['#validate'][] = 'custom_breadcrumbs_form_validate';
return $form;
}