PrestaShop:关闭客户线程

时间:2017-04-07 21:24:40

标签: prestashop prestashop-1.6

当客户线程关闭时,我需要创建一个模块来发送电子邮件。要做到这一点,我想在更新客户线程时使用钩子,然后我可以检查状态并执行我需要的操作。

使用validator.prestashop.com我找到actionObjectCustomerThreadAddAfter。我想知道在关闭或更新Thread时是否存在类似的钩子。我到目前为止在this one找到的唯一钩子列表,但即使是我发现的钩子也不存在。

1 个答案:

答案 0 :(得分:1)

对于扩展ObjectModel并使用其add()update()delete()save()方法的每个类,您都可以使用以下挂钩。< / p>

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