Blog

More complete breadcrumbs for Ubercart checkout

Written by Metal Toad Staff | Nov 18, 2009 12:00:00 AM
Filed under:

By default, Ubercart sets the breadcrumb on the checkout page to simply "Home", which I personally find a bit odd. Because it calls drupal_set_breadcrumb() late in the request cycle, it's not even possible to create menu links for use by the menu_breadcrumb or menutrails modules. Stranger still, the cart settings page offers a "Custom cart breadcrumb" text and URL option, but it's hard-coded to use a single link instead of a trail of links.

Here is a small snippet that will set the breadcrumbs to mimic the URL paths, for example:

Home › Cart › Checkout

/**
 * Implementation of hook_preprocess_page().
 */
function mymodule_preprocess_page(&$variables) {
  /*
   * This section sets the breadcrumb on the cart pages hierarchically
   * according to the path elements.  A preprocess function is
   * needed instead of drupal_set_breadcrumb() because Ubercart
   * aleady calls drupal_set_breadcrumb() with undesirable results,
   * which also thwarts the menutrails module.
   */
  $menu = menu_get_item();
  if (preg_match('/^cart($|\/)/', $menu['path'])) {
    $crumbs = array(l(t('Home'), '<front>'));
    $paths = array();
    foreach ($menu['map'] as $arg) {
      $paths[] = $arg;
      $crumbs[] = l(ucfirst($arg), implode('/', $paths));
    }
   $variables['breadcrumb'] = theme('breadcrumb', $crumbs);
  }
}