我碰到了一個問題,那就是庫存量超過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