`
kirenenko04
  • 浏览: 152195 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

Magento update item qty use observer events <checkout_cart_save_after>

 
阅读更多

the Requirement:

 

 there is a visual service item in cart, 

 every time change relation product ,  the service item will be change qty

 so add a Magento Observer model to approach it.

 

here is some content in the config.xml :

<global>
    <helpers>
      <mycheckout>
        <class>Bysoft_Mycheckout_Helper</class>
      </mycheckout>
    </helpers>
     <models>
	  <mycheckout>
		<class>Bysoft_Mycheckout_Model</class>
	  </mycheckout>
	</models>
     <resources>
         <bysoft_mycheckout_setup>
              <setup>
                  <module>Bysoft_Mycheckout</module>
                  <class>Mage_Sales_Model_Mysql4_Setup</class>
              </setup>
         </bysoft_mycheckout_setup>
     </resources>
     <events>
	 <checkout_cart_save_before> <!-- identifier of the event we want to catch -->
        <observers>
          <checkout_cart_save_before_handler> <!-- identifier of the event handler -->
            <type>model</type> <!-- class method call type; valid are model, object and singleton -->
            <class>mycheckout/observer</class> <!-- observers class alias -->
            <method>changeServiceItemQty</method>  <!-- observer's method to be called -->
            <args></args> <!-- additional arguments passed to observer -->
          </checkout_cart_save_before_handler>
        </observers>
      </checkout_cart_save_before>
    </events>
  </global>

  PHP Model Class:

<?php
class Bysoft_Mycheckout_Model_Observer
{
			public function changeServiceItemQty(Varien_Event_Observer $observer)
			{
				 $event = $observer->getEvent();
      			 $cart = $event->getCart();   
      			 //检测安心厨房商品总价
      			 $semi_total = 0;
      			 $items= $cart->getQuote()->getAllItems();
      			 foreach ($items as $item) {
      			 	$productId = $item->getProduct()->getId();
      			 	$item_product = Mage::getModel('catalog/product')->load($productId);
      			 	$attributeSetModel = Mage::getModel("eav/entity_attribute_set");
      			 	$attributeSetModel->load($item_product->getAttributeSetId());
      			 	$attributeSetName  = $attributeSetModel->getAttributeSetName();
      			 	if ($attributeSetName == 'Semi Cooked' && $item->getData('product_type') == 'bundle') {
      			 		$semi_total += $item->getRowTotalInclTax();
      			 	}
      			 }
      			 
      			 //检测服务item是否存在
      			 $item_exists = false;
      			 $item_exists_id = false;
      			 $item_exists_sku = false;
      			 $cartHelper = Mage::helper('checkout/cart');
      			 foreach ($items as $item) {
      			 	$productId = $item->getProduct()->getId();
      			 	$item_product = Mage::getModel('catalog/product')->load($productId);
      			 	$attributeSetModel = Mage::getModel("eav/entity_attribute_set");
      			 	$attributeSetModel->load($item_product->getAttributeSetId());
      			 	$attributeSetName  = $attributeSetModel->getAttributeSetName();
      			 	if ($attributeSetName == 'Chef Catering Services') {
      			 		$item_exists = true;
      			 		$item_exists_id = $item->getId();
      			 		$item_exists_sku = $item_product->getSku();
      			 		//更新已存在服务数量
      			 		$item->setQty(ceil(0.3*$semi_total));
      			 		break;
      			 	}
      			 }
      			 
      			 //如果semi cooked总金额小于1000. 将服务item 删除
      			 if ($semi_total < 1000 && $item_exists) {
      			 	foreach ($items as $item) {
      			 		$productId = $item->getProduct()->getId();
      			 		$item_product = Mage::getModel('catalog/product')->load($productId);
      			 		$attributeSetModel = Mage::getModel("eav/entity_attribute_set");
      			 		$attributeSetModel->load($item_product->getAttributeSetId());
      			 		$attributeSetName  = $attributeSetModel->getAttributeSetName();
      			 		if ($attributeSetName == 'Chef Catering Services') {      			 
      			 			$itemId = $item->getItemId();
      			 			$cartHelper->getCart()->removeItem($itemId);
      			 		}
      			 }
			 } 
   }
}

 

分享到:
评论

相关推荐

    Magento1自定义登录重定向

    &lt;class&gt;YourNamespace_YourModule_Model_Observer&lt;/class&gt; &lt;method&gt;customerLoginRedirect&lt;/method&gt; &lt;/yourmodule_customer_login&gt; &lt;/observers&gt; &lt;/customer_login&gt; &lt;/events&gt; &lt;/frontend&gt; ``` 3. **编写...

    Magento 自定义后台menu Insert dynamical menu in Magento’s Admin

    $this-&gt;_addContent($this-&gt;getLayout()-&gt;createBlock('core/text_list', 'customaction_content')); $this-&gt;renderLayout(); } } ``` `_setActiveMenu`方法用于设置当前激活的菜单项,这将在页面中高亮显示。`_...

    如何创建magento模块

    &lt;use&gt;standard&lt;/use&gt; &lt;args&gt; &lt;module&gt;MyCompanyName_HelloWorld&lt;/module&gt; &lt;frontName&gt;helloworld&lt;/frontName&gt; &lt;/args&gt; &lt;/helloworld&gt; &lt;/routers&gt; &lt;/frontend&gt; ``` 5. **创建控制器** 在`MyCompanyName/...

    magento首页New Pro产品显示数目、列数

    &lt;block type="catalog/product_new" name="home.catalog.product.new" alias="product_new" template="catalog/product/new.phtml" after="cms_page"&gt; &lt;action method="addPriceBlockType"&gt; &lt;type&gt;bundle&lt;/type&gt; ...

    iwd_m2_checkout_suite_pro_1.6.0_magento_magento2_payment_checkou

    《IWD Magento 2 Checkout Suite Pro 1.6.0:优化支付流程的全面解析》 在电商领域,用户体验是决定商家成功与否的关键因素之一,尤其是支付环节。Magento作为全球领先的开源电商平台,其扩展库中有一款名为“IWD ...

    magent memcached缓存代理服务器

    Magento是知名的开源电子商务平台,以其强大的功能和高度的可定制性而受到许多商家的喜爱。Memcached则是一种高性能的分布式内存对象缓存系统,常用于缓解数据库负载,提高网站性能。当我们谈论"Magent Memcached...

    深入理解Magento.pdf

    【深入理解Magento——配置系统详解】 Magento是一款强大的开源电子商务平台,其配置系统是其核心组成部分,被誉为Magento的心脏。这个系统以XML的形式动态生成配置,掌控着模块、模型、类、模板等所有组件的行为。...

    magento入门文档

    &lt;use&gt;core_setup&lt;/use&gt; &lt;/connection&gt; &lt;/helloworld_setup&gt; &lt;helloworld_write&gt; &lt;connection&gt; &lt;use&gt;core_write&lt;/use&gt; &lt;/connection&gt; &lt;/helloworld_write&gt; &lt;helloworld_read&gt; &lt;connection&gt; &lt;use&gt;core_read...

    magento的常用设置实用.pdf

    &lt;action method="addItem"&gt;&lt;type&gt;skin_css&lt;/type&gt;&lt;name&gt;css/styles-ie.css&lt;/name&gt;&lt;params/&gt;&lt;if&gt;lt IE 8&lt;/if&gt;&lt;/action&gt; &lt;action method="addItem"&gt;&lt;type&gt;skin_js&lt;/type&gt;&lt;name&gt;js/ie6.js&lt;/name&gt;&lt;params/&gt;&lt;if&gt;lt IE 7...

    Magento深入理解Magento

    ### Magento深入理解——强大配置系统解析 #### 一、引言 Magento是一款极其灵活且功能丰富的电子商务平台,其核心竞争力之一在于其强大的配置系统。这一系统不仅为开发者提供了极高的定制化能力,还确保了平台的...

    magento解析文档

    Magento 是一个强大的开源电子商务平台,它的模块化设计是其核心特色之一。Magento 的模块开发是扩展和自定义 Magento 功能的基础。在这个过程中,理解和掌握 Magento 的配置系统至关重要。 Magento 的配置系统采用...

    Magento模块开发教程

    ### Magento模块开发知识点详解 #### 1. Magento配置系统概述 Magento的配置系统是其核心组成部分,它像心脏一样支撑着整个Magento框架的运行。配置系统几乎管理着所有Magento架构组件,包括模块(module)、模型...

    magento后台模块开发

    Mage::helper('adminhtml')-&gt;__('Item News'), Mage::helper('adminhtml')-&gt;__('Item News') ); } // 其他逻辑 } } ``` #### 六、总结 以上步骤详细介绍了如何从零开始构建一个Magento后台模块。需要注意的是...

    Magento内置前端

    &lt;script type="text/x-magento-init"&gt; { "[data-zoom-role=zoom]":{ "selectors":{ "image":"[data-zoom-role=zoom-image]", "imageContainer":"[data-zoom-role=gallery-base-image-container]", "zoomInner":...

    jbh_router:用于 Magento 的基于 Zend 框架的路由器

    Jbh 路由器,您在 Magento 上的路由用它静态网址网址: ...jbh&gt; &lt; my&gt; &lt; type&gt;static&lt;/ type&gt; &lt; route&gt;foo.html&lt;/ route&gt; &lt; routers&gt; &lt; foo&gt; &lt; use&gt;standard&lt;/ use&gt; &lt; args&gt;

    iwd_checkout_suite_free_1.0.8

    magento one page checkout 插件 支持magento 1.9.3.2,亲测可用 官方链接:https://www.iwdagency.com/extensions/one-step-page-checkout.html

    magento后台显示订单图片

    其中,`$this-&gt;helper('sales')-&gt;__('Product Image')`表示调用`sales`模块的辅助类,并使用`__()`函数获取翻译后的字符串“Product Image”。 ##### 2.2 `renderer/default.phtml` 文件解析 此文件负责渲染每个...

Global site tag (gtag.js) - Google Analytics