2013-04-05 3 views
0

장바구니의 항목에서 사용자 지정 옵션을 업데이트하고 싶습니다. 항목 ID가있어서 컨트롤러에서 항목을로드 할 수 있습니다. 그게 내가 붙어있어 그게, 내가 장바구니에서 항목을 제거하고 업데이트 된 옵션으로 새 하나를 추가 할 수 있지만 그게 내가 원하는 건 아니에요.Magento : 장바구니에서 항목 사용자 지정 옵션을 프로그래밍 방식으로 업데이트하고 있습니까?

카트의 기존 항목을 직접 업데이트하고 싶습니다. 어떤 아이디어로 그렇게 할 수 있습니까?

감사합니다.

+0

지금까지 시도한 코드를 붙여 넣을 수 있습니까? –

답변

0

구성 가능한 제품에 정확한 문제가 있습니다.

Magento는 '장바구니 항목 수정'페이지에서 구성 가능한 제품 옵션을 표시하며 옵션 목록은 구성 가능한 속성을 미리 선택하지 않고 생성된다는 사실을 알고 있습니다. 속성은

<script type="text/javascript"> 
    var spConfig = new Product.Config(<?php echo $this->getJsonConfig() ?>); 
</script> 

에 의해 생성 된 데이터를 가져와 자바 스크립트에 의해 설정하지만, 그것은 단지 '편집 카트 항목'페이지에서 선택한 속성을 표시합니다. 수동으로 호출하면 현재 속성 선택이 표시되지 않습니다.

체크 아웃 모듈 중 일부는 내가 알고있는 것처럼 카트 오버뷰에서 선택된 속성을 표시합니다. Magento에서 해당 데이터를 가져올 수도 있습니다 (그러나 DB에서 직접 가져 왔는지 또는 좀 더 친숙한 방식으로되어 있는지 확실하지 않습니다). 그래서 여기에 사용자 지정 옵션을 변경 할 위치를 정확히

<?php 

class MyCompany_Checkout_Model_Observer 
    extends Varien_Event_Observer 
{ 
    public function updateItemsSpecificOption($observer) 
    { 
     $event = $observer->getEvent(); 
     $cart = $event->getCart(); 
     $data = $event->getInfo(); 

     foreach ($data as $itemId => $itemInfo) { 
      $item = $cart->getQuote()->getItemById($itemId); 
      if (!$item) { 
       continue; 
      } 

      $optionData = $this->_getSpecificOptionDataFromItem($item); 
      if(!$optionData) { 
       continue; 
      } 

      $params = clone $item->getBuyRequest(); 
      $options = $params->getOptions() ? $params->getOptions() : array(); 

      $updateItem = false; 
      if($shouldIRemoveOption) { 
       unset($options[$optionData['option_id']]); 
       $updateItem = true; 
      } elseif($shouldIAddOption) { 
       $options[$optionData['option_id']] = array($optionData['value_id']); 
       $updateItem = true; 
      } 

      if($updateItem) { 
       $params->setOptions($options); 
       $cart->updateItem($itemId, $params); 
      } 
     } 
    } 

    protected function _getSpecificOptionDataFromItem($item) 
    { 
     foreach($item->getProduct()->getOptions() as $option) { 
      if($this->_isMyNeededOption($option)) { 
       foreach($option->getValues() as $valueId => $value) { 
        if($this->_isMyNeededValue($value)) { 
         return array(
          'option_id' => $option->getId(), 
          'value_id' => $valueId, 
          'price'  => $value->getPrice() 
         ); 
        } 
       } 
      } 
     } 

     return false; 
    } 
} 

내가 모르는

0

config.xml의 부분

<events> 
    <checkout_cart_update_items_after> 
     <observers> 
      <update_items_specific_option> 
       <class>mycompany_checkout/observer</class> 
       <method>updateItemsSpecificOption</method> 
      </update_items_specific_option> 
     </observers> 
    </checkout_cart_update_items_after> 
</events> 

응용 프로그램/코드/지역/MyCompany/Observer.php 부분, 카트를 업데이트하는 동안 관찰자가 있습니다.

관련 문제