2014-01-31 2 views
1

구성 가능한 제품에서 선택한 항목의 재고를 (즉, 드롭 다운으로) 가져올 수 있는지 궁금합니다.선택된 심플한 제품을 자개로 구입하십시오

예를 들어, 크기를 나타내는 여러 개의 기호가있는 셔츠가있는 경우. 작은 것을 선택하면 작은 셔츠의 재고를 얻고 싶습니다. 그런 다음 선택을 보통으로 변경하면 중간 셔츠 재고를 얻고 싶습니다.

페이지 새로 고침이 없습니다.

답변

5

비슷한 것을했는데, 구성 가능한 제품의 드롭 다운에 대한 데이터를 제공하기 때문에 Mage_Catalog_Block_Product_View_Type_Configurable, 특히 getJsonConfig() 메소드를 확장했습니다. 이 같은

뭔가 :

class Graphicalliance_Stockvalues_Block_Catalog_Product_View_Type_Configurable extends Mage_Catalog_Block_Product_View_Type_Configurable { 

    public function getJsonConfig() 
    { 
     $config = parent::getJsonConfig(); 
     $config = Mage::helper('core')->jsonDecode($config); 

     foreach ($config['attributes'] as $attid=>$attinfo) { 
      foreach ($attinfo['options'] as $key=>$attoption) { 
      // get stock value per product 
      $stocks = array(); 
      foreach ($attoption['products'] as $prod) { 
       $_product = Mage::getModel('catalog/product')->load($prod); 
       $_qty = Mage::getModel('cataloginventory/stock_item')->loadByProduct($_product)->getQty(); 
       $stocks[$prod] = (int) $_qty; 
      } 
      $config['attributes'][$attid]['options'][$key]['stock'] = $stocks; 
      } 
     } 

     return Mage::helper('core')->jsonEncode($config); 
    } 
} 

페이지를 새로 고침 할 필요가 없습니다 당신이 각 변형에 대한 프론트 엔드까지 주식 가치를 확인합니다. 크기/색상을 선택할 때 주식 화면을 업데이트하려면 자바 스크립트 처리기를 수정해야합니다. 당신이 주식 표시 텍스트가 ID '제품 재고'로 요소를 필요

reloadStock: function(){ 
     for(var i=this.settings.length-1;i>=0;i--){ 
      var selected = this.settings[i].options[this.settings[i].selectedIndex]; 
      if(selected.config){ 
       var allowedProducts = selected.config.allowedProducts; 
       if (allowedProducts.length==1 && selected.config.stock) { 
        var productStock = parseInt(selected.config.stock[allowedProducts[0]]); 
        if (productStock==0) { 
        $('product-stock').innerHTML = 'out of stock'; 
        } else if (productStock<=1) { 
        $('product-stock').innerHTML = productStock + ' in stock'; 
        } else { 
        $('product-stock').innerHTML = ''; 
        } 
       } 
      } 
     } 
    }, 

참고 : JS에서

는 /, 제품 같이 prototpye 객체에 이런 일을하는 기능을 추가 varien.configurable.js 표시됩니다.

그런 다음 필요한 경우,이 함수를 호출 예를 들어 내가 제대로 페이지로드에서 실행되는 기억한다면, 이는 같은 파일에 configureElement 기능에 추가 할 수 있습니다 :

this.reloadStock(); 

이 reloadPrice는()입니다 찾는 곳 전화를 받고 아마도 그 바로 아래로 가야합니다.

이 코드 샘플은 귀하의 질문과 관련이없는 비트를 제거하기 위해 약간 편집되었으므로 구문 상으로는 정확합니다. 더 도움을 드릴

, 한스

+0

덕분에 광범위한 대답을, 나는이 밖으로 시도하고 당신이 가서 방법을 알려 드리겠습니다! – Decor

+0

추악한 (코어 파일 오버라이드)하지만 만족스럽게 functionnal – nicolallias

+0

안녕하세요, 나를 위해 작동하지 않습니다, 내가 코드를 추가하고 이것은 오류가 발생했습니다 : var productStock = parseInt (selected.config.stock [allowedProducts [0]]); 잡히지 않은 유형 오류 : '14040'의 속성을 읽을 수 없습니다. 14040은 제품 ID입니다. 경고를 위해 null을 얻는 임 (selected.config.stock); – lucasvm1980

관련 문제