如何按“最佳价值”对产品列表进行排序,即从(价格除以大小)计算的属性?

时间:2012-03-19 18:47:21

标签: magento attributes product

我有几种不同大小的均质产品,以克为单位。我想提供一个价值,客户可以通过最佳价值对产品列表进行排序,从价格除以质量/重量/尺寸计算得出。我已经有一个属性,其大小以克为单位,由一个数字后跟一个'g'(例如,100g,500g)定义,所以为了更容易,我想我会创建另一个反映重量的属性而不是'g'附加在值上。

但是,我不知道是否可以使用属性自动计算值(即,创建一个自动计算价格/重量值的属性,而不需要我做任何工作)。或者,我是否必须做一些自定义代码,它会在哪里?任何建议赞赏:)

1 个答案:

答案 0 :(得分:0)

您可以通过创建自定义模块来实现此目的。 在此模块中,您必须在“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);
}

您需要为“最佳价值”创建目录属性,并将其与属性集关联。

“最佳价值逻辑”准备就绪后,您只需启用自定义属性即可在产品列表中进行排序。见https://magento.stackexchange.com/questions/9928/adding-custom-attributes-to-product-list