Вы можете достичь этого, создав собственный модуль.
В этом модуле вы должны создать наблюдателя на событие catalog_product_save_after.
Поскольку я не знаю, какую версию Magento вы используете, я просто дам вам некоторые фрагменты, которые могут или не могут работать в вашей текущей версии, но определенно помогут вам понять.
Вот как должен выглядеть ваш пользовательский модуль config.xml:
<global>
<events>
<catalog_product_save_after>
<observers>
<calculateBestValue>
<type>singleton</type>
<class>Foo_Bar_Model_Observer</class>
<method>calcBestValue</method>
</calculateBestValue>
</observers>
<catalog_product_save_after>
</events>
</global>
А это ваша модель Observer.php.
public function calcBestValue(Varien_Event_Observer $observer){
$_product = $observer->getEvent()->getProduct();
// Here you can access your productData and do your logic
// Ex: $_product->getData('weight');
// Ex: $_product->getData('price');
// Ex: $_product->getData('mass');
// Ex: $_product->getData('size');
/* Your best value logic here */
// After that you just need to set the bestValue attribute in the product
$_product->setBestValue($bestValue);
}
Вам потребуется создать атрибут каталога для «Best Value» и связать его с набором атрибутов.
После того, как «логика наилучшего значения» будет готова, вам просто нужно включить свой собственный атрибут для сортировки в списке товаров. См https://magento.stackexchange.com/questions/9928/adding-custom-attributes-to-product-list