如何获得与可配置产品相关的所有简单产品?我发现如何做相反的事情(从简单的产品获得产品配置),但这不是我需要的。从Magento中的可配置产品中获取所有简单产品产品视图
我想显示我有多少单位的股票对于选定的产品(可配置属性)。我最初的想法是打印所有数量的库存并用jQuery控制显示。任何想法?
如何获得与可配置产品相关的所有简单产品?我发现如何做相反的事情(从简单的产品获得产品配置),但这不是我需要的。从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 = "spConfig.getIdOfSelectedProduct()"
使用此代码如下
代码来获取完整的产品信息(这里的3是可配置的产品ID)
$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
}
另一个代码来获取儿童产品ID
$childProducts = Mage::getModel('catalog/product_type_configurable')
->getChildrenIds(3);
希望这有助于!
致命错误:调用一个非对象的成员函数getChildrenIds() –
'$ childProducts = Mage :: getModel('catalog/product_type_configurable ') - > getChildrenIds(3);'为我完全工作(减去额外的分号。)谢谢! –
第一种方法给我所有的儿童产品,但它说所有的儿童产品都启用了,尽管大多数都是实际的为什么是这样? –
我明白了。感谢您的回复。
<?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; ?>
一个可配置产品可以有多个其他产品与之相关联。
以下是获取与可配置产品关联的所有儿童产品的代码。
这里去的代码:)
/**
* 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);
请注意,您可以简单地将d而不是手动加载'product_type_configurable'模型:'$ product-> getTypeInstance() - > getChildrenIds()'或'$ product-> getTypeInstance() - > getUsedProducts()'。 – ScottSB
@ScottSB不错,代码越短越好。 –
对于任何人要做到这一点,并显示结果我将分享我做了什么来完成它
添加到script
的段:应用程序/设计/前端/默认/ [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和文本
正常工作....谢谢你Hardik ... – Lawrance
真棒解决方案Hardik! –
虽然这不是PHP。 – Qix