Magento:获取给定产品的购物车数量

2024-05-24

我使用这个代码:

// $items = Mage::getModel('checkout/cart')->getQuote()->getAllItems();
$items = Mage::getSingleton('checkout/session')->getQuote()->getAllItems();
 
foreach($items as $item) {
    echo 'ID: '.$item->getProductId().'<br />';
    echo 'Name: '.$item->getName().'<br />';
    echo 'Sku: '.$item->getSku().'<br />';
    echo 'Quantity: '.$item->getQty().'<br />';
    echo 'Price: '.$item->getPrice().'<br />';
    echo "<br />";
}

获取有关购物车中产品的信息。

如何仅获取给定产品的数量 (productId)

多谢。


tl;dr:这个问题的答案因产品类型(可配置、简单等)的复杂性而异。 这可能会影响您设置目录和设置简单产品可见性的方式。如果您的目录中只有简单的项目,则此任务非常简单。另:请参阅最后的编辑。

有很多场景需要考虑。例如,如果您将一个可配置商品添加到购物车,则报价中的每个选项将有两个报价项目:一个用于可配置父产品的报价项目将包含选项数量信息,另一个报价项目将提供该选项的简单产品数据。捆绑包项目将有一个父捆绑包项目以及每个捆绑包选项的一个简单项目。

归根结底,您需要决定如何向用户表示每种产品类型的数量;例如,您是否想要将同一型号的衬衫表示为具有所有尺码数量的一个行项目,或者您是否想要针对每个尺码将它们分开(后者是 Magento 在购物车/评论区域中呈现它们的方式)。

我建议将您的产品添加到购物车,然后在前端使用它来查看报价项目数据:

<?php

include 'app/Mage.php';
Mage::setIsDeveloperMode(true);

Mage::app(); // Mage_Core_Model_App

Mage::getSingleton('core/session', array('name'=>'frontend'));

$quote = Mage::helper('checkout/cart')->getCart()->getQuote();

echo count($quote->getItemsCollection());
foreach ($quote->getItemsCollection() as $item){
    Zend_Debug::dump($item->debug());
}

我建议使用带有示例数据的安装,并将不同数量的每种产品类型添加到购物车。基于此+上面代码的输出,您将在循环时看到多种方法和陷阱。当您遇到以下情况时,会出现令人困惑的情况:

  • Configurable items
    • 对于每个选项,您都会将可配置产品作为一个项目and选项作为项目派生的简单产品。如果要显示可配置父级的总计数,则需要计算循环中的总可配置数量:

Code:

$configurables = array();

// ...then, inside your foreach
if($item->getProductType() === 'configurable'){
    if(isset($configurables[$item->getProductId()])){
        //add to the other options' quantity
        $configurables[$item->getProductId()] += $item->getQty();
    }
    else {
        $configurables[$item->getProductId()] = $item->getQty();
    }
}
  • Grouped Items
    • 作为分组项目的一部分添加到报价中的简单产品与单独添加的简单项目以及它们可能所属的其他组是分开的。如果你想聚合这些,你可以像这样循环:

Code:

$grouped = array();

// ...then, inside your foreach
if($item->getProductType() === 'grouped' || $item->getProductType() === 'simple'){
    if(isset($grouped[$item->getProductId()])){
        //add to the other options' quantity
        $grouped[$item->getProductId()] += $item->getQty();
    }
    else {
        $grouped[$item->getProductId()] = $item->getQty();
    }
}
  • Bundle Items
    • 捆绑产品报价项目由捆绑产品的一项和每个选项的单独简单产品项目表示。简单的产品项目具有针对它们存储的数量信息。简单项目有一个父项目 ID,它引用捆绑产品报价项目,就像可配置产品报价项目的子项目一样。

可以看到,处理所有场景是很麻烦的。我希望我能告诉你,通过资源模型来做到这一点更容易,但事实是在数据库中sales_flat_quote_item_option表将数量信息存储在序列化数据列中,因此您需要将内容提取到 PHP 中才能使用它们(这是通过资源模型为您完成的)。

抱歉,这是一个很长的答案,但您可以看到,根据您的目录设置,您需要进行一些仔细的考虑和测试,以确保您已经涵盖了您的基础。

EDIT: 虽然我试图做到彻底,但我没有提到你应该调查sales_flat_quote_item桌子。根据您的要求,您可以轻松地使用其中的数据来快速、优雅且高效地对实现显示要求所需的数据进行建模。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Magento:获取给定产品的购物车数量 的相关文章

  • 过滤两个类别的产品集合 Magento 1.7

    我想要获取包含 A 类或 B 类产品的产品集合 我已经能够使用以下 php 代码成功获取这些产品 collection Mage getModel catalog product gt getCollection gt joinField
  • Magento 1.8 - 高级搜索不起作用

    我在最新版本的 magento 中发现了一个奇怪的错误 高级搜索工具无法正常工作 我做了什么 安装 magento 的新副本 在管理页面添加了一个名为 测试 1 的产品 重新索引全部 清除所有缓存 At the frontend page
  • 在 Magento 控制器中使用 move_uploaded_file

    我是 magento 的新手 我正在 magento 管理中创建用于文件上传的自定义模块 现在我已将上传文件发布到我的模块控制器中 这里我用过move uploaded file将文件上传到与控制器文件夹相同的目录中 下面的代码我用于控制器
  • 如何轻松调试布局 Xml 警告/错误?

    我陷入了这个错误 Warning simplexml load string Entity line 46 parser error Comment not terminated in lib Varien Simplexml Config
  • 根据产品属性在 Magento 中创建购物车规则

    我在一个类别中有产品 针 有些以 100 支为一包出售 有些以 500 支为一包出售 盒子中的针数被设置为产品属性 我想根据购物车中的针总数应用购物车规则 F x 如果您购买 1000 2000 根针头 无论 500 100 包的组合如何
  • 访问 Magento 购物车和/或结帐中的运费

    请注意 这个问题是关于运费 而不是价格 有一个重要的区别 即运输方式为店主支付的费用是多少 而不是客户支付的费用 The shipping tablerate数据库表包括一个cost字段 该字段填充在Mage Shipping Model
  • Magento EE FPC 中的打孔法师_目录_块_产品_价格

    我花了很长时间找出代码 参数来为Mage Catalog Block Product Price块在magento中打孔全页缓存 我可以在第一次加载页面时显示价格 但是当缓存 id 是唯一的时 它不会正确呈现价格 当它应该被缓存时 它会正确
  • Paypal Express Checkout 坚持使用电话号码,即使选项已关闭(从 Magento 拨打)

    我在 Magento 中使用 Paypal 快速结帐 选项 我没有使用任何快速结帐按钮 这只是因为我在从网站付款标准返回时遇到问题 在 Paypal 的网站付款首选项中 我已将 联系电话号码 字段设置为关闭 我还在 Magento 方面进行
  • Magento 重新索引问题

    I am facing one issue in Magento I am having one Magento store with multi website functionality which containing approx
  • 使用按钮添加自定义折扣订单总计

    我的模块带有自定义折扣 没问题 配置 xml
  • Magento:获取给定产品的购物车数量

    我使用这个代码 items Mage getModel checkout cart gt getQuote gt getAllItems items Mage getSingleton checkout session gt getQuot
  • 在产品页面上显示最近浏览过的产品

    magento 当前的默认功能是在类别页面的右侧显示最近查看的产品 现在我想在产品页面底部显示相同的内容 使用的 phtml 文件在位置命名为 frontend base default template reports product v
  • 使用magento中SOAP API的salesOrderInfo获取简单的产品sku和数量

    我在以下代码中添加了 app code core Mage Sales Model Order Api php File public function info orderIncrementId order Mage getModel s
  • Magento 外部登录不会创建会话 cookie

    我正在尝试从外部站点替换 Magento 的相当笨拙的 ajax 登录 该网站使用 Magento 作为商店 站点和 magento 商店都有自己的登录信息 因此当用户登录时 两者同步非常重要 这是通过每次页面重新加载时进行 ajax 调用
  • Magento 使用 MAGMI 批量导入图像 - 排除图像

    谢谢阅读 我正在使用 magmi 导入超过 30 000 个带有图像的产品 问题在于图像已导入 但全部被排除 是否有任何我可以使用并获取所有图像的 SQL 查询 我使用了这个查询 但只有一行受到影响 update catalog produ
  • 以编程方式将礼品消息设置为现有订单[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在寻找一些代码 以便在 Mage
  • 检测集合是否包含数据

    这可能是一个简单的问题 但我找不到答案 我如何知道我的收藏是否没有数据 I do datas Mage getModel zzz zzz gt getCollection 如果我做一个 datas gt getData 它返回一个空数组 但
  • 从 Magento 产品视图中的可配置产品中获取所有简单产品

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

    在我的自定义模块中 我有一个带有单选按钮的表单 当我单击提交按钮时 它不会验证单选按钮 如何使用 Magento 默认验证类进行验证 Thanks 我得到了答案 use validate one required by name在单选按钮的
  • 如何获取与我当前所在商店相关的产品所属类别 ID

    我在产品页面上并拥有产品对象 但是当我尝试使用以下方式获取类别 id 时 product gt getCategoryIds or product gt getResource gt getAttribute category ids gt

随机推荐

  • 面向 Delphi 开发人员的 Qt

    有人知道为 Delphi C Builder VCL 开发人员解释 Qt 的书籍或教程吗 对于具有该背景的开发人员来说 学习 Qt 的最佳方法是什么 我对如何使用 Qt 完成我知道如何在 Delphi 中完成的事情特别感兴趣 例如 Qt 相
  • VBA 按用户范围选择排序

    在过去的三天里我一直在为这个问题苦苦挣扎 所以请帮忙 我想做的是当我运行 Macro1 时 为了论证 将弹出窗口以选择应排序的单元格范围 通过选择的最后一列 或第五列 对这些进行排序 从最低数字到最高数字 这里的问题是所选区域每次都会改变
  • 无法单步执行远程 SQL Server 2008 上的存储过程

    我在虚拟上安装了一个域控制器Windows Server 2008 x64 SQL Server 2008 Express x64正在运行Windows Server 2008 x64和客户端Windows 7 RTM x86 两者都已加入
  • NumPy 或 SciPy 计算加权中位数

    我正在尝试自动化 JMP 执行的流程 分析 gt 分布 输入 A 列作为 Y 值 使用后续列 作为 权重 值 在 JMP 中 您必须一次执行一列 我想使用 Python 循环所有列并创建一个数组 显示每列的中位数 例如 如果质量数组为 0
  • Javascript:函数的“无限”参数?

    在 Chrome 中 当我输入console log在下面的一项中 console log A parameter A parameter A parameter A parameter A parameter A parameter A
  • 查找导航属性的相关 FK 属性

    在运行时 我想查找 EntityObject 是否也具有给定 NavigationProperty 的外键属性 我在下面的两个步骤中做到了这一点 我想这将需要一些元数据查询 我不确定如何测试元数据类是否指向特定 EntityObject 类
  • 检索用户关注的所有用户的帖子 -rails -ActiveRecord

    我有一个简单的 Rails 应用程序 用户可以在其中互相赠送虚拟礼物 每件礼物都属于两个用户 赠送者和接收者 In my User rb has many given gifts class name Gift foreign key gi
  • 如何使第一行变成第二级MultiIndex

    我有一个现有的 DataFrame 如下所示 1 1 1 2 2 2 2 abc def ghi jkl mno pqr stu 1 00 2 00 3 00 4 00 5 00 6 00 7 00 1 00 2 00 3 00 4 00
  • 何时计划 (SELECT) 查询?

    在 PostgreSQL 中 什么时候计划 SELECT 查询 Is it 在报表准备时 或者 在处理 SELECT 开始时 或者 别的东西 我问的原因是 Stackoverflow 上有一个问题 相同的查询 两种不同的方式 性能截然不同
  • 同时运行 ng build --watch 和 ngserve 时,Angular 7 库 html 模板更改不会影响应用程序

    当 Angular 7 库 html 模板更改使用 ng build library watch 和 ngserve application 在不同的 cmd 中同时运行时 不会影响 Angular 应用程序 所以我首先使用 watch 标
  • 在 C++20 中获取当前日期/时间是线程安全的吗?

    简短的问题 在 C 17 之前 包括 C 17 C 不提供线程安全的方式来获取当前时间或日期 这个问题会在 C 20 中修复吗 长问题 获取当前时间和日期的唯一可移植方法是使用 std gmtime 或 std localtime 函数 这
  • 在非输入元素上反应 onKeyDown/onKeyUp 事件

    我需要捕获 cmd 按钮向上和向下事件 以便选择是否在 setState 中使用串联 例如 我如何在表元素上获取这些事件 您必须在主体 窗口级别捕获按键 表元素没有输入焦点 因此您无法从表中捕获键 没有输入元素 var cmdDown fa
  • Shell Crontab 不工作

    GNU nano 2 0 9 文件 tmp crontab XXXXzBQgwS 5 check phpfpm sh 5 check nginx sh 5 disk clean sh 5 loadcheck sh 按理说我的代码应该每 5
  • XNA中窗口系统的渲染策略(RenderTarget性能)

    我目前正在从头开始为 XNA 游戏创建一个窗口系统 我主要针对 Windows 进行开发 但谁知道我将来可能支持哪些平台 如果您知道本机 Direct3D 的这一点 请随意回答 因为性能语义应该类似 如果可能 请考虑如果目标平台是 X Bo
  • 使用 Print 进行简单的芹菜测试不会进入终端

    EDIT 1 实际上 print语句输出到 Celery 终端 而不是运行 python 程序的终端 正如 PatrickAllen 所示 OP 我最近开始使用Celery http www celeryproject org 但甚至无法进
  • 使用 boost 线程和非静态类函数

    所以我做了一些研究 发现你可以创建一个 boost thread 对象 并通过使用 this 和 boost bind 等以非静态类函数开头 这确实没有多大意义对我来说 我能找到的所有示例都在与其启动的函数相同的类中启动了 boost th
  • 软件开发/项目中“后端”和“前端”的定义/区别是什么? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 新手如何区分这一点 如何知道自己正在工作的是后端系统还是前端系统 前端 通常是指项目中与用户交互的部分 例如图形用户界面或命令行 这是一个模
  • 使用 urllib2 进行 Python 身份验证

    所以我尝试使用 python 从名为 vsearch cisco com 的网站下载文件 python Connects to the Cisco Server and Downloads files at the URL specifie
  • 具有多个输入的kerasvalidation_data

    我尝试使用validation data方法 但是有问题 model fit X macd train X rsi train X ema train Y train sample weight sample weight validati
  • Magento:获取给定产品的购物车数量

    我使用这个代码 items Mage getModel checkout cart gt getQuote gt getAllItems items Mage getSingleton checkout session gt getQuot