Lists of products are littering the breadcrumb with the categories of the final product node in the list. Is this new behaviour in 7.x-3.0-rc4, or a result of the recent release of views? I wasn't seeing this in rc3. I had to turn off catalog breadcrumbs as it has become useless.

On my site, I have a list of featured products in a block. This last product in that list always is responsible for what is displayed in the breadcrumb, even when viewing a full product node. My desired behaviour is for full product nodes to set the breadcrumb.

Essentially uc_catalog_node_view is invoked for every product in my lists and the $view_mode is 'full' for each product.

CommentFileSizeAuthor
#5 1419128-breadcrumb-display-price.patch725 byteslongwave
Support from Acquia helps fund testing for Drupal Acquia logo

Comments

longwave’s picture

Category: bug » support
Status: Active » Postponed (maintainer needs more info)

So if you turn your featured products block off, the problem goes away? uc_catalog_node_view should only be invoked with $view_mode as 'full' when viewing a complete product node, not for teasers or field listings. Can you provide an export of your view?

There have been a couple of bug fixes to uc_catalog recently regarding multilingual taxonomy terms, but nothing that should change this behaviour.

age3141592’s picture

Correct, turning off the featured products block off makes the problem go away. For simplicity I only mentioned this block, but I also have a "what's hot" page that gives the same problem.

Here's the featured products block view export:

$view = new view;
$view->name = 'products';
$view->description = 'A view for all products and block of featured products';
$view->tag = 'default';
$view->base_table = 'node';
$view->human_name = 'Products';
$view->core = 7;
$view->api_version = '3.0';
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */

/* Display: Master */
$handler = $view->new_display('default', 'Master', 'default');
$handler->display->display_options['title'] = 'Products';
$handler->display->display_options['access']['type'] = 'perm';
$handler->display->display_options['cache']['type'] = 'none';
$handler->display->display_options['query']['type'] = 'views_query';
$handler->display->display_options['query']['options']['query_comment'] = FALSE;
$handler->display->display_options['exposed_form']['type'] = 'basic';
$handler->display->display_options['pager']['type'] = 'full';
$handler->display->display_options['pager']['options']['items_per_page'] = '20';
$handler->display->display_options['style_plugin'] = 'grid';
$handler->display->display_options['row_plugin'] = 'fields';
/* Field: Content: Title */
$handler->display->display_options['fields']['title']['id'] = 'title';
$handler->display->display_options['fields']['title']['table'] = 'node';
$handler->display->display_options['fields']['title']['field'] = 'title';
$handler->display->display_options['fields']['title']['label'] = '';
$handler->display->display_options['fields']['title']['alter']['alter_text'] = 0;
$handler->display->display_options['fields']['title']['alter']['make_link'] = 0;
$handler->display->display_options['fields']['title']['alter']['absolute'] = 0;
$handler->display->display_options['fields']['title']['alter']['word_boundary'] = 0;
$handler->display->display_options['fields']['title']['alter']['ellipsis'] = 0;
$handler->display->display_options['fields']['title']['alter']['strip_tags'] = 0;
$handler->display->display_options['fields']['title']['alter']['trim'] = 0;
$handler->display->display_options['fields']['title']['alter']['html'] = 0;
$handler->display->display_options['fields']['title']['hide_empty'] = 0;
$handler->display->display_options['fields']['title']['empty_zero'] = 0;
$handler->display->display_options['fields']['title']['link_to_node'] = 1;
/* Field: Content: Image */
$handler->display->display_options['fields']['uc_product_image']['id'] = 'uc_product_image';
$handler->display->display_options['fields']['uc_product_image']['table'] = 'field_data_uc_product_image';
$handler->display->display_options['fields']['uc_product_image']['field'] = 'uc_product_image';
$handler->display->display_options['fields']['uc_product_image']['label'] = '';
$handler->display->display_options['fields']['uc_product_image']['alter']['alter_text'] = 0;
$handler->display->display_options['fields']['uc_product_image']['alter']['make_link'] = 0;
$handler->display->display_options['fields']['uc_product_image']['alter']['absolute'] = 0;
$handler->display->display_options['fields']['uc_product_image']['alter']['external'] = 0;
$handler->display->display_options['fields']['uc_product_image']['alter']['replace_spaces'] = 0;
$handler->display->display_options['fields']['uc_product_image']['alter']['trim_whitespace'] = 0;
$handler->display->display_options['fields']['uc_product_image']['alter']['nl2br'] = 0;
$handler->display->display_options['fields']['uc_product_image']['alter']['word_boundary'] = 1;
$handler->display->display_options['fields']['uc_product_image']['alter']['ellipsis'] = 1;
$handler->display->display_options['fields']['uc_product_image']['alter']['strip_tags'] = 0;
$handler->display->display_options['fields']['uc_product_image']['alter']['trim'] = 0;
$handler->display->display_options['fields']['uc_product_image']['alter']['html'] = 0;
$handler->display->display_options['fields']['uc_product_image']['element_label_colon'] = FALSE;
$handler->display->display_options['fields']['uc_product_image']['element_default_classes'] = 1;
$handler->display->display_options['fields']['uc_product_image']['hide_empty'] = 0;
$handler->display->display_options['fields']['uc_product_image']['empty_zero'] = 0;
$handler->display->display_options['fields']['uc_product_image']['hide_alter_empty'] = 1;
$handler->display->display_options['fields']['uc_product_image']['click_sort_column'] = 'fid';
$handler->display->display_options['fields']['uc_product_image']['settings'] = array(
  'image_style' => 'thumbnail',
  'image_link' => 'content',
);
$handler->display->display_options['fields']['uc_product_image']['group_column'] = 'fid';
$handler->display->display_options['fields']['uc_product_image']['group_rows'] = 1;
$handler->display->display_options['fields']['uc_product_image']['delta_limit'] = '1';
$handler->display->display_options['fields']['uc_product_image']['delta_offset'] = '0';
$handler->display->display_options['fields']['uc_product_image']['delta_reversed'] = 0;
$handler->display->display_options['fields']['uc_product_image']['delta_first_last'] = 0;
$handler->display->display_options['fields']['uc_product_image']['field_api_classes'] = 0;
/* Field: Product: Display price */
$handler->display->display_options['fields']['display_price']['id'] = 'display_price';
$handler->display->display_options['fields']['display_price']['table'] = 'uc_products';
$handler->display->display_options['fields']['display_price']['field'] = 'display_price';
$handler->display->display_options['fields']['display_price']['label'] = '';
$handler->display->display_options['fields']['display_price']['alter']['alter_text'] = 0;
$handler->display->display_options['fields']['display_price']['alter']['make_link'] = 0;
$handler->display->display_options['fields']['display_price']['alter']['absolute'] = 0;
$handler->display->display_options['fields']['display_price']['alter']['external'] = 0;
$handler->display->display_options['fields']['display_price']['alter']['replace_spaces'] = 0;
$handler->display->display_options['fields']['display_price']['alter']['trim_whitespace'] = 0;
$handler->display->display_options['fields']['display_price']['alter']['nl2br'] = 0;
$handler->display->display_options['fields']['display_price']['alter']['word_boundary'] = 1;
$handler->display->display_options['fields']['display_price']['alter']['ellipsis'] = 1;
$handler->display->display_options['fields']['display_price']['alter']['strip_tags'] = 0;
$handler->display->display_options['fields']['display_price']['alter']['trim'] = 0;
$handler->display->display_options['fields']['display_price']['alter']['html'] = 0;
$handler->display->display_options['fields']['display_price']['element_label_colon'] = FALSE;
$handler->display->display_options['fields']['display_price']['element_default_classes'] = 1;
$handler->display->display_options['fields']['display_price']['hide_empty'] = 0;
$handler->display->display_options['fields']['display_price']['empty_zero'] = 0;
$handler->display->display_options['fields']['display_price']['hide_alter_empty'] = 1;
$handler->display->display_options['fields']['display_price']['format_plural'] = 0;
/* Field: Stock: Level */
$handler->display->display_options['fields']['stock']['id'] = 'stock';
$handler->display->display_options['fields']['stock']['table'] = 'uc_product_stock';
$handler->display->display_options['fields']['stock']['field'] = 'stock';
$handler->display->display_options['fields']['stock']['label'] = 'Stock';
$handler->display->display_options['fields']['stock']['alter']['alter_text'] = 0;
$handler->display->display_options['fields']['stock']['alter']['text'] = 'In Stock';
$handler->display->display_options['fields']['stock']['alter']['make_link'] = 0;
$handler->display->display_options['fields']['stock']['alter']['absolute'] = 0;
$handler->display->display_options['fields']['stock']['alter']['external'] = 0;
$handler->display->display_options['fields']['stock']['alter']['replace_spaces'] = 0;
$handler->display->display_options['fields']['stock']['alter']['trim_whitespace'] = 0;
$handler->display->display_options['fields']['stock']['alter']['nl2br'] = 0;
$handler->display->display_options['fields']['stock']['alter']['word_boundary'] = 1;
$handler->display->display_options['fields']['stock']['alter']['ellipsis'] = 1;
$handler->display->display_options['fields']['stock']['alter']['strip_tags'] = 0;
$handler->display->display_options['fields']['stock']['alter']['trim'] = 0;
$handler->display->display_options['fields']['stock']['alter']['html'] = 0;
$handler->display->display_options['fields']['stock']['element_label_colon'] = 1;
$handler->display->display_options['fields']['stock']['element_default_classes'] = 1;
$handler->display->display_options['fields']['stock']['empty'] = 'Email to Order';
$handler->display->display_options['fields']['stock']['hide_empty'] = 0;
$handler->display->display_options['fields']['stock']['empty_zero'] = 1;
$handler->display->display_options['fields']['stock']['hide_alter_empty'] = 0;
$handler->display->display_options['fields']['stock']['format_plural'] = 0;
/* Sort criterion: Content: Sticky */
$handler->display->display_options['sorts']['sticky']['id'] = 'sticky';
$handler->display->display_options['sorts']['sticky']['table'] = 'node';
$handler->display->display_options['sorts']['sticky']['field'] = 'sticky';
$handler->display->display_options['sorts']['sticky']['order'] = 'DESC';
/* Sort criterion: Content: Updated date */
$handler->display->display_options['sorts']['changed']['id'] = 'changed';
$handler->display->display_options['sorts']['changed']['table'] = 'node';
$handler->display->display_options['sorts']['changed']['field'] = 'changed';
$handler->display->display_options['sorts']['changed']['order'] = 'DESC';
/* Sort criterion: Content: Post date */
$handler->display->display_options['sorts']['created']['id'] = 'created';
$handler->display->display_options['sorts']['created']['table'] = 'node';
$handler->display->display_options['sorts']['created']['field'] = 'created';
$handler->display->display_options['sorts']['created']['order'] = 'DESC';
/* Filter criterion: Content: Published */
$handler->display->display_options['filters']['status']['id'] = 'status';
$handler->display->display_options['filters']['status']['table'] = 'node';
$handler->display->display_options['filters']['status']['field'] = 'status';
$handler->display->display_options['filters']['status']['value'] = 1;
$handler->display->display_options['filters']['status']['group'] = 0;
$handler->display->display_options['filters']['status']['expose']['operator'] = FALSE;
/* Filter criterion: Content: Type */
$handler->display->display_options['filters']['type']['id'] = 'type';
$handler->display->display_options['filters']['type']['table'] = 'node';
$handler->display->display_options['filters']['type']['field'] = 'type';
$handler->display->display_options['filters']['type']['value'] = array(
  'product' => 'product',
);

/* Display: Page */
$handler = $view->new_display('page', 'Page', 'page');
$handler->display->display_options['path'] = 'products';
$handler->display->display_options['menu']['type'] = 'normal';
$handler->display->display_options['menu']['title'] = 'Products';
$handler->display->display_options['menu']['name'] = 'main-menu';

/* Display: Feed */
$handler = $view->new_display('feed', 'Feed', 'feed');
$handler->display->display_options['pager']['type'] = 'some';
$handler->display->display_options['style_plugin'] = 'rss';
$handler->display->display_options['row_plugin'] = 'node_rss';
$handler->display->display_options['path'] = 'products.xml';
$handler->display->display_options['displays'] = array(
  'default' => 'default',
  'page' => 'page',
);

/* Display: Block */
$handler = $view->new_display('block', 'Block', 'block');
$handler->display->display_options['defaults']['title'] = FALSE;
$handler->display->display_options['title'] = 'Featured Products';
$handler->display->display_options['defaults']['pager'] = FALSE;
$handler->display->display_options['pager']['type'] = 'some';
$handler->display->display_options['pager']['options']['items_per_page'] = '5';
$handler->display->display_options['defaults']['style_plugin'] = FALSE;
$handler->display->display_options['style_plugin'] = 'default';
$handler->display->display_options['defaults']['style_options'] = FALSE;
$handler->display->display_options['defaults']['row_plugin'] = FALSE;
$handler->display->display_options['row_plugin'] = 'fields';
$handler->display->display_options['defaults']['row_options'] = FALSE;
$handler->display->display_options['defaults']['fields'] = FALSE;
/* Field: Content: Title */
$handler->display->display_options['fields']['title']['id'] = 'title';
$handler->display->display_options['fields']['title']['table'] = 'node';
$handler->display->display_options['fields']['title']['field'] = 'title';
$handler->display->display_options['fields']['title']['label'] = '';
$handler->display->display_options['fields']['title']['alter']['alter_text'] = 0;
$handler->display->display_options['fields']['title']['alter']['make_link'] = 0;
$handler->display->display_options['fields']['title']['alter']['absolute'] = 0;
$handler->display->display_options['fields']['title']['alter']['word_boundary'] = 0;
$handler->display->display_options['fields']['title']['alter']['ellipsis'] = 0;
$handler->display->display_options['fields']['title']['alter']['strip_tags'] = 0;
$handler->display->display_options['fields']['title']['alter']['trim'] = 0;
$handler->display->display_options['fields']['title']['alter']['html'] = 0;
$handler->display->display_options['fields']['title']['hide_empty'] = 0;
$handler->display->display_options['fields']['title']['empty_zero'] = 0;
$handler->display->display_options['fields']['title']['link_to_node'] = 1;
/* Field: Product: Display price */
$handler->display->display_options['fields']['display_price']['id'] = 'display_price';
$handler->display->display_options['fields']['display_price']['table'] = 'uc_products';
$handler->display->display_options['fields']['display_price']['field'] = 'display_price';
$handler->display->display_options['fields']['display_price']['label'] = '';
$handler->display->display_options['fields']['display_price']['alter']['alter_text'] = 0;
$handler->display->display_options['fields']['display_price']['alter']['make_link'] = 0;
$handler->display->display_options['fields']['display_price']['alter']['absolute'] = 0;
$handler->display->display_options['fields']['display_price']['alter']['external'] = 0;
$handler->display->display_options['fields']['display_price']['alter']['replace_spaces'] = 0;
$handler->display->display_options['fields']['display_price']['alter']['trim_whitespace'] = 0;
$handler->display->display_options['fields']['display_price']['alter']['nl2br'] = 0;
$handler->display->display_options['fields']['display_price']['alter']['word_boundary'] = 1;
$handler->display->display_options['fields']['display_price']['alter']['ellipsis'] = 1;
$handler->display->display_options['fields']['display_price']['alter']['strip_tags'] = 0;
$handler->display->display_options['fields']['display_price']['alter']['trim'] = 0;
$handler->display->display_options['fields']['display_price']['alter']['html'] = 0;
$handler->display->display_options['fields']['display_price']['element_label_colon'] = FALSE;
$handler->display->display_options['fields']['display_price']['element_default_classes'] = 1;
$handler->display->display_options['fields']['display_price']['hide_empty'] = 0;
$handler->display->display_options['fields']['display_price']['empty_zero'] = 0;
$handler->display->display_options['fields']['display_price']['hide_alter_empty'] = 1;
$handler->display->display_options['fields']['display_price']['format_plural'] = 0;
/* Field: Stock: Level */
$handler->display->display_options['fields']['stock']['id'] = 'stock';
$handler->display->display_options['fields']['stock']['table'] = 'uc_product_stock';
$handler->display->display_options['fields']['stock']['field'] = 'stock';
$handler->display->display_options['fields']['stock']['label'] = '';
$handler->display->display_options['fields']['stock']['alter']['alter_text'] = 1;
$handler->display->display_options['fields']['stock']['alter']['text'] = 'In Stock';
$handler->display->display_options['fields']['stock']['alter']['make_link'] = 0;
$handler->display->display_options['fields']['stock']['alter']['absolute'] = 0;
$handler->display->display_options['fields']['stock']['alter']['external'] = 0;
$handler->display->display_options['fields']['stock']['alter']['replace_spaces'] = 0;
$handler->display->display_options['fields']['stock']['alter']['trim_whitespace'] = 0;
$handler->display->display_options['fields']['stock']['alter']['nl2br'] = 0;
$handler->display->display_options['fields']['stock']['alter']['word_boundary'] = 1;
$handler->display->display_options['fields']['stock']['alter']['ellipsis'] = 1;
$handler->display->display_options['fields']['stock']['alter']['strip_tags'] = 0;
$handler->display->display_options['fields']['stock']['alter']['trim'] = 0;
$handler->display->display_options['fields']['stock']['alter']['html'] = 0;
$handler->display->display_options['fields']['stock']['element_label_colon'] = FALSE;
$handler->display->display_options['fields']['stock']['element_default_classes'] = 1;
$handler->display->display_options['fields']['stock']['empty'] = 'Special Order';
$handler->display->display_options['fields']['stock']['hide_empty'] = 0;
$handler->display->display_options['fields']['stock']['empty_zero'] = 1;
$handler->display->display_options['fields']['stock']['hide_alter_empty'] = 1;
$handler->display->display_options['fields']['stock']['format_plural'] = 0;
/* Field: Content: Image */
$handler->display->display_options['fields']['uc_product_image']['id'] = 'uc_product_image';
$handler->display->display_options['fields']['uc_product_image']['table'] = 'field_data_uc_product_image';
$handler->display->display_options['fields']['uc_product_image']['field'] = 'uc_product_image';
$handler->display->display_options['fields']['uc_product_image']['label'] = '';
$handler->display->display_options['fields']['uc_product_image']['alter']['alter_text'] = 0;
$handler->display->display_options['fields']['uc_product_image']['alter']['make_link'] = 0;
$handler->display->display_options['fields']['uc_product_image']['alter']['absolute'] = 0;
$handler->display->display_options['fields']['uc_product_image']['alter']['external'] = 0;
$handler->display->display_options['fields']['uc_product_image']['alter']['replace_spaces'] = 0;
$handler->display->display_options['fields']['uc_product_image']['alter']['trim_whitespace'] = 0;
$handler->display->display_options['fields']['uc_product_image']['alter']['nl2br'] = 0;
$handler->display->display_options['fields']['uc_product_image']['alter']['word_boundary'] = 1;
$handler->display->display_options['fields']['uc_product_image']['alter']['ellipsis'] = 1;
$handler->display->display_options['fields']['uc_product_image']['alter']['strip_tags'] = 0;
$handler->display->display_options['fields']['uc_product_image']['alter']['trim'] = 0;
$handler->display->display_options['fields']['uc_product_image']['alter']['html'] = 0;
$handler->display->display_options['fields']['uc_product_image']['element_label_colon'] = FALSE;
$handler->display->display_options['fields']['uc_product_image']['element_default_classes'] = 1;
$handler->display->display_options['fields']['uc_product_image']['hide_empty'] = 0;
$handler->display->display_options['fields']['uc_product_image']['empty_zero'] = 0;
$handler->display->display_options['fields']['uc_product_image']['hide_alter_empty'] = 1;
$handler->display->display_options['fields']['uc_product_image']['click_sort_column'] = 'fid';
$handler->display->display_options['fields']['uc_product_image']['settings'] = array(
  'image_style' => 'sidebar',
  'image_link' => 'content',
);
$handler->display->display_options['fields']['uc_product_image']['group_column'] = 'fid';
$handler->display->display_options['fields']['uc_product_image']['group_rows'] = 1;
$handler->display->display_options['fields']['uc_product_image']['delta_limit'] = '1';
$handler->display->display_options['fields']['uc_product_image']['delta_offset'] = '0';
$handler->display->display_options['fields']['uc_product_image']['delta_reversed'] = 0;
$handler->display->display_options['fields']['uc_product_image']['delta_first_last'] = 0;
$handler->display->display_options['fields']['uc_product_image']['field_api_classes'] = 0;
age3141592’s picture

I reverted to previous versions of the views module, and get the same results. So it's not something that was introduced there.

Agreed, the recent uc_catalog changes should not have affected this behaviour. Must be something I did, but I'm at a loss to figure it out at the moment.

age3141592’s picture

Okay, I've narrowed it down.

I created a new version of the block view, and added the fields I wanted one at a time.

Added Content: Title - works as expected
Added Content: Image - works as expected
Added Stock: Level (Level) - works as expected
Added Product: Display price (Price) - *** breadcrumbs get littered ****

removed Product: Display price (Price) - works again as expected

Added Product: Sell price (Sell price) - works as expected
Added Product: Display price (Price) - *** breadcrumbs get littered ****

So this is a result of Display price being used in a view.

longwave’s picture

Status: Postponed (maintainer needs more info) » Needs review
FileSize
725 bytes

Please test the attached patch.

age3141592’s picture

Perfect. Tested this out and it works as expected. The block view, and page views no longer litter the breadcrumbs. Full nodes do correctly set the breadcrumb. Many thanks.

longwave’s picture

Category: support » bug
Status: Needs review » Fixed

Committed.

Status: Fixed » Closed (fixed)

Automatically closed -- issue fixed for 2 weeks with no activity.

age3141592’s picture

Status: Closed (fixed) » Needs review

I'm reopening as I found that this same problem exists with product kits.

It can be fixed by tweaking uc_product_kit_view.module

/**
 * Implements hook_view().
 */
function uc_product_kit_view($node, $view_mode) {
  // Give modules a chance to alter this product.  If it is a variant, this will have been done
  // already by uc_product_load_variant(), so we check a flag to be sure not to alter twice.
  $variant = empty($node->variant) ? uc_product_load_variant($node->nid) : $node;

  // Calculate the display price.
  $display_price = 0;
  $suffixes = array();
  if ($node->mutable != UC_PRODUCT_KIT_MUTABLE) {
    // If this is a non-mutable kit, then sum the display price of each of the component products.
    foreach ($variant->products as $product) {
      $build = node_view($product, $view_mode);

That is, change $build = node_view($product) to $build = node_view($product,$view_mode)

longwave’s picture

Status: Needs review » Fixed

Committed the change noted in #9, thanks.

Status: Fixed » Closed (fixed)

Automatically closed -- issue fixed for 2 weeks with no activity.