Performance 加载集合,为自己或普通sql保存每个产品
我写了一个扩展来计算产品的销售额——目标是获得畅销书 我为所有销售的产品Performance 加载集合,为自己或普通sql保存每个产品,performance,magento,Performance,Magento,我写了一个扩展来计算产品的销售额——目标是获得畅销书 我为所有销售的产品项目 在事件之前,我连接到销售\订单\保存\中 public function salesOrderSaveBefore(Varien_Event_Observer $observer) { /* @var $order Mage_Sales_Model_Order */ $order = $observer->getOrder(); // if the order will be creat
项目
在事件之前,我连接到销售\订单\保存\中
public function salesOrderSaveBefore(Varien_Event_Observer $observer)
{
/* @var $order Mage_Sales_Model_Order */
$order = $observer->getOrder();
// if the order will be created and has no id yet
if(!$order->getId()) {
$productIds = array();
foreach($order->getAllItems() as $item) {
/* @var $item Mage_Sales_Model_Order_Item */
$productIds[] = $item->getProductId();
}
}
// what to do here :-)
}
现在我看到两种方式:
我加载产品集合,循环所有产品,提升已售出的项目(+1)并保存所有产品
我触发了一个类似于updatecatalog\u product\u entity SET items\u seld=items\u seld+1的查询,其中entity\u id在$productIds中
有什么建议吗?你认为Magento报告系统怎么样?这是一个单独的索引过程,可以写入平面表。在/Admin/report\u sales/bestsellers/下访问管理员,使用报告模型与magento一样,有几种方法可以实现这一点。一种方法可以是(这是adminhtml中使用的方法,它不考虑复杂的产品类型):
根据您的问题,您可能会寻找以下内容:
$limit = 5;
$storeId = Mage::app()->getStore()->getId();
$bestSellers = Mage::getResourceModel('reports/product_sold_collection')
->addOrderedQty()
->addAttributeToSelect('name')
->addStoreFilter($storeId)
->setOrder('ordered_qty', 'desc')
->setPageSize($limit)
->setCurPage(1);
要应用块缓存(这将需要刷新块/html标记),还需要将缓存\u生命周期更改为您熟悉的图形:
protected function _construct()
{
$this->addData(array (
'cache_lifetime' => false,
'cache_tags' => array(Mage_Core_Model_Store::CACHE_TAG)
));
}
您可以更进一步,为您的模块/畅销书添加a。您打算考虑退款吗?取消订单等等?目前没有。我考虑过开发票等等,但我认为这并不重要。抱歉-我们的目标是通过一种高效的方式获得畅销书也许我误解了你想要实现的目标,但是为什么你不使用报告/产品集合呢?还有一件事-这需要多大的实时性,例如,每晚或每天2次的更新是否足够?您可以在某种程度上实施块缓存或其他方式。我最初的想法是,我希望销售数据与产品数据分开保存。
protected function _construct()
{
$this->addData(array (
'cache_lifetime' => false,
'cache_tags' => array(Mage_Core_Model_Store::CACHE_TAG)
));
}