Как установить динамическую цену на товары на странице каталога (категории)?
В настоящее время я работаю на сайте, где все цены на товары указаны в баллах вознаграждения , т.Е. клиенты могут использовать свои бонусные баллы по кредитной карте на этом веб-сайте.
Таким образом, цена товара должна быть динамичной в соответствии с типом карты, выбранным клиентом на домашней странице. Для примера клиент посещает сайт
- Появляется всплывающее окно с просьбой выбрать тип карты, которую они собираются использовать для этого операция.
- Они выбирают тип своей кредитной карты, а именно. платина, золото или бриллиант.
- Это хранится в сеансе моего модуля.
- Цена продукта отображается в виде 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);
}
...
Это отлично работает прямо со страницы просмотра продукта до оформления заказа. Но страница категории (страница со списком) по-прежнему отображает цену, указанную в панели администратора.
Как я могу отобразить динамическую цену прямо со страницы категории?
Примечание:
Цена, указанная в панели администратора, жизненно важна, так как это базовая цена для расчета динамической цена зависит от типа карты.
2 answers
Как упоминалось командой Magento,
- Страница продукта продукт загружается сам по себе, поэтому запускается событие
catalog_product_get_final_price
. - Страница списка использует цены из таблицы catalog_product_index_price и не запускает вышеупомянутое событие.
Поэтому я переопределил метод getFinalPrice
в классе Mage_Catalog_Model_Product
, чтобы установить окончательную цену с пользовательским значением, рассчитанным по моей логике.
Здесь следует фрагмент кода
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);
}
Я дорого заплатил за это здесь, в Бразилии, чтобы хорошо использовать это.