Please see attachment. Using Commerce Kickstart 2.
I have a working solution, but I am hoping someone can tell me how to improve it, as it ‘feels’ poor.
The footer for the default shopping cart view is a footer called commerce_order_total which shows a subtotal for each line item type… typically labeled ‘Subtotal’ for products and then a generic ‘Shipping’ label for shipping line items.
That generic ‘Shipping’ label is hated by our customers. They expect to see the actual shipping service (UPS, Fedex, etc.) So I created a work-around, which I show below, but I fear it is not an efficient solution… basically I just made a tweaked copy of the default commerce code for the price formatter.
What I hope to improve…
-
Surely there must be a more robust way for the footer to be ‘aware’ of whether the page being viewed is a cart or an order from history without having to look at the URI, right?
-
And is there a faster/cheaper way to retrieve the shipping service without loading the entire order -and- all line items?
-
I was thinking there must be a more granular way to override the description of ‘Shipping’ in that footer without having to re-invent the entire wheel. I just gave up and did the old cut/paste.
TIA,
—JC
function MYTHEME_commerce_price_formatted_components($variables) { global $user; $line_item_title = ''; $order_number = ''; $path_parts = explode('/', request_path() ); if( sizeof($path_parts) == 4 && $path_parts[0] == 'user' && $path_parts[2] == 'orders') { $order = commerce_order_load($path_parts[3]); // dpm($order); } if( isset($order) && !$order ) $order = commerce_cart_order_load($user->uid); if( isset($order) && $order) { foreach ($order->commerce_line_items['und'] as $line) { $line_item = commerce_line_item_load($line['line_item_id']); $line_item_wrapper = entity_metadata_wrapper('commerce_line_item', $line_item); // line item TYPE display title $line_item_type_title = commerce_line_item_type_get_name($line_item_wrapper->type->value()); // for shipping line items if ($line_item_wrapper->type->value() == "shipping") { // shipping data $shipping_data = $line_item_wrapper->value()->data; // shipping method display title $line_item_title = $shipping_data['shipping_service']['title']; } } } // Add the CSS styling to the table. drupal_add_css(drupal_get_path('module', 'commerce_price') . '/theme/commerce_price.theme.css'); // Build table rows out of the components. $rows = array(); // dpm($variables['components']); foreach ($variables['components'] as $name => $component) { // dpm($component); if($component) $rows[] = array( 'data' => array( array( 'data' => ($component['title'] == 'Shipping' && $line_item_title ) ? $line_item_title : $component['title'], 'class' => array('component-title'), ), array( 'data' => $component['formatted_price'], 'class' => array('component-total'), ), ), 'class' => array(drupal_html_class('component-type-' . $name)), ); } return theme('table', array('rows' => $rows, 'attributes' => array('class' => array('commerce-price-formatted-components')))); }