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.
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.
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.!
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.
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.!