Red de conocimiento informático - Material del sitio web - Cómo utilizar el sistema de eventos OpenCart 2.x

Cómo utilizar el sistema de eventos OpenCart 2.x

OpenCart 2.x incluye muchas características nuevas, una de las cuales es el sistema de eventos especialmente proporcionado para desarrolladores, Event

System. Le permite modificar el código sin modificar el código original del sistema (

Por supuesto, no utiliza vQmod ni el OCMOD agregado en la versión 2.x para modificar el código, a fin de evitar el riesgo de conflictos de código.

), estipula que se activarán acciones específicas cuando se realicen ciertas operaciones específicas. Por ejemplo: cuando un usuario realiza un pedido o se registra, puede utilizar el sistema de eventos para enviar información de notificación en segundo plano.

Principio de uso:

El uso del sistema de eventos requiere dos pasos:

Registrar el controlador de eventos.

Conéctese al controlador de eventos.

Registrar controladores de eventos en el archivo del controlador es muy sencillo. Puedes usar un archivo separado que contenga todos los métodos como controlador de eventos

, o puedes usar un método separado en el controlador. Para registrar controladores de eventos, necesita utilizar el modelo de extensión/evento (OpenCart 2.0.1+) o el modelo de herramienta/evento (OpenCart 2.0.0.0). El modelo de extensión/evento tiene dos métodos:

addEvent($code, $trigger, $action) para registrar eventos y deleteEvent($code)

para eliminar eventos. Puede utilizar addEvent en el método intsall() cuando desarrolle un complemento. Utilice

deleteEvent en el método uninstall() para desinstalar el complemento.

El parámetro $code se utiliza para componer su controlador de eventos.

El parámetro $trigger se utiliza para especificar los parámetros de acción al activar. Hay muchos parámetros de activación predeterminados del sistema opencart: /opencart/opencart/wiki/Events-(script-notifications).

El parámetro $action se utiliza para localizar su controlador de eventos. Generalmente es un conjunto estándar de rutas de controlador, como: module/mymodule/on_user_created.

Ejemplo

Entorno: opencart 2.0.1+.

Supongamos que queremos desarrollar un módulo llamado “Mi Módulo”.

Controlador backend: admin/controller/module/mymodule.php .

Archivo front-end: catalog/controller/module/mymodule.php .

Requisitos : Cuando un usuario se registra o elimina una tienda, se envía un correo electrónico al administrador del sitio web. Podemos definir los parámetros activados como pre.admin.store.delete y post.customer.add.

Primero podemos usar el método install() en nuestro módulo:

función pública install() {

$this->load->model( ' extensión/evento');

$this->model_extension_event->addEvent('mymodule', 'pre.admin.store.delete', 'module/mymodule/on_store_delete');

$this->model_extension_event->addEvent('mymodule', 'post.customer.add', 'module/mymodule/on_customer_add');

}

Desinstalar módulo El método de proceso de desinstalación es el siguiente:

función pública install() {

$this->load->model('extension/event');

$ this->model_extension_event->addEvent('mymodule', 'pre.admin.store.delete', 'module/mymodule/on_store_delete');

$this->model_extension_event->addEvent(' mymodule' , 'post.customer.add', 'module/mymodule/on_customer_add');

}

A continuación accedemos al controlador de eventos. `pre.admin.store.delete`

Maneja eventos en segundo plano, por lo que su procesador debe estar conectado al archivo del controlador en admin/. Cuando se elimina la tienda, necesitamos un método de controlador para enviar una notificación al administrador de backend. Los eventos que comienzan con pre

se activan antes de que se ejecute el método del controlador y los eventos que comienzan con post

se activan después de que se ejecuta el método del controlador. Al mismo tiempo, también queremos incluir el nombre de dominio de la dirección de la tienda en nuestra información. Si eliminamos la tienda primero, no podremos obtener el nombre de dominio de la tienda eliminada

.

Manejador de eventos:

función pública on_store_delete($store_id) {

$this->load->model('setting/store');

p>

$store_info = $this->model_setting_store->getStore($store_id);

$admin_mail = $this->config->get('config_email');

mail($admin_mail, "Se ha eliminado una tienda", "La tienda " . $store_info['url'] . " fue eliminada.");

}

post.customer.add necesita escribir el controlador de eventos en el catálogo del controlador frontal. Cuando un nuevo usuario se registra, se notifica al administrador del backend.

Un método similar es el siguiente:

función pública on_customer_add($customer_id) {

$this->load->model('account/customer');

$customer_info = $this->model_account_customer->getCustomer($customer_id);

$admin_mail = $this->config->get('config_email');

correo ($ admin_mail, "Nuevo Cliente", "Un nuevo cliente acaba de

registrarse con el siguiente correo electrónico: " . $customer_info['email']);

}

Nota: Cuando usamos la función mail() para enviar correos electrónicos, es posible que necesitemos usar la clase Mail de OpenCart para enviar correos electrónicos.

El código final es el siguiente:

admin/controller/module/mymodule.php

clase ControllerModuleMyModule extends Controlador

{

instalación de función pública() {

$this->load->model('extensión/evento');

$this->model_extension_event->addEvent('mymodule', 'pre.admin.store.delete', 'module/mymodule/on_store_delete');

$this->model_extension_event->addEvent( 'mymodule ', 'post.customer.add', 'module/mymodule/on_customer_add');

}

función pública uninstall() {

$ this- >cargar->model('extensión/evento');

$this->model_extension_event->deleteEvent('mimódulo');

}

función pública on_store_delete($store_id) {

$this->load->model('setting/store');

$store_info = $this->model_setting_store->getStore ($ store_id);

$admin_mail = $this->config->get('config_email');

mail($admin_mail, "Se ha eliminado una tienda", " La tienda " . $store_info['url'] . " fue eliminada.");

}

}

catalog/controller/module/mymodule. php

clase ControllerModuleMyModule extiende el controlador {

función pública on_customer_add($customer_id) {

$this->load -> model('cuenta/cliente');

$customer_info = $this->model_account_customer->getCustomer($customer_id);

$admin_mail = $this->config- >get ('config_email');

mail($admin_mail, "Nuevo cliente", "Un nuevo cliente acaba de

registrado con el siguiente correo electrónico: " . $customer_info['email']);

}

}

Avanzado

Además del uso estándar anterior, el sistema de eventos también se puede utilizar para crear interfaces entre módulos. Usando el objeto Event

($this->event), puede activar cualquier evento en cualquier lugar. Puede usarlo para activar sus propios eventos personalizados. Imagine que está desarrollando un módulo de comentarios de usuario. Puede activar un evento cuando un cliente envía un comentario, lo que permite a otros desarrolladores de módulos hacerlo por usted. procesar sin usar vQmod u OCMOD para modificar el código puede garantizar que Opencart se vuelva más estable

PD: clase de evento definida en el archivo system/engine/event.php.