I spent a bit of time helping somebody on freenode’s #drupal-support IRC channel add teaser text to Ubercart’s product grid view. Here’s an example of this from a site developed by left-click: http://www.biolateral.com/catalog/biolateral-cds It also includes audio, which also usually isn’t in the grid display. I’ve removed that part from the code below to simplify things. Awhile ago I posted a patch to add a checkbox to Ubercart to allow for this functionality. People seem to like it: http://www.ubercart.org/contrib/5395 However, that patch modifies core Ubercart, which isn’t ideal. Each time you upgrade Ubercart, you’ll have to remember to reapply my patch. A better solution is to add a theme override to your theme’s template.php file. This is a common practice in Drupal, so if you haven’t done it before, now’s a good time to learn. Just make sure you’re ready to dig into a bit of php. First check out this link for information on overriding themable output in Drupal 6: https://www.drupal.org/node/457740 Here are the steps for getting the teaser to show: 1) Grab entire function theme_uc_catalog_product_grid() from ‘ubercart/uc_catalog/uc_catalog.module’. Substitute ‘theme’ with the name of your theme. I’ve included this code below for reference, including the teaser part. 2) Throw that in your theme’s template.php file (‘/sites/all/themes/MYTHEME’ for example). 3) Here’s the code you add:
Sample code: The line you’ll need to add toUbercart’s default themable grid display function
$product_table .= ''. node_teaser($product->body) .'';
It’s already in the example at the bottom of this post. 4) On the “Administer > Site configuration > Performance” page, click on the “Clear cached data” button. And that should cover it. In my opinion this should be in Ubercart’s core, as a checkbox, but overriding themable output is always a good exercise.
Sample code: Ubercart’s default themable grid display function plus product’s teasers
function YOURTHEMENAME_uc_catalog_product_grid($products) { $product_table = '<div class="category-grid-products"><table>'; $count = 0; foreach ($products as $nid) { $product = node_load($nid); if ($count == 0) { $product_table .= "<tr>"; } elseif ($count % variable_get('uc_catalog_grid_display_width', 3) == 0) { $product_table .= "</tr><tr>"; } $titlelink = l($product->title, "node/$nid", array('html' => TRUE)); if (module_exists('imagecache') && ($field = variable_get('uc_image_'. $product->type, '')) && isset($product->$field) && file_exists($product->{$field}[0]['filepath'])) { $imagelink = l(theme('imagecache', 'product_list', $product->{$field}[0]['filepath'], $product->title, $product->title), "node/$nid", array('html' => TRUE)); } else { $imagelink = ''; } $product_table .= '<td>'; if (variable_get('uc_catalog_grid_display_title', TRUE)) { $product_table .= '<span class="catalog-grid-title">'. $titlelink .'</span>'; } if (variable_get('uc_catalog_grid_display_model', TRUE)) { $product_table .= '<span class="catalog-grid-ref">'. $product->model .'</span>'; } $product_table .= '<span class="catalog-grid-image">'. $imagelink .'</span>'; if (variable_get('uc_catalog_grid_display_sell_price', TRUE)) { $product_table .= '<span class="catalog-grid-sell-price">'. uc_currency_format($product->sell_price) .'</span>'; } $product_table .= ''. node_teaser($product->body) .''; if (variable_get('uc_catalog_grid_display_add_to_cart', TRUE)) { if (variable_get('uc_catalog_grid_display_attributes', TRUE)) { $product_table .= theme('uc_product_add_to_cart', $product); } else { $product_table .= drupal_get_form('uc_catalog_buy_it_now_form_'. $product->nid, $product); } } $product_table .= '</td>'; $count++; } $product_table .= "</tr></table></div>"; return $product_table; }