2017-04-07 75 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