PrestaShop:钩在闭合的客户螺纹上

PrestaShop:钩在闭合的客户螺纹上,prestashop,prestashop-1.6,Prestashop,Prestashop 1.6,我需要制作一个模块,以便在客户线程关闭时发送电子邮件。为此,我考虑在更新客户线程时使用钩子,然后检查状态并执行所需的操作 使用,我找到了actionObjectCustomerThreadAddAfter。我想知道当我关闭或更新线程时是否有类似的钩子。到目前为止,我在中找到的唯一钩子列表,但即使是我找到的这个钩子也不存在。对于扩展ObjectModel并使用其add()、update()、delete()方法的每个类,您都可以使用以下钩子 actionObjectAddBefore action

我需要制作一个模块,以便在客户线程关闭时发送电子邮件。为此,我考虑在更新客户线程时使用钩子,然后检查状态并执行所需的操作


使用,我找到了
actionObjectCustomerThreadAddAfter
。我想知道当我关闭或更新线程时是否有类似的钩子。到目前为止,我在中找到的唯一钩子列表,但即使是我找到的这个钩子也不存在。

对于扩展
ObjectModel
并使用其
add()
update()
delete()
方法的每个类,您都可以使用以下钩子

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()
方法才能添加代码。

谢谢,这是一个非常有用的信息!一旦我实现了,我会给出反馈,并将答案标记为正确。我补充道,看起来代码没有达到。我在钩子表中看到钩子,但当我转到管理钩子部分时,我在那里看不到它。我做错了什么?@AndréLuiz您是否勾选了“显示不可定位挂钩”?另外,请确保您在模块的安装方法中注册了这些钩子。您是对的,它出现在那里,但似乎没有执行,我正在调查。函数:public function hookActionObjectCustomerThreadUpdateAfter($params){open(“/Users/andredx/Projects/testfile.txt”,“w”);}@AndréLuiz很遗憾,您将无法使用钩子更新客户线程状态。我在经过编辑的答案中解释了这一点。