Configurar código de controlador común en OpenCart

Si se ha topado con el desarrollo de módulos en OpenCart, es posible que haya enfrentado la situación en la que ha declarado un par de elementos comunes en todos y cada uno de los controladores. ¿No crees que sería bueno si pudieras declarar el código común en alguna parte y se recoja según sea necesario? En este artículo, vamos a discutir cómo configurar un código de controlador común y usarlo en todos los módulos..

Para aquellos que están familiarizados con el desarrollo de módulos en OpenCart, es una rutina configurar los elementos comunes como las columnas de encabezado, pie de página y barra lateral en el método de índice de la clase del controlador. Aunque hay diferentes maneras de centralizar el código común, veremos una Forma OpenCart para lograr esto!

Supongo que está utilizando la última versión de OpenCart y está familiarizado con el proceso de desarrollo del módulo, ya que nos concentraremos más en el concepto en lugar de discutir el código básico.

Configurar el código del controlador común

Sigue adelante y crea el catálogo / controlador / preactiondemo directorio. Crear un archivo common.php bajo ese directorio con los siguientes contenidos.

load-> controller ('common / header'); $ data ['footer'] = $ this-> load-> controller ('common / footer'); $ data ['preaction_text'] = "He sido configurado por el método 'setup' del archivo del controlador 'común'."; $ args ['controlador'] -> $ args ['método'] ($ datos, FALSO); 

¡Bastante fácil y sencillo de entender! Solo inicializa un par de variables en el $ datos matriz, excepto la última línea de la preparar método. Volveremos a eso más tarde, ya que revelará el secreto de la $ args formación.

Entender el proceso de envío

Antes de crear otro código, le daré una explicación rápida de cómo funciona el envío en OpenCart.

Cada vez que el usuario accede a cualquier URL en OpenCart, el correspondiente acción objeto se crea una instancia basada en la ruta variable de cadena de consulta. Aquí está el fragmento de index.php.

// Router if (isset ($ request-> get ['route'])) $ action = new Action ($ request-> get ['route']);  else $ action = new Action ('common / home'); 

Y después de eso, la envío método se llama.

$ controller-> dispatch ($ action, new Action ('error / not_found'));

Llamará al envío Método definido en el archivo ubicado en sistema / motor / front.php. En ese método, encontrará un fragmento que ejecuta el bucle while hasta que obtiene el $ acción valor establecido en falso.

while ($ action) $ action = $ this-> execute ($ action); 

Como puede ver, llamará al método de ejecución definido en el mismo archivo hasta que $ acción evalúa a falso. Esto significa que si el método del controlador devuelve un objeto de acción, OpenCart ejecutará esa acción antes de continuar. Podríamos aprovechar esto y llamar a la otra acción desde dentro de la acción misma. Veamos como lograr eso.!

Llame al controlador común y ver la configuración

Ahora, vamos a crear una preaction_demo.php archivo bajo el preactiondemo Directorio con los siguientes contenidos..

 $ esto, 'método' => 'índice'));  if (file_exists (DIR_TEMPLATE. $ this-> config-> get ('config_template'). '/template/preactiondemo/preaction_demo.tpl')) $ this-> response-> setOutput ($ this-> load-> view ($ this-> config-> get ('config_template'). '/template/preactiondemo/preaction_demo.tpl', $ data));  else $ this-> response-> setOutput ($ this-> load-> view ('default / template / preactiondemo / preaction_demo.tpl', $ data)); 

Si $ bandera es cierto, devolveremos la instancia de la clase de acción y, como acabamos de ver, si el proceso de envío recibe un objeto de acción, continuará con esa acción. Así que en este caso, se llamará al preparar método de la común controlador. Recordar el common.php archivo que creamos en la sección anterior.

Lo importante a tener en cuenta es que estamos pasando array ('controller' => $ this, 'method' => 'index') como un argumento, que finalmente se pasará al primer argumento de la preparar método en el común controlador. Nos ayudará a volver al índice método de la preaction_demo Controlador después de la inicialización de variables..

Además, en el preparar Método, hemos definido algunas variables comunes como encabezado, pie de página, etc. Y, finalmente, estamos transfiriendo el control al controlador original desde donde preparar Método fue llamado usando la siguiente declaración.

$ args ['controlador'] -> $ args ['método'] ($ datos, FALSO);

Por supuesto, necesitamos pasar las variables inicializadas en el preparar método a través de $ datos al controlador original para que pueda ser utilizado allí, que es el propósito principal de este artículo. Se pasa como el primer argumento de la llamada al método anterior. El segundo argumento es muy importante ya que se inicializará al $ bandera variable. Estamos haciendo esto deliberadamente para evitar infinitos bucles..

Finalmente, avancemos y configuremos nuestro archivo de vista en catalog / view / theme / default / template / preactiondemo / preaction_demo.tpl con el siguiente código.

 

Ahora que hemos terminado con la configuración, adelante, abra la URL http: //youropencartstoreurl/index.php? Route = preactiondemo / preaction_demo en su navegador. Deberías ver el mensaje "He sido configurado por el método de 'configuración' del archivo de controlador 'común'". en esa pagina!

Entonces, de esta manera, podría configurar el código común en un lugar y llamar a esa acción desde los otros controladores. Ciertamente, evitará la duplicación de código, y es más fácil cambiar el código que es común en todos los módulos.

Conclusión

Hoy, has aprendido un buen truco en OpenCart: ¡cómo llamar a una acción desde dentro de la acción! Por supuesto, hay otras formas de lograrlo, pero es algo que tengo en mente últimamente y pensé que debería compartirlo con usted y recibir sus comentarios.!