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

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

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

используйте следующий скрипт в

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

Внутри скрипта:

 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 на той же странице:

 onchange = "spConfig.getIdOfSelectedProduct()" 

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

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

Код для получения полной информации о продукте (где 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); 

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

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

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

Вот код:

 /** * 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/

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

 <?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; ?> 

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

Добавьте в сегмент 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 акций, меняя его на наличие в css и тексте