Get All simple product from a Configurable Product in Magento Product View

后端 未结 6 1563
轮回少年
轮回少年 2021-01-31 09:55

How can I get all the simple products associated with a configurable product? I found how to do the opposite (get a product configurable from a simple product) but that\'s not w

6条回答
  •  面向向阳花
    2021-01-31 10:15

    For anyone looking to do this, and display the results I will share what I did to finish it off

    Add to the script segment of: app/design/frontend/default/[your_theme]/template/catalog/product/view/type/options/configurable.phtml

    id = {};
    getTypeInstance(true)->getUsedProducts ( null, $_product) as $simple) {
        $stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($simple)->getQty();
        echo "  id[" . $simple->getId() . "] = $stock;\n\r";
    }
    ?>
    
        spConfig.getIdOfSelectedProduct = function () {
            var existingProducts = new Object();
            for (var i = this.settings.length - 1; i >= 0; i--) {
                var selected = this.settings[i].options[this.settings[i].selectedIndex];
                if (selected.config) {
                    for (var iproducts = 0; iproducts < selected.config.products.length; iproducts++) {
                        var usedAsKey = selected.config.products[iproducts] + "";
                        if (existingProducts[usedAsKey] == undefined) {
                            existingProducts[usedAsKey] = 1;
                        } else {
                            existingProducts[usedAsKey] = existingProducts[usedAsKey] + 1;
                        }
                    }
                }
            }
            for (var keyValue in existingProducts) {
                for (var keyValueInner in existingProducts) {
                    if (Number(existingProducts[keyValueInner]) < Number(existingProducts[keyValue])) {
                        delete existingProducts[keyValueInner];
                    }
                }
            }
            var sizeOfExistingProducts = 0;
            var currentSimpleProductId = "";
            for (var keyValue in existingProducts) {
                currentSimpleProductId = keyValue;
                sizeOfExistingProducts = sizeOfExistingProducts + 1
            }
            if (sizeOfExistingProducts == 1) {
               var qtyLeft = id[currentSimpleProductId];
               if(qtyLeft >= 1) {
                   jQuery('.availability-only').html('Only ' + qtyLeft + ' available.');
                   jQuery('p.out-of-stock').removeClass('out-of-stock').addClass('in-stock');
                   jQuery('p.in-stock > span').html('In stock');
               } else {
                   jQuery('.availability-only').html('Sorry, there are none available in this size.');
                   jQuery('p.in-stock').removeClass('in-stock').addClass('out-of-stock');
                   jQuery('p.out-of-stock > span').html('Out of stock');
               }
            }
        }
    

    in the select of the same page add:

     onchange = "spConfig.getIdOfSelectedProduct()"
    

    Feel free to edit what the statement prints, but this should get you there. It also accounts for 0 stock on hand, changing it to Out of stock in css and text

提交回复
热议问题