Comprender los objetos de registro y cargador en OpenCart

Introducción

OpenCart se ha convertido en un marco de comercio electrónico muy útil para tiendas en línea de nivel pequeño a mediano. Aunque proporciona características integrales en su pila, mantiene un marco simple, con una arquitectura modular agradable que se puede ampliar. En este artículo, nos centraremos en ciertos elementos del proceso de arranque.

Aunque hay muchos componentes involucrados en el proceso típico de arranque, nos centraremos en los objetos "Registro" y "Cargador" para el curso de este tutorial. Los fragmentos de código explicados en este artículo pertenecen a OpenCart versión 2.0.x. Aunque el código de clase "Registro" es el mismo en las versiones 1.5.xy 2.0.x, el código de clase "Cargador" ha cambiado mucho. Así que nos centraremos en la versión 2.0.x de OpenCart.

El objeto de registro

Como su nombre indica, el objeto "Registro" se utiliza para almacenar elementos, desde variables simples hasta objetos complejos, cuando se llama al método "conjunto". Almacena todos los elementos usando "clave", de modo que más adelante se puede acceder fácilmente cuando se llama al método "obtener". 

Echemos un vistazo más de cerca al archivo de clase en sí. Abra el archivo ubicado en "system / engine / registry.php" en su editor de texto favorito!

datos [$ clave])? $ this-> data [$ key]: null);  conjunto de funciones públicas ($ clave, $ valor) $ esto-> datos [$ clave] = $ valor;  la función pública tiene ($ clave) return isset ($ this-> data [$ clave]); 

Como puede ver, la definición de clase es bastante simple de entender. Almacena todo en la propiedad "datos" del objeto, que se declara como una matriz, y el alcance es privado. En el método "obtener", verifica si "valor" está disponible para la "clave" deseada, y devuelve el valor si está disponible, y "nulo" de lo contrario. En el método "conjunto", inserta el nuevo elemento en la matriz "datos" utilizando los argumentos pasados ​​al método. Finalmente, proporciona el método "tiene" para verificar si una cierta "clave" ya está establecida en la matriz de "datos".

Ahora, veamos cómo el marco OpenCart usa el objeto de registro durante la fase inicial de la ejecución de la página. Abra el archivo "index.php" en la raíz del documento de OpenCart. Verás el $ registro El objeto es creado muy temprano en la ejecución del script..

// Registry $ registry = new Registry ();

Después de la creación de la $ registro objeto, almacena varios otros objetos utilizando el método "set". Veamos un par de ejemplos..

set ('load', $ loader); // Config $ config = new Config (); $ registry -> set ('config', $ config); // Base de datos $ db = nueva DB (DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE); $ registry -> set ('db', $ db); // Request $ request = new Request (); $ registry -> set ('request', $ request); // Session $ session = new Session (); $ registry -> set ('session', $ session);

He enumerado aquí algunos ejemplos de usos de la $ registro objeto. Como habrá notado, los objetos de uso frecuente se crean y almacenan en el registro. La razón es que no tiene que crear instancias de objetos de clase comunes varias veces, por lo que simplemente podría llamar al método "obtener" de la $ registro Objeto para usar el objeto deseado. El enfoque es algo similar al "Patrón Singleton", en el que te ves obligado a mantener una sola instancia de la clase.

Ahora el $ registro objeto se rellena con cosas útiles, pero ¿cómo se utiliza? Veamos como el $ db objeto almacenado en el $ registro se utiliza en el modelo de "Actividad" del módulo "Cuenta". Abra el archivo ubicado en "catalog / model / account / activity.php". Puede ver que en el método "addActivity", se activa una consulta de inserción.

$ this-> db-> query ("INSERT INTO '". DB_PREFIX. "customer_activity' SET 'customer_id' = '". (int) $ customer_id. "', 'key' = '". $ this-> db- > escape ($ key). "',' data '='". $ this-> db-> escape (serialize ($ data)). "',' ip '='". $ this-> db-> escape ($ this-> request-> server ['REMOTE_ADDR']). "',' date_added '= NOW ()");

Puede preguntarse cómo se llama, ya que no hay ningún método o propiedad "db" definido en la clase "ModelAccountActivity". Puede ir a la clase de modelo principal "Modelo" para ver si está definida allí o no. Sí, tampoco encontrarás un método o propiedad "db" en esa clase. Pero si te fijas bien en la clase "Modelo", verás que implementa los métodos mágicos, específicamente el método "__get" en este caso.

función pública __get ($ clave) return $ this-> registry-> get ($ clave); 

Por ahora, supongamos que la $ registro El objeto se almacena en la propiedad "registro" protegida de la clase "Modelo". Veremos cómo se almacena cuando se crea una instancia de "Modelo" en la clase "Cargador". 

los __obtener Se llama al método cuando se llama a cualquier método que no esté definido en la clase. En este método, "db" se pasa como argumento cuando intentamos llamar $ esto -> db en el archivo "activity.php". Y como se discutió anteriormente, $ registro tiene todos los objetos de utilidad ya almacenados durante el proceso de arranque. Así que solo necesitamos buscar el objeto "db" usando la clave llamando al método "get" del objeto "Registry"!

Del mismo modo, $ esto -> cargar funciona desde los archivos del controlador también. Así que, en general, el "Registro" es un componente realmente útil del marco de trabajo de OpenCart que almacena variables y objetos de uso común, que se utilizan durante la ejecución del script.

El objeto cargador

El objeto "Loader" se usa para cargar los diferentes componentes de OpenCart según sea necesario, como el modelo, el controlador, el idioma, la vista, la biblioteca, etc. Es importante tener en cuenta que cuando se crea el objeto "Loader", se almacena en el $ registro objeto con "carga" como una clave de matriz. Para que pueda acceder a la $ cargador objeto utilizando un $ esto -> cargar llame como se explica en la sección anterior.

// instanciación del cargador $ loader = new Loader ($ registry); $ registry -> set ('load', $ loader);

Ahora, veamos cómo se cargan los diferentes componentes usando el "Cargador". Abra "system / engine / loader.php" para ver la definición de una clase de "Loader". Comenzaremos con el método del "controlador" para entender cómo funciona.

// carga el controlador $ this-> load-> controller ('common / column_left');

Es un fragmento de código que carga el controlador "common / column_left.php" y también llama al método "index". Hacemos esta llamada para obtener la salida XHTML de la "Columna Izquierda" de la página OpenCart. los $ esto -> cargar parte funciona de forma similar a la $ esto -> db ejemplo que expliqué anteriormente! Así, devuelve el $ cargador objeto almacenado en el $ registro, y finalmente llamará al método "controlador" de la clase "Cargador"!

Del mismo modo, los siguientes fragmentos de código funcionan para cargar diferentes componentes..

// cargar Modelo $ esto -> cargar -> modelo ('catálogo / categoría'); // cargar Ver $ esto -> cargar -> ver ('predeterminado / plantilla / producto / categoría.tpl', $ datos); // cargar la biblioteca $ esto -> cargar -> biblioteca ('usuario'); // cargar Helper $ this -> load -> helper ('json'); // cargar Idioma $ esto -> cargar -> idioma ('producto / categoría');

Al observar las definiciones de los métodos en la clase "Loader", verá que no es tan complicado entender exactamente cómo funciona. Primero, prepara la "ruta del archivo" para el componente correspondiente, y se incluye con la función "include_once".

En general, "Registry" y "Loader" son dos componentes muy importantes en el marco de OpenCart que hacen las cosas mucho más fáciles para los desarrolladores de módulos..

Conclusión

Así que hoy, nos fijamos en los componentes "Loader" y "Registry" del marco OpenCart. Espero que hayas aprendido algo útil en este tutorial. Y con suerte, se me ocurrirá algo más sobre el mismo tema. Envíe sus consultas y sugerencias utilizando el siguiente feed!