Product Display Node: Display lowest price for the displays variations
I'm not a big fan of posting questions but I really have exhausted my google search, drupal search, code hacking etc...
I'm not against writing this bit of functionality but it's something I would have thought already existed and I don't want to write it again ;)
As a demo of my problem
My display node is as follows
1. My Super Product
Variations
a. large super product - £4
b. small super product - £2
c. extra large super product - £6
Much in the way kickstart does I have a view of rendered entities using the view mode to display the fields. However, I don't see anyway of making the lowest price be displayed. I.e. Prices From £2. It seems to default to the first variation in the list so £4.
Now this works as I can reorganise my variations but when I hand this over I can't trust that people will keep this information up to date.
Am I right in saying this functionality doesn't exist?
Comments
Any luck?
Did you find a way to do this? I have a custom node template for my product lists and in that I'd like to display the lowest price not the price from the 1st variation.
Anyone know how to do this?
Anyone know how to do this?
You can manually drag and drop a production variation to the top of all variations if you have Inline Entity Form installed, but there isn't any sort filters that let you select the lowest priced item to be the default one.
I have 1000's of products so to do this manually for each is out of the question.
My solution but needs works
I borrowed so code I found here https://drupal.org/node/1809970 and ended up with the following which seems to work
function my_module_entity_view($entity, $entity_type, $view_mode, $langcode) {
if ($entity_type == 'node' && isset($entity->field_product && $view_mode == 'product_list')) {
$product_ids = $entity->field_product[LANGUAGE_NONE];
$prices = array();
foreach ($product_ids as $delta => $value) {
$product = commerce_product_load($value['product_id']);
foreach ($product->commerce_price[LANGUAGE_NONE] as $item) {
// calculate final prices based on components
$components = array();
$weight = 0;
foreach ($item['data']['components'] as $key => $component) {
$component_type = commerce_price_component_type_load($component['name']);
if (empty($components[$component['name']])) {
$components[$component['name']] = array(
'title' => $component_type['display_title'],
'price' => commerce_price_component_total($item, $component['name']),
'weight' => $component_type['weight'],
);
$weight = max($weight, $component_type['weight']);
}
}
// Add the actual field value to the array.
$components['commerce_price_for_range'] = array(
'price' => $item,
'weight' => $weight + 1,
);
// Sort the components by weight.
uasort($components, 'drupal_sort_weight');
// Add final prices to an array in order to find the highest and lowest price
foreach ($components as $key => &$component) {
$prices[$component['price']['amount']] = commerce_currency_format($component['price']['amount'],$component['price']['currency_code']);
}
}
}
ksort($prices);
$sorted = array_values($prices);
$min = $sorted[0];
$entity->content['product:commerce_price_lowest'] = array(
'#markup' => $min,
'#weight' => 10,
);
}
}
ignore this, posted in error
ignore this, posted in error
Solution?
hi, did you find a solution? I could really do with this working. Thanks
Can someone give us a
Can someone give us a solution? This problem (and is a real, annoying problem...) seems unsolved 3 years after scotthooker post the question!
Thanks
Solution: Commerce From Price
This is an old issue and surprisingly unsolved in Commerce Core, while this is quite a basic functionality for a web shop in my opinion.
I created the module Commerce From Price to provide this functionality for Drupal 9.4 or higher.
It works via a field formatter that can be applied to the Variations field on product level. It basically displays the variations references as a single lowest price with optional before and after label.