Как установить динамическую цену на товары на странице каталога (категории)?


В настоящее время я работаю на сайте, где все цены на товары указаны в баллах вознаграждения , т.Е. клиенты могут использовать свои бонусные баллы по кредитной карте на этом веб-сайте.

Таким образом, цена товара должна быть динамичной в соответствии с типом карты, выбранным клиентом на домашней странице. Для примера клиент посещает сайт

  1. Появляется всплывающее окно с просьбой выбрать тип карты, которую они собираются использовать для этого операция.
  2. Они выбирают тип своей кредитной карты, а именно. платина, золото или бриллиант.
  3. Это хранится в сеансе моего модуля.
  4. Цена продукта отображается в виде 5000 баллов за платиновую карту, 6500 баллов за алмазную карту и 8000 баллов за золотую карту.

Теперь я использую событие catalog_product_get_final_price, поэтому, когда клиент переходит на страницу просмотра продукта, цена устанавливается на расчетную цену (баллы).

Вот мой код

Config.xml:

<events>
    <catalog_product_get_final_price>
            <observers>
                <price_change_for_card>
                    <type>singleton</type>
                    <class>price/observer</class>
                    <method>getCardAndModifyViewPrice</method>
                </price_change_for_card>
            </observers>
        </catalog_product_get_final_price>

Observer.php:

class Royal_Price_Model_Observer{

public function getCardAndModifyViewPrice($observer){
        /*
          calculations for my dynamic price based on selected card type
        */
    $product = $observer->getProduct();
    $product->setFinalPrice($dynamic_price);
}
...

Это отлично работает прямо со страницы просмотра продукта до оформления заказа. Но страница категории (страница со списком) по-прежнему отображает цену, указанную в панели администратора.

Как я могу отобразить динамическую цену прямо со страницы категории?

Примечание:

Цена, указанная в панели администратора, жизненно важна, так как это базовая цена для расчета динамической цена зависит от типа карты.

Author: Shathish, 2013-12-04

2 answers

Как упоминалось командой Magento,

  • Страница продукта продукт загружается сам по себе, поэтому запускается событие catalog_product_get_final_price.
  • Страница списка использует цены из таблицы catalog_product_index_price и не запускает вышеупомянутое событие.

Поэтому я переопределил метод getFinalPrice в классе Mage_Catalog_Model_Product, чтобы установить окончательную цену с пользовательским значением, рассчитанным по моей логике.

 1
Author: Shathish, 2013-12-04 09:04:49

Здесь следует фрагмент кода

    public function modifyPrice(Varien_Event_Observer $observer){ // you can remove the DI if you want to
        // Get the quote item
        $item = $observer->getQuoteItem();
        // Ensure we have the parent item, if it has one
        $item = ( $item->getParentItem() ? $item->getParentItem() : $item );
        // Load the custom price you can change to any variable you want
        $price = (int)Mage::app()->getRequest()->getParam('custom_price');
        // Set the custom price
        $item->setCustomPrice($price);
        $item->setOriginalCustomPrice($price);
        // Enable super mode on the product.
        $item->getProduct()->setIsSuperMode(true);
    }

Я дорого заплатил за это здесь, в Бразилии, чтобы хорошо использовать это.

 1
Author: Sakai, 2014-06-02 22:45:42