Подтвердить что ты не робот

Получить весь простой продукт из настраиваемого продукта в представлении продукта Magento

Как я могу получить все простые продукты, связанные с настраиваемым продуктом? Я нашел, как сделать обратное (получить продукт, настраиваемый из простого продукта), но это не то, что мне нужно.

Я хочу показать, сколько единиц у меня есть на складе для выбранного продукта (настраиваемый атрибут). Моя первоначальная идея - распечатать все количества акций и управлять дисплеем с помощью jQuery. Любая идея?

4b9b3361

Ответ 1

используйте script в

app/design/frontend/default/[your theme]/template/catalog/product/view/type/options/configurable.phtml

Внутри script:

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) {
        alert("Selected product is: " + currentSimpleProductId)
    }
}

Теперь добавьте событие onchange в раскрывающееся меню на той же странице:

onchange = "spConfig.getIdOfSelectedProduct()"

Полное описание

Ответ 2

Используйте этот ниже код

Код для получения полной информации о продукте (где 3 - конфигурируемый идентификатор продукта)

$product = Mage::getModel('catalog/product')->load(3); 
$childProducts = Mage::getModel('catalog/product_type_configurable')
                    ->getUsedProducts(null,$product);

foreach($childProducts as $child) {
    print_r($child->getName());  // You can use any of the magic get functions on this object to get the value
}

Другой код для получения идентификаторов продуктов для детей

$childProducts = Mage::getModel('catalog/product_type_configurable')
                    ->getChildrenIds(3);

Надеюсь, это поможет!

Ответ 3

Конфигурируемый продукт может иметь несколько других связанных с ним продуктов.

Вот код для извлечения всех дочерних продуктов, связанных с настраиваемым продуктом.

Вот код:)

/**
 * Load product by product id
 */
$product = Mage::getModel('catalog/product')->load(YOUR_PRODUCT_ID);

/**
 * Get child products id and such (only ids)
 */
$childIds = Mage::getModel('catalog/product_type_configurable')->getChildrenIds($product->getId());

/**
 * Get children products (all associated children products data)
 */
$childProducts = Mage::getModel('catalog/product_type_configurable')->getUsedProducts(null,$product);

Источник: http://blog.chapagain.com.np/magento-how-to-get-all-associated-children-product-of-a-configurable-product/

Ответ 4

Я понял. Спасибо за ответы.

<?php if($_product->getTypeId() == "configurable"): ?>
    <?php $_configurable = $_product->getTypeInstance()->getUsedProductIds(); ?>
    <?php foreach ($_configurable as $_config): ?>
        <?php $_simpleproduct = Mage::getModel('catalog/product')->load($_config); ?>
        <?php //Magic php with a $_simpleproduct. ?>
    <?php endforeach; ?>
<?php endif; ?>

Ответ 5

Для тех, кто хочет сделать это, и покажите результаты, я поделюсь тем, что я сделал, чтобы закончить его.

Добавьте в сегмент script: app/design/frontend/default/[your_theme]/template/catalog/product/view/type/options/configurable.phtml

id = {};
<?php 
foreach ($_product->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');
           }
        }
    }

в select той же страницы добавить:

 onchange = "spConfig.getIdOfSelectedProduct()"

Не стесняйтесь редактировать то, что напечатано в отчете, но это должно быть там. Он также учитывает наличие 0 акций, меняя его на Out of stock в css и тексте