¿Cómo se puede lograr lo siguiente en Magento?
Muestre un mensaje de "Hola mundo" utilizando un enfoque de controlador / vista / modelo. Entonces, si
http://example.com/myController
fuera, mostraría la cadena 'Hello World'. Poder mostrar esta cadena dentro de la plantilla de mi sitio web (por ejemplo, el encabezado, el pie de página, etc.) será una ventaja.¿Cómo agrego un método a este controlador (o un nuevo controlador si es necesario), que interactúa con un modelo, realiza la consulta
Select * FROM articles where id='10'
y devuelve la fila (que contiene las columnasid, title, content
) al controlador? Y luego use el controlador para incluir una vista, que mostraría esta fila. Entonces ir ahttp://example.com/myController/show_row
(o algo similar) mostraría la fila dentro de una vista. (No es necesario ser elegante, solo unaecho $row->id;
o algo similar funcionaría).
Cualquier otra información sobre la estructura del código de Magento también será muy útil.
fuente
Respuestas:
En primer lugar, le recomiendo que compre el PDF / E-Book de PHP Architect . Es de US $ 20, pero es el único recurso sencillo "Así es como funciona Magento" que he podido encontrar. También comencé a escribir tutoriales de Magento en mi propio sitio web .
En segundo lugar, si tiene una opción y no es un programador experimentado o no tiene acceso a un programador experimentado (idealmente en PHP y Java), elija otro carrito . Magento está bien diseñado, pero fue diseñado para ser una solución de carrito de compras sobre la cual otros programadores pueden construir módulos. No fue diseñado para ser entendido fácilmente por personas que son inteligentes, pero que no son programadores.
En tercer lugar, Magento MVC es muy diferente de Ruby on Rails , Django , CodeIgniter , modelo MVC de CakePHP , etc. que es popular entre los desarrolladores de PHP en estos días. Creo que está basado en el modelo Zend , y todo es muy similar a OOP de Java. Hay dos controladores de los que debe preocuparse. El controlador del módulo / frontName y luego el controlador MVC.
En cuarto lugar, la aplicación Magento en sí está construida utilizando el mismo sistema de módulos que usará, por lo que hurgar en el código central es una táctica de aprendizaje útil. Además, mucho de lo que harás con Magento es anular las clases existentes. Lo que estoy cubriendo aquí es crear una nueva funcionalidad, no anular. Tenga esto en cuenta cuando vea las muestras de código que existen.
Comenzaré con su primera pregunta, que le mostrará cómo configurar un controlador / enrutador para responder a una URL específica. Esta será una pequeña novela. Es posible que tenga tiempo más tarde para los temas relacionados con el modelo / plantilla, pero por ahora, no. Sin embargo, hablaré brevemente sobre su pregunta SQL.
Magento usa un arquitectura de base de datos EAV . Siempre que sea posible, intente utilizar los objetos modelo que proporciona el sistema para obtener la información que necesita. Sé que todo está allí en las tablas SQL, pero es mejor no pensar en obtener datos utilizando consultas SQL sin formato, o se volverá loco.
Descargo de responsabilidad final. He estado usando Magento durante aproximadamente dos o tres semanas, así que tenga cuidado. Este es un ejercicio para aclarar esto tanto como para ayudar a Stack Overflow.
Crear un módulo
Todas las adiciones y personalizaciones a Magento se realizan a través de módulos. Entonces, lo primero que deberá hacer es crear un nuevo módulo. Cree un archivo XML con el
app/modules
siguiente nombreMyCompanyName es un espacio de nombres único para sus modificaciones, no tiene que ser el nombre de su empresa, sino que la convención recomendada es mi magento.
HelloWorld
es el nombre de tu módulo.Borrar el caché de la aplicación
Ahora que el archivo del módulo está en su lugar, necesitaremos que Magento lo sepa (y verifique nuestro trabajo). En la aplicación admin
Ahora, nos aseguramos de que Magento conozca el módulo.
Si puede vivir con la ralentización del rendimiento, es posible que desee desactivar el caché de la aplicación mientras desarrolla / aprende. Nada es más frustrante que olvidarse de limpiar el caché y preguntarse por qué sus cambios no se muestran.
Configurar la estructura del directorio
A continuación, necesitaremos configurar una estructura de directorio para el módulo. No necesitará todos estos directorios, pero no hay nada malo en configurarlos ahora.
Y agregue un archivo de configuración
y dentro del archivo de configuración, agregue lo siguiente, que es esencialmente una configuración "en blanco".
Simplificando demasiado las cosas, este archivo de configuración le permitirá decirle a Magento qué código desea ejecutar.
Configurar el enrutador
A continuación, necesitamos configurar los enrutadores del módulo. Esto le permitirá al sistema saber que estamos manejando cualquier URL en forma de
Entonces, en su archivo de configuración, agregue la siguiente sección.
Lo que estás diciendo aquí es "cualquier URL con el frontName de helloworld ...
debe usar el controlador frontName MyCompanyName_HelloWorld ".
Entonces, con la configuración anterior en su lugar, cuando cargue la página de helloworld anterior, obtendrá una página 404. Eso es porque no hemos creado un archivo para nuestro controlador. Hagámoslo ahora.
Ahora intenta cargar la página. ¡Progreso! En lugar de un 404, obtendrá una excepción PHP / Magento
Entonces, abra el archivo que acabamos de crear y pegue el siguiente código. El nombre de la clase debe basarse en el nombre que proporcionó en su enrutador.
Lo que acabamos de configurar es el controlador de módulo / frontName. Este es el controlador predeterminado y la acción predeterminada del módulo. Si desea agregar controladores o acciones, debe recordar que la primera parte del árbol de una URL de Magento es inmutable, siempre irá de esta manera
http://example.com/magento/index.php/frontName/controllerName/actionName
Entonces, si quieres hacer coincidir esta url
Tendrá que tener un FooController, que puede hacer de esta manera:
Tenga en cuenta que el controlador predeterminado IndexController y la acción predeterminada indexAction pueden ser implícitas pero deben ser explícitas si algo viene después. Por
http://example.com/magento/index.php/helloworld/foo
lo tanto , coincidirá con el controlador FooController y la acción indexAction y NO con la acción fooAction del IndexController. Si desea tener una fooAction, en el controlador IndexController debe llamar a este controlador explícitamente de esta manera:http://example.com/magento/index.php/helloworld/index/foo
porque la segunda parte de la URL es y siempre será el nombre del controlador. Este comportamiento es una herencia del Marco Zend incluido en Magento.Ahora debería poder presionar las siguientes URL y ver los resultados de sus declaraciones de eco
Entonces, eso debería darle una idea básica sobre cómo Magento envía a un controlador. Desde aquí, recomendé hurgar en las clases de controladores Magento existentes para ver cómo deberían usarse los modelos y el sistema de plantilla / diseño.
fuente
He estado luchando con Magento durante el último mes más o menos y todavía estoy tratando de resolverlo. Entonces este es un caso de ciegos guiando a los ciegos. Hay poca documentación y el foro / wiki es caótico en el mejor de los casos. No solo eso, sino que hay varias soluciones que están desactualizadas o lejos de ser óptimas. No estoy seguro de si tiene un proyecto o simplemente está tratando de resolverlo, pero probablemente sea más fácil si comenzó a modificar la funcionalidad existente en lugar de crear algo completamente nuevo. Para eso definitivamente iría con los "Artículos recomendados para desarrolladores" en la wiki. El nuevo método de pago fue una verdadera revelación.
Para la depuración definitivamente recomendaría usar FirePHP y mirar su fuente HTML cuando algo sale mal. El método de depuración de eco ole realmente no funciona tan bien.
La arquitectura general es tan intrincadamente compleja, que incluso si la entendiera completamente, necesitaría escribir un libro para cubrirla. Lo mejor que puedo hacer es darte un consejo que desearía que alguien me hubiera dado cuando comencé ...
Manténgase alejado de los archivos principales. No los modifique, en su lugar, escriba su propio módulo y anule lo que necesita.
Magento utiliza archivos de configuración que consisten en XML para decidir qué debe hacer. Para que pueda ejecutar sus propias cosas en lugar de la funcionalidad central, necesita el xml correcto. Desafortunadamente no hay una guía sobre cómo construir tu XML; necesitas mirar ejemplos y hacer algunas pruebas serias. Para complicar las cosas, el contenido de estos archivos distingue entre mayúsculas y minúsculas. Sin embargo, si domina estos, puede anular cualquier parte de la funcionalidad básica que lo convierte en un sistema muy potente.
Magento utiliza métodos como
Mage::getModel('mymodel')
,Mage::getSingleton('mysingleton')
,Mage::helper('myhelper')
a devolver objetos de ciertas clases. Los encuentra por defecto en su espacio de nombres principal. Si desea que use los suyos, debe anularlos en suconfig.xml
archivo.El nombre de sus clases debe corresponder a la carpeta en la que se encuentran.
Muchos de los objetos en Magento finalmente extienden algo llamado a
Varien_Object
. Esta es una clase de propósito general (algo así como una navaja suiza) y su propósito en la vida es permitirle definir sus propios métodos / variables sobre la marcha. Por ejemplo, verá que se usa como una matriz glorificada para pasar datos de un método a otro.Durante el desarrollo, asegúrese de que el almacenamiento en caché esté deshabilitado. Hará que el magento sea extremadamente lento, pero te ahorrará mucho trauma en la cabeza (de golpearlo en tu escritorio).
Verás que te
$this
usan mucho. Significa una clase diferente dependiendo de qué archivo lo veas.get_class($this)
es tu amigo, especialmente en conjunción con FirePHP.Anote las cosas en papel. Mucho. Hay innumerables pequeños hechos que necesitarás 1-2 días después de que los encuentres.
Magento ama a OO. No se sorprenda si rastrear un método lo lleva a través de 5-10 clases diferentes.
Lea la guía del diseñador aquí . Está destinado principalmente a diseñadores gráficos, pero lo necesita para comprender dónde y por qué terminará la salida de su módulo. Para eso, no olvide activar "Sugerencias de ruta de plantilla" en la sección de desarrollador del panel de administración.
Hay más, pero me detendré aquí antes de que esto se convierta en una disertación.
fuente
Prefiero recomendar Mage2Gen , esto lo ayudará a generar la repetitiva y puede concentrarse en la lógica comercial central. solo ayuda a acelerar las cosas.
fuente
Un módulo de Magento es un grupo de directorios que contiene bloques, controladores, ayudantes y modelos que se necesitan para crear una característica de tienda específica. Es la unidad de personalización en la plataforma Magento. Los módulos Magento se pueden crear para realizar múltiples funciones con lógica de soporte para influir en la experiencia del usuario y la apariencia de la tienda. Tiene un ciclo de vida que les permite instalarse, eliminarse o deshabilitarse. Desde la perspectiva de los comerciantes y desarrolladores de extensiones, los módulos son la unidad central de la plataforma Magento.
Declaración de módulo
Tenemos que declarar el módulo utilizando el archivo de configuración. Como Magento 2, busque el módulo de configuración en el directorio, etc. del módulo. Así que ahora crearemos el archivo de configuración module.xml.
El código se verá así:
Registro del módulo El módulo debe estar registrado en el sistema Magento 2 utilizando la clase Magento Component Registrar. Ahora crearemos el archivo registration.php en el directorio raíz del módulo:
El Código se verá así:
Verificar el estado del módulo Después de seguir los pasos anteriores, habríamos creado un módulo simple. Ahora vamos a verificar el estado del módulo y si está habilitado o deshabilitado utilizando la siguiente línea de comando:
Comparta sus comentarios una vez que haya completado el proceso completo
fuente
Estaba tratando de hacer mi módulo de magaplaza hello world tutorial, pero algo salió mal. Importé el código de este módulo https://github.com/astorm/magento2-hello-world desde github y funcionó. a partir de ese módulo, lo creé un subcategorías categorías ajax select desplegable Módulo. Después de instalarlo en el directorio aap / code de su instalación de magento2, siga esta URL. Http://www.example.com/hello_mvvm/hello/world Puede descargar su código desde aquí https://github.com/sanaullahAhmad/Magento2_cat_subcat_ajax_select_dropdowns y colóquelo en su carpeta aap / code. que ejecutar estos comandos ...
Ahora puede verificar la funcionalidad del módulo con la siguiente URL http: // {{www.example.com}} / hello_mvvm / hello / world
fuente
Y,
Le sugiero que aprenda sobre la configuración del sistema.
¿Cómo mostrar todas las categorías en el campo de configuración del sistema?
Aquí lo resolví con un buen ejemplo. Está funcionando. Puede verificar y aprender el flujo de código.
También hay otros ejemplos que debes aprender.
fuente