Magento:使用observer以自定义价格将产品添加到购物车

Magento:使用observer以自定义价格将产品添加到购物车,magento,magento-1.7,magento-1.8,Magento,Magento 1.7,Magento 1.8,我在产品页面中有一个输入,允许客户更改价格: 我遵循了那个教程: 这是我的代码: config.xml: <events> <core_block_abstract_to_html_after> <observers> <customprice> <type>singleton</typ

我在产品页面中有一个输入,允许客户更改价格:

我遵循了那个教程:

这是我的代码: 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>

独生子女
WebDirect\u客户价格\u模型\u观察者
将价格转换为输入
独生子女
WebDirect\u客户价格\u模型\u观察者
苹果公司
观察员班:

<?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')
,并检查在将产品添加到购物车时是否正在调用它。如果是这样,将模具移入特殊价格检查,并将其更改为
模具($specialPrice)
以确保它正在输入if语句。让我们知道是否确实调用了该方法,如果没有,请尝试清除缓存并检查模块是否在管理中启用。@AshleySwatton是的,它的EXEXEXTED空白页上有0,那么下一步该怎么办?如果计算了特价,并且应该大于0:-),我认为它不应该以0结束。注释掉你的计算,然后做一些简单的事情,比如
$item->setOriginalCustomPrice(100.00)。如果这是可行的,你需要调试你的计算并找出哪里出了问题。我想你快到了:-)@AshleySwatton,这很有效!!!现在我想得到前端输入的值,正如你在问题图片中看到的,输入的名称和id是“customprice”,你知道怎么做吗?@AshleySwatton你似乎有magento开发的经验,你能检查一下这个问题吗