A tiny cart block for Ubercart

Here's a tiny shopping cart block for Ubercart that fits right in with the menu. Of course the standard block could be themed this way, but this is handy when the design calls for the full-sized block elsewhere in the layout.

/**
 * Implementation of hook_block().
 */
function uc_microcart_block($op = 'list', $delta = 0, $edit = array()) {
  switch ($op) {
    case 'list':
      $blocks[0] = array(
        'info' => t('Micro-sized cart block for page header.'),
        // This block cannot be cached, because anonymous
        // sessions can have differing cart contents.
        // To improve this, see drupal.org/project/uc_ajax_cart
        'cache' => BLOCK_NO_CACHE,
      );
      return $blocks;
    case 'view':
      if ($item_count = uc_cart_get_total_qty()) {
        $block = array();
        $block['subject'] = '';
        $block['content'] = theme('image',
          drupal_get_path('module', 'uc_cart') .'/images/cart-full.png');
        $block['content'] .= format_plural($item_count,
          'My cart: 1 item', 'My cart: @count items');
        $block['content'] = l($block['content'], 'cart', array('html' => TRUE));
        return $block;
      }
      break;
    }
}
Filed under: 


Hi Dylan, It looks great. I've added the code to one of my custom module files but how do I make it appear on my site? The item doesn't show up in my blocks list.


Hey Dylan,
Got the block going and its great, but what is the next step if I want to have it integrated into the nav menu like you having going on in the screenshot? Right now i've got the micro cart block sitting right next to my nav menu block.
Thanks, Joe
Thanks, Joe


Hi, thanks a lot for this great portion of code. I have a question of compatibility, does this code works on Drupal 7 and Ubercart 3 ?

Thanks a lot for you work
Fredj, CEO of vitre teintée


Hi, the block doesn't appear at all for some reason. I"m using ubercart 2.7 with Drupal 6.22. Any ideas?
Thanks.


Hi Dylan,

Thank you so much for your example. Here is the D7 version for those interested.

function uc_microcart_block_info() {
    $blocks['microcart'] = array(
        'info' => t('Microcart'),
        // This block cannot be cached, because anonymous
        // sessions can have differing cart contents.
        // To improve this, see drupal.org/project/uc_ajax_cart
        'cache' => DRUPAL_NO_CACHE
    );
 
    return $blocks;
}
 
function uc_microcart_block_view($delta = '') {
    $block = array();
 
    switch ($delta) {
        case 'microcart':
            if ($item_count = uc_cart_get_total_qty()) {
                $block = array();
                $block['subject'] = '';
                $imagePath = drupal_get_path('module', 'uc_cart') .'/images/cart-full.png';
                $linkText = theme('image', array('path' => $imagePath));
                $linkText .= format_plural($item_count, 'My cart: 1 item', 'My cart: @count items');
                //$block['content'] = l($block['content'], 'cart', array('html' => TRUE));
                //$block['content'] = l($linkText, 'cart', array('html' => TRUE));
                $block['content'] = $linkText;
                return $block;
            }
            $block['content'] = 'View Cart';
            break;
    }
    return $block;
}


Correction:

function uc_microcart_block_info() {
    $blocks['microcart'] = array(
        'info' => t('Microcart'),
        // This block cannot be cached, because anonymous
        // sessions can have differing cart contents.
        // To improve this, see drupal.org/project/uc_ajax_cart
        'cache' => DRUPAL_NO_CACHE
    );
 
    return $blocks;
}
 
function uc_microcart_block_view($delta = '') {
    $block = array();
 
    switch ($delta) {
        case 'microcart':
            if ($item_count = uc_cart_get_total_qty()) {
                $block = array();
                $block['subject'] = '';
                $imagePath = drupal_get_path('module', 'uc_cart') .'/images/cart-full.png';
                $linkText = theme('image', array('path' => $imagePath));
                $linkText .= format_plural($item_count, 'My cart: 1 item', 'My cart: @count items');
                $block['content'] = l($linkText, 'cart', array('html' => TRUE));
                return $block;
            }
            break;
    }
    return $block;
}

About the Author

Dylan Tack, Director of Technology

Dylan is a software engineer with more than a decade of experience working with a wide variety of clients including the Linux Foundation, PBS, Habitat for Humanity, TV.com and the Emmys. His background includes training as an electrical engineer, but he became passionate about open source through his work with a university genetics lab.

Dylan is a proud member of the Drupal community, a member of the Drupal security team, and has extensive experience with Perl and Java. His other interests include computer security, embedded design, climbing, and brewing.

His latest talk at the Pacific Northwest Summit was titled: "Drupal Security for People Who Don't Care".

Interested? Let's talk.