Как отсортировать список товаров по «наилучшему значению», то есть по атрибуту, рассчитанному по (цена, деленная на размер)? - PullRequest
0 голосов
/ 19 марта 2012

У меня есть несколько однородных продуктов разных размеров, в граммах. Я хотел бы указать значение, по которому клиент мог бы отсортировать список товаров по наилучшему значению, рассчитанному из цены, деленной на массу / вес / размер. У меня уже есть один атрибут, который представляет собой размер в граммах и определяется числом, за которым следует «g» (например, 100 г, 500 г), поэтому, чтобы упростить его, я полагаю, я бы создал другой атрибут, который отражает вес без 'g' добавляется к значению.

Однако я не знаю, возможно ли автоматически рассчитать значение с помощью атрибутов (то есть создать атрибут, который автоматически вычисляет значение цена / вес без дополнительной работы с моей стороны). Или я должен сделать какой-то специальный код, и где это будет? Любые предложения приветствуются:)

1 Ответ

0 голосов
/ 14 сентября 2017

Вы можете достичь этого, создав собственный модуль. В этом модуле вы должны создать наблюдателя на событие 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...