我想显示可配置产品的前端销售数量。我已经有了这个代码,非常适合简单的产品。但对于可配置产品,始终显示 0。
如何更新,使其适用于简单且可配置的两者。当销售数量为 0 时隐藏它也很酷。
<?php
$sku = nl2br($_product->getSku());
$product = Mage::getResourceModel('reports/product_collection')
->addOrderedQty()
->addAttributeToFilter('sku', $sku)
->setOrder('ordered_qty', 'desc')
->getFirstItem();
echo 'Already Bought '.(int)$product->ordered_qty; ?>
您可能会遇到问题,因为产品选项可以更改报价/订单中商品的特定 SKU。尝试只查找产品 ID。
类似的东西(我还没有尝试过这段代码来测试它):
<?php
$product = Mage::getResourceModel('reports/product_collection')
->addOrderedQty()
->addAttributeToFilter('id',$_product->getID())
->setOrder('ordered_qty', 'desc')
->getFirstItem();
$sold = (int)$product->ordered_qty;
?>
然后,无论您希望它出现在何处:
<?php
if ($sold > 0) {
echo "Already sold $sold times.";
}
?>
或者你想显示它。
在下面编辑
为了保持一致性,我将保留上述内容,但你是对的,它为我带来了同样的错误:
致命错误:在第 816 行的 ~app/code/core/Mage/Eav/Model/Entity/Abstract.php 中的非对象上调用成员函数 getBackend()
这让我很恼火,所以我这次没有偷懒,实际上写了一些工作示例代码。在此期间,我也学到了一些重要的东西 - 确保在addIdFilter()
之前始终有addOrderedQty()
,否则您的收藏将完全忽略该过滤器。谢谢,马真托。
无论如何,这个独立的小示例将获取订购数量并使用产品 ID 打印它,它应该很清楚其中发生了什么。
<?php
require_once '<path_to_magento_root>/app/Mage.php';
Mage::app('default');
$p = Mage::getResourceModel('reports/product_collection')
->addOrderedQty()
->addIdFilter($argv[1])
->getFirstItem();
echo $p->getId().": ".$p->ordered_qty.PHP_EOL;
?>
像这样运行它:
php test.php 131
你会得到这样的输出:
131: 103.0000
希望这比我的第一次尝试更有帮助。