在可配置的产品视图 Magento 上显示动态 SKU

2023-12-02

我有这个脚本来显示选择选项上的动态 sku,但我无法开始工作。

正在加载正确的 sku,但选择时没有任何反应。

此代码获取 Javascript 上的 sku 列表,并在可配置产品视图上更新产品选择选项上的 div。

<?php
$_product    = $this->getProduct();
$_attributes = Mage::helper('core')->decorateArray($this->getAllowAttributes());
?>
<?php if ($_product->isSaleable() && count($_attributes)):?>
    <dl>
    <?php foreach($_attributes as $_attribute): ?>
        <dt><label class="required"><em>*</em><?php echo $_attribute->getLabel() ?></label></dt>
        <dd<?php if ($_attribute->decoratedIsLast){?> class="last"<?php }?>>
            <div class="input-box">
                <select name="super_attribute[<?php echo $_attribute->getAttributeId() ?>]" id="attribute<?php echo $_attribute->getAttributeId() ?>" class="required-entry super-attribute-select" onchange="return changeSku(this);">
                    <option><?php echo $this->__('Choose an Option...') ?></option>
                  </select>
              </div>
        </dd>
    <?php endforeach; ?>
    </dl>
    <script type="text/javascript">
        var spConfig = new Product.Config(<?php echo $this->getJsonConfig() ?>);
    </script>

<?php endif;?>


<?php
$conf = Mage::getModel('catalog/product_type_configurable')->setProduct($_product);
$col = $conf->getUsedProductCollection()->addAttributeToSelect('*')->addFilterByRequiredOptions();

echo '<script type="text/javascript">';

echo '
document.observe("dom:loaded", function() {
  $("sku-container").update("<strong>Product Id: </strong> Select an option to display Product Id");
});
';
echo ' function changeSku(sel){';       

$itemId = array();           
foreach($col as $simple_product){
$itemId[] = array($simple_product->getSelectLabel() => $simple_product->getSku());
} 

//echo "<pre>";
//print_r($itemId);
//echo "</pre>";

foreach($itemId as $val){
 foreach($val as $k => $v){
echo "\n".'if(sel.options[sel.selectedIndex].value == "'.$k.'"){'."\n";
echo '$("sku-container").update("<strong>Product Id: </strong>'.$v.'");'. "\n";
echo '}';
    }
}

echo "\n".'if(sel.options[sel.selectedIndex].value == ""){'."\n";
echo '$("sku-container").update("<strong>Product Id: </strong> Select an option to display Product Id");'. "\n";
echo '}'; 

echo "}";
echo "\n</script>";
?>

我很感激任何帮助。

Thanks


该脚本几乎是正确的,除了$simple_product->getSelectLabel()是一个错误的钥匙。简单的产品模型中不存在这样的方法/属性。为了使脚本正常工作,应将此密钥替换为正确的密钥 - 产品 ID。利用产品 ID,可以找到所选产品的 sku。


所以,首先你需要重新组织itemId数组使其成为“productId => ProductSku”映射:

$productMap = array();
foreach($col as $simpleProduct){
    $productMap[$simpleProduct->getId()] = $simpleProduct->getSku();
}


然后您需要更改“onchange”函数调用以将 Configurable 的属性 id 传递给changeSku()功能。因此,底层逻辑能够搜索适当的简单产品属性。

onchange="return changeSku(<?php echo $_attribute->getAttributeId() ?>, this);">


之后,您需要利用可配置的配置来将选定的简单产品的属性 id 映射到所选的产品 id:

function changeSku(confAttributeId, sel) {
    var productMap = <?php echo Mage::helper('core')->jsonEncode($productMap);?>;
    var selectedAttributeId = sel.options[sel.selectedIndex].value;
    if (selectedAttributeId) {
        var options = spConfig.config.attributes[confAttributeId].options;
        var productId = options.find(function (option) {return option.id == selectedAttributeId}).products[0]
        $("sku-container").update("<strong>Product Id: </strong>" + productMap[productId]);
    } else {
        $("sku-container").update("<strong>Product Id: </strong> Select an option to display Product Id");
    }
}


为了供您参考,下面是整个模板的外观摘要(我对其进行了一些美化):

<?php
$_product    = $this->getProduct();
$_attributes = Mage::helper('core')->decorateArray($this->getAllowAttributes());
?>
<?php if ($_product->isSaleable() && count($_attributes)):?>
<dl>
    <?php foreach($_attributes as $_attribute): ?>
    <dt><label class="required"><em>*</em><?php echo $_attribute->getLabel() ?></label></dt>
    <dd<?php if ($_attribute->decoratedIsLast){?> class="last"<?php }?>>
        <div class="input-box">
            <select name="super_attribute[<?php echo $_attribute->getAttributeId() ?>]" id="attribute<?php echo $_attribute->getAttributeId() ?>" class="required-entry super-attribute-select"
                    onchange="return changeSku(<?php echo $_attribute->getAttributeId() ?>, this);">
                <option><?php echo $this->__('Choose an Option...') ?></option>
            </select>
        </div>
    </dd>
    <?php endforeach; ?>
</dl>
<script type="text/javascript">
    var spConfig = new Product.Config(<?php echo $this->getJsonConfig() ?>);
</script>

    <?php endif;?>

<div id="sku-container"></div>

<?php
$conf = Mage::getModel('catalog/product_type_configurable')->setProduct($_product);
$col = $conf->getUsedProductCollection()->addAttributeToSelect('*')->addFilterByRequiredOptions();

$productMap = array();
foreach($col as $simpleProduct){
    $productMap[$simpleProduct->getId()] = $simpleProduct->getSku();
}
?>

<script type="text/javascript">

document.observe("dom:loaded", function() {
  $("sku-container").update("<strong>Product Id: </strong> Select an option to display Product Id");
});

function changeSku(confAttributeId, sel) {
    var productMap = <?php echo Mage::helper('core')->jsonEncode($productMap);?>;
    var selectedAttributeId = sel.options[sel.selectedIndex].value;
    if (selectedAttributeId) {
        var options = spConfig.config.attributes[confAttributeId].options;
        var productId = options.find(function (option) {return option.id == selectedAttributeId}).products[0]
        $("sku-container").update("<strong>Product Id: </strong>" + productMap[productId]);
    } else {
        $("sku-container").update("<strong>Product Id: </strong> Select an option to display Product Id");
    }
}
</script>

这将完成您最初需要的任务。


另请注意以下事项

  1. 您的方法不适用于具有两个或多个可配置属性的可配置产品。对于该产品,直到用户为所有选择输入选择值后才知道最终的简单产品。因此,应该改变一种方法,在输出 SKU 之前检查所有选择。
  2. 该代码不考虑用户编辑产品配置时的情况,而不是为新产品指定配置。您可以单击“编辑”链接从购物车进入编辑模式。在这种情况下,所有选择输入都将预先填充先前选择的值。但文本会显示“选择一个选项来显示产品 ID”。该脚本还可能在编辑模式下产生其他 Javascript 错误。应稍微修改代码以支持编辑模式。
  3. 该模板充满了逻辑。 Magento 模板应该只有简单的打印内容foreach-迭代。所有方法都像$conf->getUsedProductCollection()->addAttributeToSelect('*')->addFilterByRequiredOptions()最好移动到块。这降低了代码复杂性。 希望能帮助到你。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在可配置的产品视图 Magento 上显示动态 SKU 的相关文章

  • Magento 路由器 URL - 需要连字符的路径名称

    假设我使用自定义控制器 其 url 路径 前端名称为 customcategory 好吧 显然如果我有一个名为 TestController php 和indexAction的控制器文件 url 路径将是 customcategory te
  • AJAX VS PHP 动态网页?

    当您只能使用 php 来实现动态网页时 为什么要使用 AJAX 呢 使用 AJAX 的主要原因是用户体验 UX 现在 AJAX 不一定会改善每个实例的用户体验 所以在很多地方坚持使用纯 PHP 完全没问题 但想象一下这样的情况 网站上有一个
  • 我该如何解决? KnapSack - 值完全相同,但每个对象都有三个权重

    我在解决我的练习时遇到问题 我读到了动态规划和算法 我认为我的练习是 特定背包问题 我用暴力法解决了它 但我无法用动态规划解决它 我有一艘重300吨的船 背包 有些晶体本身含有 3 种物质 X Y Z 每种物质都有重量 并且所有晶体都具有相
  • 在magento Attributes中添加自定义属性并显示在前端

    我已经开始使用 magento 作为我的电子商务 cms 我知道这是一个非常强大的平台 最近 我发现它的功能可以帮助开发人员扩展核心 并且我已经成功添加了自定义类别选项 是否有机会在某个属性上达到相同的结果 我想在属性选项卡上添加文本描述并
  • 如何使用 Magento 测试 cron?

    首先我需要了解 Magento cron 是如何工作的 我知道 cron 在 Linux 上如何工作 使用crontab e 我知道我需要设置 Magento 的 cron php 定期运行 但是当我在 magento 配置文件中定义 cr
  • R Shinydashboard 根据选项卡选择显示/隐藏 UI 元素

    如果有人可以提供帮助 我正在努力满足要求 我必须根据用户的选项卡面板选择在仪表板侧栏上显示 隐藏一些元素 这是 UI 代码的一部分 可让您了解我的应用程序的结构 我需要仅在 tabpPanel 2 上显示 Fourthoutput Fift
  • selectInput 的动态数量

    我是闪亮的新手 所以这可能是一个非常基本的问题 我想编写一个闪亮的应用程序 其中用户输入 n 我们得到 n 个 selectInput 选项 但我无法做到这一点 基本上任何形式的 for 循环都不起作用 我尝试的代码如下 library s
  • 使用magento中SOAP API的salesOrderInfo获取简单的产品sku和数量

    我在以下代码中添加了 app code core Mage Sales Model Order Api php File public function info orderIncrementId order Mage getModel s
  • Magento - AJAX 将产品页面元素调用到类别页面。选择框未填充

    我正在尝试在我的 Magento 商店上创建 ajax 快速视图 或 快速购物车 类型功能 一种将鼠标悬停在产品上并可以选择在灯箱中 快速查看 它而不是转到产品页面的方式 我正在使用一个非常简单的 jQuery Ajax 调用 如下所示 j
  • RestKit:带有数组的动态嵌套属性

    我正在努力寻找一种将一些 JSON 映射到 RestKit 的方法 这是我正在查看的示例 results Test1 id 1 name Test 1 here language English type Test1 Test2 id 3
  • 添加或删除带有原型的类

    无法计算用于添加或删除基于单击函数的 img 元素 选定 的 css 类名 选定 的 PROTOTYPE 脚本 已为 Jquery 完成 但它必须在 Prototype 中 这让我发疯 无法使其适用于原型 我的原始代码是 Magento 商
  • Magento 使用 MAGMI 批量导入图像 - 排除图像

    谢谢阅读 我正在使用 magmi 导入超过 30 000 个带有图像的产品 问题在于图像已导入 但全部被排除 是否有任何我可以使用并获取所有图像的 SQL 查询 我使用了这个查询 但只有一行受到影响 update catalog produ
  • 如何在占位符中动态生成的标签之间创建换行符?

    这是文件后面代码中的以下代码Page Load event LinkButton linkButton new LinkButton linkButton ID LinkButtonDynamicInPlaceHolder1Id i lin
  • 从 Magento 产品视图中的可配置产品中获取所有简单产品

    如何获取与可配置产品关联的所有简单产品 我找到了如何做相反的事情 从简单的产品获得可配置的产品 但这不是我需要的 我想显示所选产品的库存数量 可配置属性 我最初的想法是打印所有数量的库存并用 jQuery 控制显示 任何想法 使用下面的代码
  • 是否支持动态变量?

    我想知道Go中是否可以动态创建变量 我在下面提供了一个伪代码来说明我的意思 我将新创建的变量存储在切片中 func method slice make type for i 0 i lt 10 i var variable i i slic
  • 如何添加动态片段选项卡项

    我想添加动态选项卡项目 我有一个片段 它是 FragmentOne 它有一个 TextView 我正在尝试在 foreach 中创建 FragmentOne 并添加到选项卡 我测试了 setupViewPager 中的代码 但它不起作用 如
  • 检查前端是否管理员登录

    我编写了一个模块 其行为方式应与内联翻译相同 如果我是管理员并且已登录 我可以在前端看到一些特别的东西 但如果我不是管理员 那么我就看不到任何东西 如何让模块知道前端区域管理员已登录 UPDATE 1 为了澄清事情 我想描述一下我的模块行为
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • 当页面上已有tinymce实例时,动态添加tinymce编辑器

    这是我已经问过的这个问题的后续 动态添加tinymce编辑器 https stackoverflow com questions 19157574 add a tinymce editor dynamically 我有一个包含编辑器的页面
  • 从代码动态更改多个文本视图的大小(没有“磁盘上”xml 主题)?

    我有 10 个文本视图在我的代码中 我想更改所有代码的字体大小 在我的布局中我使用了 style定义通用属性 但是我不知道一旦布局出现在屏幕上如何从代码中更改它们 我不想做的是更新 AND 对象 但只写在一处 我知道我可以使用应用主题但这假

随机推荐

  • Symfony2 表单中的数据对象与需要填写的内容不完全匹配

    我们有监控服务 我们的监控单元可以监视某些机器 我正在创建一个表单来在 Symfony2 中注册一台新机器 所以我们有机器实体 id 机器名称 显示器编号 And the 监控实体 id 序列号 对于新机器 客户需要填写form with
  • Internet Explorer 显然不支持 MouseEvent movingX 属性

    我正在开发一个需要兼容 IE 9 及以上版本的应用程序 我在 MouseEvent 对象上使用 movingX 属性 但是该 MouseEvent 对象在 Internet Explorer 9 或 11 中没有 movingX 属性 我浏
  • 如何使用php在mysql中生成下一个自动递增编号?

    我试图使用 php 获取 mysql 中的下一个自动递增数字 我尝试了这样的方法 但是 当删除任何行时 这不起作用 我希望你明白我的意思 我怎样才能使用 php 来做到这一点 您无法执行此操作来获取表数据 您必须使用 php 获取表状态才能
  • 为什么Python 2.7的namedtuple实现__dict__?

    The namedtuplePython 2 7 中的实现实现 dict 我很困惑这是在做什么 为什么我们需要做一个特别的 dict 如果已经定义了属性 C tmp gt python Python 2 7 12 Anaconda 4 1
  • 从 Python 数据中学习二元决策图 (BDD)

    是否可以从数据中学习二元决策图 BDD 以机器学习的方式 如果是这样 怎么办 背景 我在 Python 中看到过一些工具可以完成此任务 例如决策树 DT scikit学习 但我还没有看到任何 BDD 举个例子 我想做的事情如下 前三列对应于
  • 在 SQL Server 中读取并递增 int 值

    我需要使用 C 在 SQL Server 2008 中自动读取并递增一个值 例如 我必须插入 批次 的项目 为此我需要最后一批的编号 并确保没有其他人获得该编号 因此 我有一张仅包含最后批号的表格 并找到一种只需一步即可获取和更新编号的方法
  • 使用ClassLoader方法检索类下的所有资源作为输入流

    我的问题是一个你可能认为很常见的问题 但到目前为止我还没有找到解决方案 在 Tomcat 5 5 下构建 Java Web 应用程序 尽管要求它可以部署在任何地方 例如在 WebLogic 环境下 因此需要将资源作为流加载 良好的实践表明资
  • 为什么 System.Transactions TransactionScope 默认隔离级别可序列化

    我只是想知道什么是好的使用可序列化的原因作为创建时的默认隔离级别系统 交易 交易范围 因为我想不出任何 而且似乎你无法通过更改默认值web app config所以你总是必须在你的代码中设置它 using var transaction T
  • WCF,从服务访问 Windows 窗体控件

    我有一个托管在 Windows 窗体内的 WCF 服务 如何从我的服务中的方法访问表单的控件 例如我有 public interface IService ServiceContract string PrintMessage string
  • Gwt 插件在 Chrome 42 中不起作用 [重复]

    这个问题在这里已经有答案了 新版chrome 42 不支持gwt插件在 Windows 8 1 上 即使我将兼容模式更改为 Windows 7 我仍然会收到再次下载插件的提示 我已尝试删除它并重新安装 但仍然收到此消息 有任何想法吗 来自
  • 这段Python代码能更高效吗?

    我编写了一些代码来查找字符串中有多少个子串是字谜对 要查找的函数anagram anagramSolution 复杂度为 O N substring函数的复杂度小于N平方 但是 这里的代码是有问题的 能不能再优化一点 for i in ra
  • 填充颜​​色动画在动画中调用块时闪烁确实停止了

    我无法弄清楚为什么动画块完成后动画从 fromValue 闪烁到 toValue 我知道 完成动画后 您必须将 CALayer 的值设置为动画的结束状态 以保持其外观一致 然而 无论我以什么顺序调用这些方法 我都会得到闪烁的结果 我正在做的
  • Android,如何为视图组设置动画监听器?

    我有一个充当菜单的图像视图 当用户单击它时 视图组 包括其他 5 个图像视图 将从左向右滑动 当用户再次单击菜单时 查看组幻灯片从右到左 我可以模拟这种行为 但从右向左滑动后 我希望看不到视图组 但视图组将放在其位置上 我尝试使用Linea
  • 如何在 Xcode 中启用 Clang Address Sanitizer?

    正如 WWDC 2015 上宣布的那样 Clang Address Sanitizer 将被引入 Xcode 和 OS X 课程 413 高级调试和地址清理器 如何为 Xcode 项目启用 Clang Address Sanitizer A
  • 您可以强制 Parallel.Invoke 使用多线程吗?

    我在 aspx 页面中使用这样的任务并行库 Parallel Invoke new Action gt users service DoAbc gt products service DoDef 以前 我每次调用都会触发一个线程 并且比现在
  • 如何将 class="active" 设置为活动页面

    我正在设计一个使用 jsp 页面的应用程序 现在我需要一些东西来指示当前正在显示的页面 基本上 我想要一个包含每个页面的菜单 我将 class active 放置在当前页面上 我该怎么做呢 有什么建议么 谢谢 开球示例
  • 如何在 YouTube 上上传大文件 [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我尝试了两种在 YouTube 上上传大文件的方法 但都不起作用 每种方法都有自己的问题 我的目标是找到上传大文件的正确答案 第一种方法 它将大文件分成不同的部分 而不是单独发送它们并
  • 更新数组中的元素

    假设我有这个对象 town id 13 houses data house id 5 price 32 description thats a house house id 2 price 12 description thats a ho
  • 如何使用访问令牌获取 OAuth 2 刷新令牌

    我正在开发一个应用程序 其中使用 OAuth 2 0 在用户 Google 标签中上传数据 我能够连接到用户的邮件 一段时间后访问令牌就会过期 如何使用令牌刷新器获取新的访问令牌 我正在使用 javamail 示例代码来进行身份验证并获取访
  • 在可配置的产品视图 Magento 上显示动态 SKU

    我有这个脚本来显示选择选项上的动态 sku 但我无法开始工作 正在加载正确的 sku 但选择时没有任何反应 此代码获取 Javascript 上的 sku 列表 并在可配置产品视图上更新产品选择选项上的 div dl dl