我以某种方式遇到了一个问题,即有库存且数量超过 400000 的产品说它无法销售。或者更确切地说 isSalable 没有返回值。
我拉起功能来看看,我发现了一些奇怪的东西。
这是功能:
public function isSalable(){
Mage::dispatchEvent('catalog_product_is_salable_before', array(
'product' => $this
));
$salable = $this->isAvailable();
$object = new Varien_Object(array(
'product' => $this,
'is_salable' => $salable
));
Mage::dispatchEvent('catalog_product_is_salable_after', array(
'product' => $this,
'salable' => $object
));
// echo "variable: ".$salable."<br />object: ".$object->getIsSalable();
return $object->getIsSalable();
}
注释的回显是在将其放入对象之前查看值以及从对象中检索到的值。在我得到的问题产品上:
variable: 1
object:
在其他产品上,它们都返回为 1。
有谁知道什么会导致这种情况发生?
- -编辑 - -
抱歉,函数返回$object->getIsSalable()
,而不是$salable
。
这是Magento Enterprise 1.12
我现在意识到对象调用返回错误。在一天结束时发布此内容的效果。
我将回声移到了事件调度之前,并且两者都返回为 1,因此我查看了事件并追踪了将其设置为 false 的位置。
我在 Enterprise/CatalogEvent 中跟踪到了这个函数:
public function applyIsSalableToProduct(Varien_Event_Observer $observer){
$event = $observer->getEvent()->getProduct()->getEvent();
echo "<br />".$event->getStatus()."<br />";
if ($event && in_array($event->getStatus(), array(
Enterprise_CatalogEvent_Model_Event::STATUS_CLOSED,
Enterprise_CatalogEvent_Model_Event::STATUS_UPCOMING
))) {
$observer->getEvent()->getSalable()->setIsSalable(false);
}
return $this;
}
如果我$event->getStatus()
在 if 之外回显,则问题产品的状态为已关闭,而其他产品会抛出错误,因为 $event 不存在。
是什么导致了差异?
---编辑2---
我发现关闭来自产品事件。
$event = $observer->getEvent()->getProduct()->getEvent();
我在创建对象后返回isSalable()
并添加print_r($this->getEvent()->getData());
并得到了这个:
Array([event_id] => 3 [category_id] => 12 [date_start] => 2012-11-28 09:54:00 [date_end] => 2012-11-29 09:54:00 [display_state] => [sort_order] => [status] => closed)
同样,正常产品返回错误,因为产品上没有事件。
这个事件从哪里来?
随着我的进步,我会不断更新。