у меня есть ввод на странице продукта, который позволяет покупателям изменять цену:
я следовал этому руководству: http://magentotutorial.org/programmatically-add-product-cart-price-change-magento/
и это мой код: config.xml:
<events>
<core_block_abstract_to_html_after>
<observers>
<customprice>
<type>singleton</type>
<class>WebDirect_CustomPrice_Model_Observer</class>
<method>convertPricespanToInput</method>
</customprice>
</observers>
</core_block_abstract_to_html_after>
<checkout_cart_product_add_after>
<observers>
<customprice>
<type>singleton</type>
<class>WebDirect_CustomPrice_Model_Observer</class>
<method>applyCustomPrice</method>
</customprice>
</observers>
</checkout_cart_product_add_after>
</events>
класс наблюдателя:
<?php
class WebDirect_CustomPrice_Model_Observer
{
const MODULE_NAME = 'WebDirect_CustomPrice';
public function convertPricespanToInput($observer = NULL) {
if (!$observer) {
return;
}
if ('product.info.simple' == $observer->getEvent()->getBlock()->getNameInLayout()) {
if (!Mage::getStoreConfig('advanced/modules_disable_output/'.self::MODULE_NAME)) {
$transport = $observer->getEvent()->getTransport();
$block = new WebDirect_CustomPrice_Block_priceSpanToInput();
$block->setPassingTransport($transport['html']);
$block->toHtml();
}
}
return $this;
}
/**
* @param Varien_Event_Observer $observer
*/
public function applyCustomPrice(Varien_Event_Observer $observer) {
/* @var $item Mage_Sales_Model_Quote_Item */
$item = $observer->getQuoteItem();
if ($item->getParentItem()) {
$item = $item->getParentItem();
}
// Discounted 50% off
$percentDiscount = 0.50;
// This makes sure the discount isn't applied over and over when refreshing
$specialPrice = $item->getOriginalPrice() - ($item->getOriginalPrice() * $percentDiscount);
// Make sure we don't have a negative
if ($specialPrice > 0) {
$item->setCustomPrice($specialPrice);
$item->setOriginalCustomPrice($specialPrice);
$item->getProduct()->setIsSuperMode(true);
}
}
}
эта функция только для теста, когда я нажимаю добавить в корзину, ничего не меняется! есть ли в этом ошибка?
die('here')
в начале метода и убедитесь, что он вызывается, когда вы добавляете товар в корзину. Если это так, переместите кубик на проверку специальной цены и измените его наdie($specialPrice);
, чтобы убедиться, что он входит в оператор if. Сообщите нам, действительно ли метод вызывается, если нет, попробуйте очистить кеш и проверить, включен ли модуль в админке. - person Ashley Swatton   schedule 25.03.2014$item->setOriginalCustomPrice(100.00);
. Если это сработает, вам нужно будет отладить свои расчеты и выяснить, где что-то идет не так. Я думаю, ты почти у цели :-) - person Ashley Swatton   schedule 25.03.2014sales_quote_add_item
? Это срабатывает после добавления/обновления элемента корзины. - person Jongosi   schedule 30.04.2014