我想知道是否可以在可配置产品中获取所选项目的库存(即在下拉列表中)。
例如,如果您有一件衬衫,上面有多个代表尺寸的单字。当您选择小号时,我想获得小号衬衫的库存。如果您随后将选择更改为中号,我想获得中号衬衫的库存。
注意没有页面刷新。
我想知道是否可以在可配置产品中获取所选项目的库存(即在下拉列表中)。
例如,如果您有一件衬衫,上面有多个代表尺寸的单字。当您选择小号时,我想获得小号衬衫的库存。如果您随后将选择更改为中号,我想获得中号衬衫的库存。
注意没有页面刷新。
我做了类似的事情,我扩展了 Mage_Catalog_Block_Product_View_Type_Configurable,特别是 getJsonConfig() 方法,因为它为可配置产品的下拉菜单提供数据。
像这样的东西:
class Graphicalliance_Stockvalues_Block_Catalog_Product_View_Type_Configurable extends Mage_Catalog_Block_Product_View_Type_Configurable {
public function getJsonConfig()
{
$config = parent::getJsonConfig();
$config = Mage::helper('core')->jsonDecode($config);
foreach ($config['attributes'] as $attid=>$attinfo) {
foreach ($attinfo['options'] as $key=>$attoption) {
// get stock value per product
$stocks = array();
foreach ($attoption['products'] as $prod) {
$_product = Mage::getModel('catalog/product')->load($prod);
$_qty = Mage::getModel('cataloginventory/stock_item')->loadByProduct($_product)->getQty();
$stocks[$prod] = (int) $_qty;
}
$config['attributes'][$attid]['options'][$key]['stock'] = $stocks;
}
}
return Mage::helper('core')->jsonEncode($config);
}
}
这样可以确保您将库存价值传递到每个变体的前端,因此您不必刷新页面。然后,您需要修改 javascript 处理程序以在选择尺寸/颜色时更新库存显示。
在 js/varien.configurable.js 中向 Product prototpye 对象添加一个函数,如下所示:
reloadStock: function(){
for(var i=this.settings.length-1;i>=0;i--){
var selected = this.settings[i].options[this.settings[i].selectedIndex];
if(selected.config){
var allowedProducts = selected.config.allowedProducts;
if (allowedProducts.length==1 && selected.config.stock) {
var productStock = parseInt(selected.config.stock[allowedProducts[0]]);
if (productStock==0) {
$('product-stock').innerHTML = 'out of stock';
} else if (productStock<=1) {
$('product-stock').innerHTML = productStock + ' in stock';
} else {
$('product-stock').innerHTML = '';
}
}
}
}
},
请注意,您需要一个 ID 为“product-stock”的元素,其中显示库存显示文本。
然后,您可以在必要时调用此函数,例如将其添加到同一文件中的 configureElement 函数中,如果我没记错的话,它会在页面加载时运行:
this.reloadStock();
查看调用 reloadPrice() 的位置,它可能应该在它的下方。
这些代码示例已经过一些编辑,以删除与您的问题无关的位,因此希望它们在语法上仍然正确。
很高兴能提供进一步的帮助,汉斯