Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Code
  2. OpenCart
Code

Controladores Personalizados en OpenCart 2

by
Difficulty:BeginnerLength:MediumLanguages:

Spanish (Español) translation by Rafael Chavarría (you can also view the original English article)

El día de hoy, iremos a través del concepto de controladores en OpenCart 2.x. Con la liberación de la versión OpenCart 2x, ellos introdujeron cambios de framework que requieren una actualización si ya hiciste cualquier módulo personalizado en la versión anterior---OpenCart 1.x. Iremos a través de ejemplos prácticos de lo que llamaremos Libro de Visitas en este tutorial.

Antes de que continuemos en este artículo, podrías considerar esto como un seguimiento a lo que escribí antes. En este artículo, expliqué como hacer una página personalizada en OpenCart 1.x, y si ya seguiste ese artículo, ¡podrías saltar rápidamente la mayoría de las secciones hoy!

Por supuesto, es OpenCart 2.x el que será discutido hoy, así que asegúrate de que sigues el código de cerca.

Si quisieras ver más teoría sobre el patrón y controladores del framework OpenCart, podría ir a través de un par de las secciones iniciales de ese artículo. Habiendo dicho eso, no hay nada que te detenga de seguir este artículo inmediatamente, ya que no me saltaré nada esencial.

¿Por Qué un Controlador Personalizado?

Algo que podrías estar preguntando en primer lugar---¿por qué un controlador personalizado? Entendamos rápidamente de lo que trata el controlador en OpenCart antes de adentrarnos en esto.

En el contexto de OpenCart, el controlador es un componente indispensable del framework que lidia directamente con el proceso de ruteo y generaciones de UI. En el proceso, este lidia con otros componentes importantes como lenguaje, modelo y vista para construir el resultado final.

Cuando accedes a cualquier página en OpenCart, el framework OpenCart busca el controlador correspondiente y delega procesamiento futuro a este. Siendo modular por naturaleza, el framework OpenCart proporciona varios controladores que lidian con funcionalidades lógicamente agrupadas.

Por ejemplo, el grupo cuenta contiene todos los controladores que lidian con login, registro, perfil, y casos de uso similares. De manera similar, el grupo checkout de controladores maneja el proceso de creación de orden.

En resumen, cuando quieres crear una característica que no está en el núcleo de OpenCart y si toma una nueva URL---una ruta en la terminología de OpenCart---deberías usar un controlador personalizado. Este te da control completo del proceso de creación de página---qué elementos quieres mostrar en tu página personalizada.

Crea un Controlador Personalizado

Hoy, implementaremos una funcionalidad básica de Libro de Visitas que demuestra el concepto de controladores personalizados. En el curso de hacer esto, construiremos una interfaz en el front-end que permita que usuarios invitados envíen su retroalimentación ingresando su nombre y mensaje.

Antes de proceder, asegúrate de que tienes una instalación funcional de OpenCart 2.3.x. Y eso es prácticamente todo para comenzar a trabajar en nuestra característica de Libro de Visitas.

Para aquellos que no están familiarizados con la estructura de OpenCart, el lugar para buscar los controladores front-end es catalog/controller. Es el directorio que administra todos los controladores por grupo, basado en las características que proporcionan.

En nuestro caso, crearemos un grupo separada llamado guestbook. Continua y crea un directorio catalog/controller/guestbook. Dentro de ese directorio, crea un archivo entry.php con los siguientes contenidos. Es un archivo controlador que maneja la lógica de aplicación y lógica de envío de nuestra funcionalidad de Libro de Visitas.

De acuerdo a las convenciones para nombrar de OpenCart, el nombre de la clase comienza con la palabra clave Controller seguida por el nombre de directorio, Guestbook en nuestro caso, en el cuál reside el archivo de la clase. Además, el nombre del archivo de la clase, Entry es nuestro caso, es agregado al final.

Cada clase de controlador proporciona un método index de facto que maneja la mayoría de la lógica del controlador. Después, iremos a través del código en el método index, y también crearemos otros archivos según sea necesario.

La mayoría del tiempo, comenzamos incluyendo el archivo de lenguaje para el grupo específico. Es la manera en que OpenCart administra etiquetas estáticas de lenguaje a lo largo de la aplicación. Por supuesto, esto hace muy fácil la implementación de sitios multi-lenguaje.

Antes de continuar, creemos el archivo correspondiente de lenguaje para que nuestro controlador pueda encontrarlo. Crea un archivo catalog/language/en-gb/guestbook/guestbook.php con los siguientes contenidos.

Como puedes ver, solo estamos asignando etiquetas con sus valores en el arreglo de lenguaje.

De vuelta a nuestro controlador, lo siguiente es configurar la etiqueta HTML de título para nuestra página.

Los usuarios con ojos afilados habrán notado que hemos usado la variable de lenguaje heading_title definida en el archivo de lenguaje creada hace un momento.

Para poder entender el siguiente pedazo de código, necesitamos crear un archivo modelo. Así que por un momento, Te desviaré a crear el archivo modelo en catalog/model/guestbook/guestbook.php con los siguientes contenidos.

En OpenCart, el modelo es responsable de manejar la lógica de negocios de la aplicación. Si quisieras implementar cualquier lógica que involucre una base de datos, este es el lugar en el que iría.

La convención de nombrado de la clase modelo es similar a la de la clase controlador. Para mantener simples las cosas, hemos implementado un método processGuestbookEntry que notifica al admin de la tienda vía email cuando un usuario envía una entrada de Libro de Visitas. Bastante simple, ¿no?

Regresemos a nuestro controlador, y examinemos el siguiente pedazo de código en la cola.

Este busca una petición POST válida y hace validación básica de la información enviada por el usuario llamando al método validate.

El código $this->load->model('guestbook/guestbook') es usado para cargar el modelo que definimos hace un momento. Inmediatamente después de eso, preparamos el arreglo $data basado en la entrada del usuario y llamamos al método processGuestbookEntry, que notifica al admin de la tienda sobre una entrada al Libro de Visitas. Finalmente, redireccionamos al usuario de vuelta a la página de inicio del Libro de Visitas.

Continuando con el controlador, el siguiente pedazo de código establece el mensaje de éxito que será mostrado después del envío del formulario.

Siguiendo eso, aquí hay un pedazo de código que es usado para construir enlaces breadcrumb para la página.

El siguiente código es uno importante, y es algo que usarás la mayoría del tiempo para pasar información del método del controlador a la plantilla de la vista.

Similar a asignar variables, OpenCart inicializa elementos comunes de la página---header, footer y similares---como se muestra en el siguiente código.

Finalmente, ¡llama a la plantilla de vista para generar la página!

Por supuesto, no hemos construido una plantilla de vista aún. ¡Es el momento perfecto para hacer eso! Continua y crea un archivo catalog/view/theme/default/template/guestbook/entry.tpl con el siguiente contenido.

Este es nuestro archivo de plantilla de vista principal que es responsable de mostrar el contenido de nuestra página de Libro de Visitas. En este archivo, acabamos de usar las variables que serán establecidas en el método index del controlador.

Es importante notar que lo responsivo es algo que viene integrado con las versiones recientes de OpenCart soportadas por el framework Bootstrap. Fuera de eso, son cosas HTML bastante regulares que son fáciles de entender.

Así que, hasta ahí llega el archivo de configuración.

Tenemos todo en lugar ahora, ¿pero cómo accederías a eso desde el front-end?

En el front-end, puedes acceder a la página de Libro de Visitas agregando la variable de ruta querystring, así que la URL debería ser algo como http://your-opencart-store-url/index.php?route=guestbook/entry.

Entendamos cómo OpenCart mapea cualquier URL para el archivo específico de controlador. El formato de la variable de ruta es {directory}/{filename}/{methodname}.

  • El componente {directory} mapea al directorio bajo catalog/controller.
  • El {filename} mapea al nombre del archivo de controlador bajo catalog/controller/{directory}.
  • Finalmente, buscará al método de controlador llamado {methodname} si es especificado en la ruta, de otro modo, llamará al método index por defecto.

Aquí está como luce el resultado final.

Guestbook Page

Por supuesto, podrías continuar y probarlo enviando el formulario, y deberías recibir una notificación de email a la dirección de correo que está registrada como admin de la tienda.

Conclusión

En cualquier framework, siempre es emocionante ir e implementar tu propia funcionalidad personalizada. Ese fue exactamente el tema del tutorial de hoy, en el cuál extendimos OpenCart y desarrollamos controladores personalizados construyendo una funcionalidad bastante simple pero útil de Libro de Visitas.

En el proceso, nos dimos cuenta de que no solo se trata de los controladores---hubo otros cuantos elementos clave que fueron inevitables. Así que terminamos introduciendo esos también: Modelo, Lenguaje, y Vista.

Al final, fue agradable ver trabajando el caso de uso de lo que prometí al inicio del artículo. Así, eso es todo por hoy, y no dudes en dejar tus consultas y comentarios. También, ¡me encantaría escuchar de ti si hay algún tema en particular que quisieras que tocara en mi siguiente artículo!

Como siempre, si estás buscando herramientas OpenCart adicionales, utilidades, extensiones y así por el estilo que puedas aprovechar para tus propios proyectos o para tu propia educación, no olvides ver lo que tenemos disponible en el marketplace.

Si disfrutaste este artículo, ¡tengo unos cuantos más solo en caso de que quisieras verlos!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.