使用给定的价格和数量更改小计(自定义属性)

Posted

技术标签:

【中文标题】使用给定的价格和数量更改小计(自定义属性)【英文标题】:Change subtotal with given price & quantity (custom attribute) 【发布时间】:2014-06-04 15:32:48 【问题描述】:

例如我的价格是 10,00 € 这个价格是 100 克 客户可以在数量字段中添加任何 g,例如 300

magento 现在小计 3000,还可以,但不满足我这里的需要。

我需要做: 如果设置了价格和数量,则获取小计/价格数量,设置新的小计

我可以把我的修改放在哪里?

非常感谢! 丹尼斯

编辑 以及观察者的第三次尝试(不工作 atm,没有错误,没有任何反应):

    class Xyz_Catalog_Model_Price_Observer
    
        public function __construct()
        
        

        public function apply_quantity_order($observer)
        
        $order = $observer->getEvent()->getOrder();

        $pricequantity = $order->getPricequantity();

        if($pricequantity != '')
            $old_sub_total = $order->getTotals();
            $new_sub_total = $old_sub_total / 100;
            $order->setTotals($new_sub_total);
         else 

        return $this;
        
        public function apply_quantity_quote($observer)
        
        $quote = $observer->getEvent()->getQuote();

        $pricequantity = $quote->getPricequantity();

        if($pricequantity != '')
            $old_sub_total = $quote->getTotals();
            $new_sub_total = $old_sub_total / 100;
            $quote->setTotals($new_sub_total);
         else 

        return $this;
        
    

XML:

<?xml version="1.0"?>
<config>
  <global>
    <models>
        <xyzcatalog>
             <class>Xyz_Catalog_Model</class>
        </xyzcatalog>
    </models>
    <events>
      <sales_order_save_after>
        <observers>
          <xyz_catalog_price_observer>
            <class>Xyz_Catalog_Model_Price_Observer</class>
            <method>apply_quantity_order</method>
          </xyz_catalog_price_observer>
        </observers>
      </sales_order_save_after>
      <sales_quote_save_after>
        <observers>
          <xyz_catalog_price_observer>
            <class>Xyz_Catalog_Model_Price_Observer</class>
            <method>apply_quantity_quote</method>
          </xyz_catalog_price_observer>
        </observers>
      </sales_quote_save_after>
    </events>
  </global>
</config>

【问题讨论】:

【参考方案1】:

与其覆盖小计计算功能,我建议尝试事件 - sales_quote_save_after 和 sales_order_save_after。

您可以通过观察者方法获取报价和销售

$observer->getEvent()->getOrder() //for order
$observer->getEvent()->getQuote() //for quote

然后相应地修改小计。

编辑:这可能只是提示您如何修改小计。

Edit2:您必须在配置中添加事件观察器,如下所示:

<sales_order_save_after>
    <observers>
        <yourext>
            <class>yourext/observer</class>
            <method>observerMethod</method>
        </yourext>
    </observers>
</sales_order_save_after>

详情请关注Customize Magento using Event/Observer

【讨论】:

我在哪里可以使用这个“事件”,我也许可以得到一些代码来工作,我只是不知道它的正确位置在哪里。谢谢 链接中的示例有效。我对自己代码的尝试肯定是错误的:-)(看我的编辑)。我不确定 xml ?以及如何在此处正确使用 Order 和 Quote。也许我很亲密,你可以再次帮助我。非常感谢。 ops,关于税收,我很抱歉,事实上我复制了那个代码。应该是yourext 我对我的答案进行了编辑,让我编辑你的问题。请参阅 KrishEdit1 部分。 对不起,放弃我的编辑。您必须添加两个 tax 可以替换为 ayourext 之类的任何内容。它只是事件观察者的 id。您必须添加两个事件sales_order_save_aftersales_quote_save_after 我在顶部更新了我的代码。我认为我们接近了,但 getQuote 不起作用。谢谢【参考方案2】:

看看@Programmatically add product to cart with price change

public function applyDiscount(Varien_Event_Observer $observer)

    /* @var $item Mage_Sales_Model_Quote_Item */
    $item = $observer->getQuoteItem();
    if ($item->getParentItem()) 
        $item = $item->getParentItem();
    

    // calc special price
    $percentDiscount = 5;
    $specialPrice = $item->getOriginalPrice() -  $percentDiscount;

    // Make sure we don't have a negative
    if ($specialPrice > 0) 
        $item->setCustomPrice($specialPrice);
        $item->setOriginalCustomPrice($specialPrice);
        $item->getProduct()->setIsSuperMode(true);
    

【讨论】:

我认为这不再奏效了,明天试试。谢谢 您也可以尝试为客户提供总折扣而不是价格折扣。请参阅excellencemagentoblog.com/magento-add-fee-discount-order-total

以上是关于使用给定的价格和数量更改小计(自定义属性)的主要内容,如果未能解决你的问题,请参考以下文章

SSRS自定义代码和页面明智小计

如何制作使用自定义 TestFixture 和 Test 属性的 SpecFlow 插件?

关于HTML5如何自定义属性

Tableau 插入自定义的小计行

迭代项目数量,自定义适配器

prestashop 中的自定义价格计算