2016-09-22 21 views
1

我正在開發一個掛鉤到actionUpdateQuantity掛鉤的簡單模塊。所以,每次更新產品的庫存時,我都必須更新其他產品的庫存。Prestashop actionUpdateQuantity循環

但是,爲了更新庫存,我調用了stockAvailable對象,該對象觸發了actionUpdateQuantity掛鉤。所以,我有一個無限循環。

然後我嘗試使用SQL直接在數據庫上手動更新庫存,但這有其他模塊不能「查看」庫存更新的問題。所以,MailAlert,ebay或Amazon等模塊不會正確更新庫存。

我有點卡在這裏。

如何在不輸入循環的情況下更新庫存?

謝謝!

回答

1

我以前有類似的問題,並認爲這不是最好的方式,但爲我工作。想法是添加模塊類變量:

protected $isSaved = false; 

然後在hookActionProductUpdate函數首先檢查變量,以後你做了保存後的數據改變其值

public function hookActionProductUpdate($params) 
{ 
    if ($this->isSaved) 
     return null; 
    ... 
    $this->isSaved = true; 
} 
+0

嗯,就像使用鎖定文件一樣。所以,我假設我的模塊仍在運行時調用actionUpdateQuantity鉤子。使用這個技巧,模塊知道它仍在運行並退出。我認爲這個鉤子是在我的模塊結束後調用的。我會嘗試! – Juanjico

+0

我正在測試並反駁看看它被調用了多少次,並認爲它是2.但找不到原因。可能與'hookActionProductSave'有關,但沒有找到其他解決方案。 –

0

另一種方式來做到這一點,您提交新數量時,請確保您也提交產品ID和屬性ID。然後在你的鉤子,你可以做一個檢查。

public function hookActionUpdateQuantity($params) 
{ 
    if ((int)Tools::getValue('id_product') != $params['id_product'] 
     || (int)Tools::getValue('id_attribute') != $params['id_product_attribute']) { 
     return false; 
    } 

    // do your stuff 
} 

每次鉤actionUpdateQuantity觸發你有一個$params陣列產品中其數量正在更新。

$params['id_product']   // id of a product being updated 
$params['id_product_attribute'] // id of product combination being updated 
$params['quantity']    // quantity being set to product 

這樣,當您從模塊更新產品數量時,您的掛鉤只能運行一次(表格?)。當您更新其他產品數量時,它們也會觸發此掛鉤,但由於$params數組中的數據與您的POST數據不同,掛鉤方法將返回false。