It’并非每天都需要知道什么是可配置的产品’结果子产品ID位于前端。但是,如果那’s you and you’重新寻找一个没有’覆盖核心Magento javascript,您来对地方了。
对于我们来说幸运的是,javascript对象spConfig具有我们根据在产品详细信息页面上选择的选项确定子产品ID所需的一切。在你下面’会找到代码。让’s walk through it.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
功能 getSimpleProductId() { 变种 product候选人 = []; jQuery的.每(spConfig.设定, 功能 (选择Index, 选择) { 变种 attributeId = 选择.ID.更换('属性', ''); 变种 选择edValue = 选择.选项[选择.选择edIndex].值; jQuery的.每(spConfig.配置.属性[attributeId].选项, 功能(选项Index, 选项) { 如果 (选项.ID == 选择edValue) { 变种 选项产品 = 选项.产品展示; 如果 (product候选人.长度 == 0) { product候选人 = 选项产品; } 其他 { 变种 productIntersection = []; jQuery的.每(选项产品, 功能 (产品索引, productId) { 如果 (product候选人.指数(productId) > -1) { productIntersection.推(productId); } }); product候选人 = productIntersection; } } }); }); 返回 (product候选人.长度 == 1) ? product候选人[0] : 空值; } |
spConfig.settings属性包含一个可配置选项选择框的数组。我们’ll遍历这些以确定每个选择框的attributeId和selectedValue。
现在,我们知道所选选项的attributeId和selectedValue,我们可以使用spConfig.config.attributes属性获取子产品ID候选数组,并将其存储到optionProducts变量中。
在循环的第一次迭代中,productCandidates数组为空,可以将其设置为optionProducts。如果这是页面上的唯一选择框,那么productCandidates现在应该只包含一个值:子产品ID我们’重新寻找。如果页面上有很多选择框,则每个循环会将productCandidates设置为productCandidates和optionProducts的数组交集。
遍历所有选择框后,productCandidates数组中应该只有一个值。但是,我们希望尽可能避免假设,因此最后一行确保我们仅在有产品ID的情况下返回’是数组中唯一的产品ID。
最后,我们需要一种触发功能的方法。通过将更改事件侦听器添加到可配置的选项选择框中,可以非常轻松地完成此操作。每次用户选择一个选项或更改其选择时,如果所有选项均已选中,则getSimpleProductId函数将返回结果子产品ID,否则返回false。
1 2 3 4 5 6 |
jQuery的(文件).准备(功能() { jQuery的(“ .product-options 选择 [id ^ ='attribute']”).上('更改', 功能() { //您的代码在这里 // alert(getSimpleProductId()); }); }); |
6 评论s
谢谢,工作就像一个魅力ðŸ™,
非常感谢!
亚当!这非常有帮助。谢谢!
您能否让我们知道如何在Magento 2中执行此操作?
嘿,亚当。有没有办法修改它以显示孩子’s URL Key 在stead?
您能修改一下以显示给孩子吗’d URL Key 在stead?