обработка событий Opencart-3: AddCustomer EditCustomer - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь обработать события в Opencart-3 для перемещения данных в локальную систему ERP. Я создал расширение, которое содержит все события, которые мне нужно обработать. Моя проблема в том, что только события, относящиеся к продуктам, запускаются, а остальные не запускаются.

<?php

class ControllerExtensionModuleErpIntegration extends Controller {
    private $error = array();

    public function index() {}

    public function validate() {}

    public function install() {
        $this->load->model('setting/event');
        $this->model_setting_event->addEvent('product_notification_add', 'admin/model/catalog/product/addProduct/after', 'extension/module/erp_integration/addProduct');
        $this->model_setting_event->addEvent('product_notification_update', 'admin/model/catalog/product/editProduct/after', 'extension/module/erp_integration/editProduct');

        $this->model_setting_event->addEvent('customer_notification_add', 'catalog/model/account/customer/addCustomer/after', 'extension/module/erp_integration/addCustomer');
        $this->model_setting_event->addEvent('customer_notification_update', 'catalog/model/account/customer/editCustomer/after', 'extension/module/erp_integration/editCustomer');

        $this->model_setting_event->addEvent('order_notification_add', 'catalog/model/checkout/order/addOrder/after', 'extension/module/erp_integration/addOrder');
    }

    public function uninstall() {
        $this->load->model('setting/event');
        $this->model_setting_event->deleteEventByCode('product_notification_add');
        $this->model_setting_event->deleteEventByCode('product_notification_update');
        $this->model_setting_event->deleteEventByCode('customer_notification_add');
        $this->model_setting_event->deleteEventByCode('customer_notification_update');
        $this->model_setting_event->deleteEventByCode('order_notification_add');
    }

    // admin/model/catalog/product/addProduct/after
    public function addProduct(&$route, &$args, &$output)  {
        file_put_contents ( "testing.txt","\n******ADD PRODUCT**********\n" ,FILE_APPEND );
        file_put_contents ( "testing.txt",print_r($args,true) . print_r($output,true) ,FILE_APPEND );
    }

    // admin/model/catalog/product/editProduct/after
    public function editProduct(&$route, &$args, &$output)  {
        file_put_contents ( "testing.txt","\n******EDIT PRODUCT**********\n" ,FILE_APPEND );
        file_put_contents ( "testing.txt",print_r($args,true) . print_r($output,true) ,FILE_APPEND );
    }

    // catalog/model/account/customer/addCustomer/after
    public function addCustomer(&$route, &$args, &$output)  {
        file_put_contents ( "testing.txt","\n******ADD CUSTOMER**********\n" ,FILE_APPEND );
        file_put_contents ( "testing.txt",print_r($args,true) . print_r($output,true) ,FILE_APPEND );
    }

    // catalog/model/account/customer/editCustomer/after
    public function editCustomer(&$route, &$args, &$output)  {
        file_put_contents ( "testing.txt","\n******EDIT CUSTOMER**********\n" ,FILE_APPEND );
        file_put_contents ( "testing.txt",print_r($args,true) . print_r($output,true) ,FILE_APPEND );
    }

    // catalog/model/checkout/order/addOrder/after
    public function addOrder(&$route, &$args, &$output)  {
        file_put_contents ( "testing.txt","\n******ADD ORDER**********\n" ,FILE_APPEND );
        file_put_contents ( "testing.txt",print_r($args,true) . print_r($output,true) ,FILE_APPEND );
    }
}

Нужно ли создавать новое расширение для раздела Каталог (события клиента и продукта) и регистрировать их в другом расширении? Или что мне не хватает.

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

Для событий, которые относятся к каталогу в вашем случае, вы должны создать файл в этой папке. catalog/controller/extension/module с именем erp_integration.php с содержанием:

<?php

class ControllerExtensionModuleErpIntegration extends Controller {
    private $error = array();
    // catalog/model/account/customer/addCustomer/after
    public function addCustomer(&$route, &$args, &$output)  {
        file_put_contents ( "testing.txt","\n******ADD CUSTOMER**********\n" ,FILE_APPEND );
        file_put_contents ( "testing.txt",print_r($args,true) . print_r($output,true) ,FILE_APPEND );
    }

    // catalog/model/account/customer/editCustomer/after
    public function editCustomer(&$route, &$args, &$output)  {
        //print_r($route); die;
        file_put_contents ( "testing.txt","\n******EDIT CUSTOMER**********\n" ,FILE_APPEND );
        file_put_contents ( "testing.txt",print_r($args,true) . print_r($output,true) ,FILE_APPEND );
    }

    // catalog/model/checkout/order/addOrder/after
    public function addOrder(&$route, &$args, &$output)  {
        file_put_contents ( "testing.txt","\n******ADD ORDER**********\n" ,FILE_APPEND );
        file_put_contents ( "testing.txt",print_r($args,true) . print_r($output,true) ,FILE_APPEND );
    }
}

А ваш файл testing.txt вы можете найти в root установки O C

1 голос
/ 28 апреля 2020

Да, для событий каталога, вы должны создать новый файл в папке каталога.

В вашем коде есть другая ошибка (она не связана с этим вопросом):

Вместо использования разных имен для каждого события используйте имя вашего добавочного номера:

$this->model_setting_event->addEvent('erp_integration', ...
$this->model_setting_event->addEvent('erp_integration', ...

Затем в методе uninstall вам нужно будет использовать deleteEventByCode один раз:

$this->model_setting_event->deleteEventByCode('erp_integration');
...