2014-11-21 4 views
0

제 질문은 성공적인 주문 (ID 11) 후 작업을 트리거하는 방법입니까?Magento - 특정 제품을 구입 한 후 이벤트를 트리거하는 방법 (사용자 그룹 변경)

내가 이전에 질문 한 내용은 checkout_onepage_controller_success_action에 대한 관찰자를 만들 필요가 있지만 이후에는 그다지 자세히 설명하지 않습니다.

$special_cat = 11; // Special product category 
$customerId = Mage::getSingleton('customer/session')->getCustomerId(); 
$lastOrderId = Mage::getSingleton('checkout/session')->getLastOrderId(); 
$order = Mage::getSingleton('sales/order'); 
$order->load($lastOrderId); 
$allitems = $order->getAllItems(); 
foreach($allitems as $item) 
{ 
    $product = Mage::getModel('catalog/product')->load($item->getProductId()); 
    $categoryIds = $product->getCategoryIds(); 
    if (in_array($special_cat, $categoryIds)) { 
     $mem_group_id = $item->getSku(); // $item->getSku() is customer group name 
     $customer_detail = Mage::getSingleton('customer/session')->getCustomer(); 
     $customer_detail->setGroupId($mem_group_id); 
     $customer_detail->save(); 
    } 
} 

나는이에 대한 확장을 만들 필요가 또는 내가 핵심 파일을 편집해야 할 수행 아래

는 (같은 이전 질문에서) 나는 제품을 변경하는 데 사용되는 코드는? 옵저버는 어디서 작성해야합니까?

답변

1

핵심 파일을 편집하는 것이 바람직하지 않습니다. 기본 Magento의 기능을 변경하려면 특정 파일을 덮어 써야합니다. Here is a good tutorial on overriding

더 나은 방법은 확장 프로그램을 만들고 특정 이벤트를 관찰하는 것입니다. 귀하의 경우 sales_order_place_after 이벤트를 관찰하고 해당 주문에 ID 11 제품이 포함되어 있는지 확인하십시오. 그렇다면 고객 그룹을 변경하십시오. 관찰자에 대한 자세한 정보가 도움이 check this out.

희망에 대한

.

3

예. 이를 위해 확장을 작성해야합니다. 그것은 큰 문제가 아닙니다. 따라서 주문이 성공한 후에 고객에 대한 사용자 그룹을 변경해야합니다. 권리 ?. 이를 위해 체크 아웃 프로세스를 관찰하고 코드를 입력해야합니다. 그리고 당신 말이 옳았습니다. checkout_onepage_controller_success_action이 이에 대한 정확한 관찰자입니다.

다음

가고 ..

응용 프로그램/코드/지역/패키지 이름/모듈 이름은/etc/config.xml에 다음

<?xml version="1.0"?> 
<config> 
    <modules> 
    <Packagename_ModuleName> 
     <version>0.1.0</version> 
    </Packagename_ModuleName> 
    </modules> 
    <global> 
    <models> 
     <modulename> 
     <class>Packagename_ModuleName_Model</class> 
     <resourceModel>modulename_mysql4</resourceModel> 
     </modulename> 
    </models> 
    <events> 
     <checkout_onepage_controller_success_action> <!-- identifier of the event we want to catch --> 
     <observers> 
      <checkout_onepage_controller_success_action_handler> <!-- identifier of the event handler --> 
      <type>model</type> <!-- class method call type; valid are model, object and singleton --> 
      <class>modulename/observer</class> <!-- observers class alias --> 
      <method>changeUserGroup</method> <!-- observer's method to be called --> 
      <args></args> <!-- additional arguments passed to observer --> 
      </checkout_onepage_controller_success_action_handler> 
     </observers> 
     </checkout_onepage_controller_success_action> 
    </events> 
    </global> 
</config> 

Packagename_ModuleName_Model 당신의 새로운 클래스입니다. 새 방법은 changeUserGroup입니다. 여기에서는 사용자 그룹 변경 사항에 대한 코드 만 설명합니다. 그래서,/Observer.php

<?php 
    class Packagename_ModuleName_Model_Observer 
    { 

       public function changeUserGroup(Varien_Event_Observer $observer) 
       { 
        //$customer = $observer->getCustomer(); 

$special_cat = 11; // Special product category 
$customerId = Mage::getSingleton('customer/session')->getCustomerId(); 
$lastOrderId = Mage::getSingleton('checkout/session')->getLastOrderId(); 
$order = Mage::getSingleton('sales/order'); 
$order->load($lastOrderId); 
$allitems = $order->getAllItems(); 
foreach($allitems as $item) 
{ 
    $product = Mage::getModel('catalog/product')->load($item->getProductId()); 
    $categoryIds = $product->getCategoryIds(); 
    if (in_array($special_cat, $categoryIds)) { 
     $mem_group_id = $item->getSku(); // $item->getSku() is customer group name 
     $customer_detail = Mage::getSingleton('customer/session')->getCustomer(); 
     $customer_detail->setGroupId($mem_group_id); 
     $customer_detail->save(); 
    } 
} 
       } 

    } 

그리고 마지막에 모듈을 활성화,

응용 프로그램은/etc/모듈/Packagename_ModuleName

응용 프로그램/코드/지역/패키지 이름/MODULENAME/모델 .XML

<?xml version="1.0"?> 
<config> 
    <modules> 
    <Packagename_ModuleName> 
     <active>true</active> 
     <codePool>local</codePool> 
     <version>0.1.0</version> 
    </Packagename_ModuleName> 
    </modules> 
</config> 

는 일반적으로 우리는에서 자세한 내용보기우리가 뭔가를 관찰 할 때. 하지만 귀하의 경우 customer_idorder-id을 세션에서 사용할 수 있습니다. 그래서 우리는 세션에서 그 것들을 얻을 수 있습니다. 그게 전부 야.

의심되는 점이 있으면 여기에서 의견을 말하십시오.

0

확장 프로그램을 만들 필요가 없습니다.

onepage_controller_action에서 다음 코드를 추가하십시오.

$mem_catid = 982; //CATEGORY ID products to filter 
$_customerId = Mage::getSingleton('customer/session')->getCustomerId(); 
$lastOrderId = Mage::getSingleton('checkout/session')->getLastOrderId(); 
$order = Mage::getSingleton('sales/order'); 
$order->load($lastOrderId); 
$allitems = $order->getAllItems(); 
foreach($allitems as $item) 
{ 
    $product = Mage::getModel('catalog/product')->load($item->getProductId()); 
    $categoryIds = $product->getCategoryIds(); 
    if (in_array($mem_catid, $categoryIds)) { 
     $mem_group_id = $item->getSku(); // $item->getSku() is customer group name 
     $customer_detail = Mage::getSingleton('customer/session')->getCustomer(); 
     $customer_detail->setGroupId(6);//add customer group id here which you want to set. 
     $customer_detail->save(); 
    } 
}