BIBLIOTECA DE CONCEPTOS
Esta referencia me ha servido de mucho a mi, así que la dejare publica para que puedas utilizarla, es una biblioteca de conceptos que en algún momento podrías llegara a utilizar te permite familiarizarte con una gran variedad de conceptos tecnológicos que tienen que ver en algún punto con MAGENTO.
PHP 7
PHP 7 al día de hoy 20-Febreo-2020 es la última versión de la pila de tecnologías de PHP, se conoce como (PHP NG) PHP de siguiente generación, se dice que su velocidad ha sido mejorada en cuanto a su anterior versión 5 en tres veces más rápidos los tiempos de respuesta, utilizando menos memoria y muchas de las funciones de PHP 5 son compatibles con la versión 7 así que una actualización de PHP 5 a 7 debería ser casi transparente.
¿Que es composer y composer.json ?
Composer es un administrador de paquetes para PHP que proporciona una formato estándar para administrar dependencias y manejar procesos de instalación complejos, esto quiere decir que será una ayuda para nosotros los desarrolladores y si un componente o modulo requiere de librerías externas de conocer las versiones que se manejan en los módulos desarrollados estas puedas ser definidas en archivos JSON con la definición que tiene composer y estos con unos simples comandos nos permitirán por un lado exportar nuestros componentes sin la carga de archivos que dependen de su funcionamiento y por otro lado cuando importemos un módulo o componente el archivo JSON ejecutando un simple comando de composer nos permitirá conectarse a los distintos repositorios para bajarlos y ponerlos a disposición de nuestro modulo o componente sin tener que preocuparnos como desarrolladores por esas dependencias.
Composer es un administrador de paquetes para PHP que proporciona un formato estándar para administrar dependencias y manejar procesos de instalación complejos completos. Magento 2 decidió basar todo el desarrollo de la plataforma en Composer porque es muy potente, de código abierto y puede gestionar la carga automática para bibliotecas y código de terceros (como nuestra extensión).
composer.json
{ "name": "marcgento/miprimermodulo", "description": "Mi primer modulo como ejemplo", "type": "magento2-module", "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "require": { "magento/magento-composer-installer": "*", "magento/catalog": "*" }, "extra": { "map": [ [ "*", "Marcgento/Miprimermodulo" ] ] }, "authors": [ { "name": "Marcgento", "homepage": "http://www.marcgento.com/", "role": "Developer" } ] }
Packagist
Packagist es el el repositorio oficial para composer, para ser más claros es el sitio oficial en donde se cargaran los paquetes que se utilizan directamente desde composer, el repositorio de las librerías que manejan la sincronización de descarga al ejecutar los comando desde la terminal, si necesitamos que un módulo componente o pieza de código tenga que ser instalada mediante composer este es el sitio oficial en donde necesitamos cargar nuestro paquete para que sea público por la comunidad y descargado directamente desde la herramienta, si publicar nuestros paquetes es necesario crear una cuenta en https://packagist.org/.
¿Que es Namespace?
Esta definición es muy sonada en este mundo del desarrollo con Magento y algunas otras plataformas de CMS, claro está solo me referiré a este concepto hablando por Magento, Namespace o espacio de nombre es la descripción con la cual se debe nombrar a la carpeta principal en donde se colocaran todos los módulos que un equipo de desarrollo tenga que crear en un proyecto de Magento, para ser más exactos es el nombre de carpeta que se genera a continuación de app/code/, dentro de este directorio pueden aparecer cualquier número de carpetas cada una representara un Namespace, se dice que cada Namespace debería representar el nombre o definición de la empresa que está desarrollando módulos personalizados, esto es importante porque puede ser la forma más ordenada de trabajar en un proyecto multi empresarial, en donde distintas empresa aportan sus propios componentes.
Por poner un ejemplo supongamos que mi empresa se llama Marcgento pues bien voy a crear una carpeta con ese nombre en la ubicación app/code/Marcgento, y aquí solo hay un par de cosa que tomar en cuenta.
- Es importante por buenas prácticas colocar la primera letra de mi Namespace con letra mayúscula.
- Es recomendable que el nombre sea corto y claro.
- Si el nombre fuese muy largo sería recomendable utilizar CamelCase, mayúsculas minúsculas, por ejemplo si mi empresa seria Marcgento especializas en Magento podría ser MacrgentoEspecialistasMagento por ejemplo pero no sería algo común.
- Todos los módulos que se creen con mi empresa Marcgento irán metidos dentro de la carpeta Marcgento.
¿Modulo o Extensión y que es?
Como quiera que se le nombre, al final representan un componente de Magento que permite ampliar la funcionalidad nativa de Magento dentro de una estructura de carpetas y archivos que en conjunto forma una pieza de código bien definida, la ruta donde debe colocarse este conjunto de carpetas es en el espacio de nombre o Namespace creado para almacenar todos los componentes de una empresa de desarrollo, por ejemplo si el espacio de nombre de nuestra empresa es Marcgento y se desarrolla un módulo personalizado llamado Miprimermodulo se encontraría en app/code/Marcgento/Miprimermodulo aquí es donde se colocaría la carpeta del módulo.
Revisa el articulo completo de creación de un Módulo básico en: Creando un Módulo básico en Magento 2
Estructura de un modulo
La estructura principal de un módulo está compuesta por una carpeta y dos archivos, un módulo valido y existente en Magento solo requiere de estos 2 archivos dentro de esta estructura, suponiendo que tenemos un espacio de nombre llamado Marcgento y un Módulo que llamaremos Miprimermodulo:
- app/code/Marcgento/Miprimermodulo
- app/code/Marcgento/Miprimermodulo/etc/module.xml
- app/code/Marcgento/Miprimermodulo/registration.php
module.xml
registration.php
Revisa el articulo completo de creación de un Módulo básico en: Creando un Módulo básico en Magento 2
menu.xml
Este archivo de tipo XML representa una configuración para los módulos de BackEnd que permiten crear una nueva opción en el menú nativo de Magento, para mostrar un ejemplo si se tiene un espacio de nombre Marcgento en un módulo Miprimermodulo, para agregar una nueva opción en el menú nativo de Magento en la opción CONTENT se representaría de la siguiente forma:
routes.xml
Este archivo de configuración permite define la URL que resolverá la página de un módulo personalizado, esto es necesario cuando se requiere crear una página personalizada en Magento el atributo frontName es donde se definiría el nombre de la misma suponiendo que se tiene el sitio web http://www.marcgento.com/ y requerimos que el componente resuelva la página test.php el frontName se definirá como frontName=”test” así es como se puede definir el nombre posterior ya se podría vincular con el Controlador principal y método al que corresponde.
Más información de cómo desarrollar un ruteador en Magento en Layout y Templates en un módulo de Magento 2