我用这个代码:
// $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 />";
}
Run Code Online (Sandbox Code Playgroud)
获取有关Cart中产品的信息.
我怎样才能获得给定产品的数量(productId)
非常感谢.
ben*_*rks 40
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());
}
Run Code Online (Sandbox Code Playgroud)
我建议使用带有样本数据的安装,并将每种产品类型的不同数量添加到购物车.基于此+上述代码的输出,您将看到在循环时有几种方法和陷阱.混淆的场景是你有以下内容:
码:
$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();
}
}
Run Code Online (Sandbox Code Playgroud)
码:
$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();
}
}
Run Code Online (Sandbox Code Playgroud)
您可以看到处理所有方案非常麻烦.我希望我能告诉你,通过资源模型更容易实现这一点,但事实是,在数据库中,sales_flat_quote_item_option
表将数量信息存储在一系列序列化数据中,因此您需要将内容输入PHP以获取任何位置它们(通过资源模型为您完成).
对不起,这是一个很长的答案,但你可以看到,根据你的目录设置,你需要仔细考虑和测试,以确保你已经覆盖你的基地.
编辑: 虽然试图彻底,我没有提到你应该看看sales_flat_quote_item
表.根据您的要求,您可以轻松地使用其中的数据快速,优雅,高效地建模您实现显示要求所需的数据.