当客户线程关闭时,我需要创建一个模块来发送电子邮件。要做到这一点,我想在更新客户线程时使用钩子,然后我可以检查状态并执行我需要的操作。
使用validator.prestashop.com我找到actionObjectCustomerThreadAddAfter
。我想知道在关闭或更新Thread时是否存在类似的钩子。我到目前为止在this one找到的唯一钩子列表,但即使是我发现的钩子也不存在。
答案 0 :(得分:1)
对于扩展ObjectModel
并使用其add()
,update()
,delete()
或save()
方法的每个类,您都可以使用以下挂钩。< / p>
actionObjectAddBefore
actionObjectNameAddBefore
actionObjectAddAfter
actionObjectNameAddAfter
actionObjectUpdateBefore
actionObjectNameUpdateBefore
actionObjectUpdateAfter
actionObjectNameUpdateAfter
actionObjectDeleteBefore
actionObjectNameDeleteBefore
actionObjectDeleteAfter
actionObjectNameDeleteAfter
将Name
替换为类的名称。所有这些钩子也将对象本身作为参数传递。
array(
'object' => $this
)
因此,对于客户线程状态,您可以使用actionObjectCustomerThreadUpdateBefore
和actionObjectCustomerThreadUpdateAfter
挂钩来检测状态是否已更改并发送电子邮件。
修改强>
然后你在管理客户线程控制器中找到这样的宝石。
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()
方法才能添加代码。