2017-04-07 72 views
0

當客戶線程關閉時,我需要創建一個模塊來發送電子郵件。要做到這一點,我正在考慮在客戶線程更新時使用鉤子,然後我可以檢查狀態並執行我需要的操作。使用validator.prestashop.com我發現actionObjectCustomerThreadAddAfter。我想知道當我關閉或更新線程時是否有類似的鉤子。我目前在this one發現的唯一鉤子列表,但即使是我發現的這個鉤子在那裏也不存在。PrestaShop:關閉客戶線程

回答

1

對於每一個擴展ObjectModel和使用您已有可使用下列鉤其add()update()delete()save()方法的類。

actionObjectAddBefore 
actionObjectNameAddBefore 
actionObjectAddAfter 
actionObjectNameAddAfter 

actionObjectUpdateBefore 
actionObjectNameUpdateBefore 
actionObjectUpdateAfter 
actionObjectNameUpdateAfter 

actionObjectDeleteBefore 
actionObjectNameDeleteBefore 
actionObjectDeleteAfter 
actionObjectNameDeleteAfter 

用類的名稱替換Name。所有這些鉤子也將對象本身作爲參數傳遞。

array(
    'object' => $this 
) 

所以對於客戶線程的狀態就可以使用actionObjectCustomerThreadUpdateBeforeactionObjectCustomerThreadUpdateAfter鉤來檢測,如果狀態更改和發送電子郵件。

編輯

然後你會發現在管理客戶線程控制器這樣的寶石。

if ($id_status = (int)Tools::getValue('setstatus')) { 
    $status_array = array(1 => 'open', 2 => 'closed', 3 => 'pending1', 4 => 'pending2'); 
    Db::getInstance()->execute(' 
     UPDATE '._DB_PREFIX_.'customer_thread 
     SET status = "'.$status_array[$id_status].'" 
     WHERE id_customer_thread = '.(int)$id_customer_thread.' LIMIT 1 
    '); 
} 

含義,它不使用對象的狀態,但直接調用保存到數據庫中,以便在吊鉤從未執行。

您將不得不重寫AdminCustomerThreadsController及其postProcess()方法來添加您的代碼。

+0

謝謝,這是一個非常有用的信息!只要我執行,我會給出反饋並將答案標記爲正確。 –

+0

我加了,看起來好像沒有達到代碼。我在鉤表中看到鉤子,但是當我進入「管理鉤子」部分時,我看不到它。我能做什麼錯了? –

+0

@AndréLuiz你勾選了「顯示不可定位的鉤子」嗎?還要確保在模塊的安裝方法中註冊這些鉤子。 – TheDrot