我碰到了一个问题,那就是库存量超过400000的产品说不能销售。或者更确切地说,isSalable不会返回一个值。Magento 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企业1.12
现在我意识到,对象调用返回false。在一天结束时张贴这些内容的效果。
我将回声移至事件派发之前,并且都回来为1,所以我查看事件并追踪它将其设置为false的位置。
我就跟踪到这个功能在企业/ 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()
外,如果,问题产品给出了封闭状态,和其他产品一个错误,因为$事件没有按”不存在。
什么是造成差异?
--- EDIT 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)
再次,正常的产品带回来一个错误,因为没有对产品的任何事件。
此活动来自哪里?
随着我的进步,我会不断更新。
我有点困惑。您在说“isSalable没有返回值”,但也是“在问题产品上,变量返回值为1”。看看你发布的方法isSalable(),它返回变量$可销售到最后,你说在问题产品上是1,因此应该返回1? – mpaepper