2014-05-23 164 views
1

Magento的SCP推廣和單選按鈕我使用的Magento版本的擴展簡單配置的產品(SCP)1.8.1.0可配置產品的

我所試圖實現的是具有可配置產品(使用SCP!)那將不同的選項顯示爲單選按鈕而不是下拉(默認)。儘管這聽起來很容易,但到目前爲止我找不到合適的解決方案(有很多建議,其中沒有一個似乎有效)。 我很想在後端解決這個問題,儘管在這一點上,我會同樣喜歡工作的前端解決方案。

看起來是什麼在configurable.phtml工作吐出了不同的自定義選項,爲產品設置,這樣的事情:

$attribute = Mage::getModel('eav/config')->getAttribute('catalog_product', '#ATTRIBUTENAME#'); 
      foreach ($attribute->getSource()->getAllOptions(true) as $option) { 
       echo /*$option['value'] . ' ' .*/ $option['label'] . "\n"; 
      } 

我能想象這是一個起點,即使我沒有想到它通過。

我可以確認爲未工作,插件明智的是這兩個:

我知道這是一個非常具體的問題,它是一個可能的重複this,但是甚至可能有v1.7的工作解決方案,在v1.8中不再有效,我有一種感覺,這對其他許多人來說可能是非常有趣的。

編輯:只是爲了詳細說明SCP做了些什麼: 它允許你有一個可配置的產品,可以有選擇之間的依賴關係。這可以通過爲每種可能的選項提供單個產品來實現。這種方式可以使價格上漲,這取決於產品的材料和尺寸。所以一個尺寸可以有不同的價格取決於材料,然後一個新的價格範圍,如果尺寸增加。 GitHub網站也提供了一個更好的理解,以防萬一,這是令人困惑的。

如果您想安裝SCP,請確保安裝了回購請求中提供的修復程序。

回答

1

原來這就是我最終使用。它不會更改configurable.phtml或SCP核心代碼中的任何代碼。相反,我只是調用skin/frontend/base/default/js/scp_product_extension.js來更新選項和價格。這必須發生在客戶端,但大多數SCP邏輯顯然也是如此。

var sizeselect = $(".catalog-product-view .input-box select").eq(0); 
    var materialselect = $(".catalog-product-view .input-box select").eq(1); 


     function optionsToRadios(element){ 
     var select = element; 

     if (element == materialselect){ 
      $(".radios").append("<div class='secondradiofield'></div>") 
      select.find('option').each(function(j, option){ 
       var option = $(option); 
       var eachval = option.val(); 

       $(".catalog-product-view .secondradiofield").append(
        "<input type='radio' id='s1"+j+"' data-value='"+eachval+"' data-position='"+j+"'/><span><label for='s1"+j+"'>"+option.text()+"</label></span>" 
       ); 

      }); // ende find each 

     } else{ 

      select.find('option').each(function(j, option){ 
       var option = $(option); 
       var eachval = option.val(); 

       $(".catalog-product-view .radios").append(
        "<input type='radio' id='s2"+j+"' data-value='"+eachval+"' data-position='"+j+"'/><span><label for='s2"+j+"'>"+option.text()+"</label></span>" 
       ); 

      }); // end find each 
     } 
    }; 

    // Make first <select> to radios 
    optionsToRadios(sizeselect); 




     /* 
     * 
     * @SCP - seems like the passed element cannot be a jQuery object! 
     * @SCP - spConfig.reloadPrice() is autmatically called by spConfig.configureElement(el). 
     * 
     */ 

     $(document).on("click", ".radios>input[type='radio']", function(){ 

      var val = $(this).attr("data-value"); 
      var index = $(this).attr("data-position"); 
      var select = $(".catalog-product-view .input-box select").eq(0); 

      // deselect other options 
      select.prop("selected", false); 
      select.find("option").removeAttr("selected"); 

      // synch options with <select> 
      var clickedOption = $(select.find("option")[index]); 
      clickedOption.attr("selected", "selected"); 
      clickedOption.prop("selected", true); // IMPORTANT: Firefox need the prop to work! 

      // Make call to SCP to update 
      var el = document.getElementsByClassName("super-attribute-select")[0]; 
      spConfig.configureElement(el); 
      spConfig.reloadPrice(); 

      // Show second <select> as radios 
      if($("input[type='radio']").length < 5){ 
       optionsToRadios(materialselect); 
      } 

      // Deselect other radio buttons 
      $(".radios>input[type='radio']").not($(this)).prop('checked', false); 
     }); 

首先功能剛剛接通缺省<select>元素注入單選按鈕。 <select>元素用CSS隱藏,因爲我們不希望選項出現兩次。接下來是隻聽收音機按鈕上的點擊事件,並基本上將點擊同步到<select>元素。當select元素髮生變化時,您只需調用spConfig.configureElement(el);函數,其中el是相應的<select>元素。

如果第二個<select>元素具有對第一個元素的依賴關係,那麼當單擊單選按鈕時,還必須更新此元素。

希望給別人一個線索,誰試圖做同樣的事情。

3
+0

感謝您的回覆。即使該插件可以很好地用單選按鈕代替下拉菜單,但它也不能保持SCP工作的功能,這在這種情況下至關重要。 – BenMann

+0

我明白了,您需要自定義一個它們。您需要自定義其中的一個模塊 –