Pregunta

¿Cómo se puede lograr lo siguiente en Magento?

  • Mostrar un "Hello World" mensaje usando un enfoque de controlador / vista / modelo. Así que, si iba a http://example.com/myController sería una muestra de la cadena 'Hola Mundo'. Ser capaz de mostrar esta cadena dentro de la plantilla de mi sitio web (por ejemplo, el encabezado, pie de página, etc.) será un bono.

  • ¿Cómo agrego un método de este controlador (o un nuevo controlador si es necesario), que interactúa con un modelo, y realiza la Select * FROM articles where id='10' consulta y devuelve la fila (que contiene el id, title, content columnas) al controlador? Y luego utilizar el controlador para incluir un punto de vista, lo que mostrará esta fila. Así que va a http://example.com/myController/show_row (o algo similar) que aparezca la fila dentro de una vista. (No hay necesidad de ser lujoso, sólo un echo $row->id; o algo similar funcionarían.)

Cualquier otra información sobre la estructura del código de Magento también será muy útil.

¿Fue útil?

Solución

En primer lugar, le recomiendo que compre el PDF / E-libro de PHP Arquitecto . Es US $ 20, pero es el único sencillo "Así es como funciona Magento" recurso que he podido encontrar. También he empezado a escribir tutoriales de Magento en mi propio sitio web .

En segundo lugar, si usted tiene una opción, y no son un programador experimentado o no tienen acceso a un programador con experiencia (idealmente en PHP y Java), elige otro carrito . Magento está bien diseñado, pero fue diseñado para ser una solución de carrito de la compra que otros programadores pueden construir módulos en la parte superior de. No fue diseñado para ser fácilmente comprendido por las personas que son inteligentes, pero no son programadores.

En tercer lugar, Magento MVC es muy diferente de la Ruby on Rails , Django , CodeIgniter , CakePHP , etc. modelo MVC que es popular con los desarrolladores de PHP en estos días. Creo que se basa en la href="http://en.wikipedia.org/wiki/Zend_Framework" rel="noreferrer"> Zend modelo los controladores que necesita para estar preocupados. El controlador de módulo de E / frontName, y entonces el controlador MVC.

En cuarto lugar, la aplicación Magento está construido utilizando el mismo sistema de módulos que va a utilizar, por lo hurgando el código del núcleo es una táctica útil de aprendizaje. Además, mucho de lo que va a hacer con Magento es primordiales clases existentes. Lo que estoy cubriendo aquí es crear nueva funcionalidad, no anular. Tenga esto en cuenta cuando usted está buscando en los ejemplos de código que hay.

Voy a comenzar con su primera pregunta, que muestra cómo configurar un controlador / router para responder a una URL específica. Esta será una pequeña novela. Puede que tenga tiempo más tarde para los temas relacionados con el modelo / plantilla, pero por ahora, no lo hago. Yo, sin embargo, hablar brevemente a su pregunta de SQL.

Magento utiliza una href="http://en.wikipedia.org/wiki/Entity-Attribute-Value_model" rel="noreferrer"> EAV la arquitectura de base de datos

Divulgación final. He estado usando Magento durante unos dos o tres semanas, por lo que caveat emptor. Este es un ejercicio para obtener esta recta en la cabeza tanto como lo es para ayudar a desbordamiento de pila.

Crear un módulo

Todas las adiciones y personalizaciones a Magento se realizan a través de módulos. Por lo tanto, lo primero que tendrá que hacer es crear un nuevo módulo. Crear un archivo XML en app/modules llamado de la siguiente manera

cd /path/to/store/app
touch etc/modules/MyCompanyName_HelloWorld.xml
<?xml version="1.0"?>
<config>
     <modules>
        <MyCompanyName_HelloWorld>
            <active>true</active>
            <codePool>local</codePool>
        </MyCompanyName_HelloWorld>
     </modules>
</config>

MyCompanyName es un espacio de nombres único para sus modificaciones, que no tiene por qué ser el nombre de su empresa, sino que la convención recomendada mi Magento. HelloWorld es el nombre de su módulo.

Borrar la caché de la aplicación

Ahora que el archivo de módulo está en su lugar, tendremos que dejar que Magento saber sobre él (y comprobar nuestro trabajo). En la aplicación de administración

  1. Ir a Sistema-> Administración de caché
  2. Seleccione Actualizar en el menú Todos caché
  3. Haga clic en Guardar la configuración de caché

Ahora, nos aseguramos de que Magento sabe sobre el módulo

  1. Ir a Sistema-> Configuración
  2. Haga clic en Avanzadas
  3. En la "salida de los módulos Desactivar" cuadro de la configuración, busque su nuevo módulo denominado "MyCompanyName_HelloWorld "

Si se puede vivir con el rendimiento más lento, es posible que desee desactivar el caché de la aplicación mientras que el desarrollo / aprendizaje. Nada es más frustrante que olvidar la clara la caché y se preguntaba por qué los cambios no se están presentando.

Configuración de la estructura de directorios

A continuación, tendremos que configurar una estructura de directorios para el módulo. No necesitará todos estos directorios, pero no hay ningún daño en el establecimiento a todos ellos ahora.

mkdir -p app/code/local/MyCompanyName/HelloWorld/Block
mkdir -p app/code/local/MyCompanyName/HelloWorld/controllers
mkdir -p app/code/local/MyCompanyName/HelloWorld/Model
mkdir -p app/code/local/MyCompanyName/HelloWorld/Helper
mkdir -p app/code/local/MyCompanyName/HelloWorld/etc
mkdir -p app/code/local/MyCompanyName/HelloWorld/sql

Y añadir un archivo de configuración

touch app/code/local/MyCompanyName/HelloWorld/etc/config.xml

y dentro del archivo de configuración, añadir la siguiente, que es esencialmente una configuración "en blanco".

<?xml version="1.0"?>
<config>
    <modules>
        <MyCompanyName_HelloWorld>
            <version>0.1.0</version>
        </MyCompanyName_HelloWorld>
    </modules>
</config>

Simplificando las cosas, este archivo de configuración le permitirá decir Magento qué código que desea ejecutar.

Configuración del enrutador

A continuación, tenemos que configurar los routers del módulo. Esto permitirá que el sistema sepa que estamos manejando cualquier URL en forma de

http://example.com/magento/index.php/helloworld

Por lo tanto, en el archivo de configuración, agregue la siguiente sección.

<config>
<!-- ... -->
    <frontend>
        <routers>
            <!-- the <helloworld> tagname appears to be arbitrary, but by
            convention is should match the frontName tag below-->
            <helloworld>
                <use>standard</use>
                <args>
                    <module>MyCompanyName_HelloWorld</module>
                    <frontName>helloworld</frontName>
                </args>
            </helloworld>
        </routers>
    </frontend>
<!-- ... -->
</config>

Lo que está diciendo aquí es "cualquier URL con el frontName de holamundo ...

http://example.com/magento/index.php/helloworld

debería utilizar el MyCompanyName_HelloWorld controlador frontName".

Por lo tanto, con la configuración anterior en su lugar, cuando se carga la página holamundo anterior, obtendrá una página 404. Esto se debe a que no hemos creado un archivo de nuestro controlador. Vamos a hacer eso ahora.

touch app/code/local/MyCompanyName/HelloWorld/controllers/IndexController.php

Ahora intenta cargar la página. ¡Progreso! En lugar de un 404, obtendrá un PHP / Magento excepción

Controller file was loaded but class does not exist

Por lo tanto, abra el archivo que acabamos de crear, y pegar el siguiente código. El nombre de la clase debe basarse en el nombre que proporcionó en su router.

<?php
class MyCompanyName_HelloWorld_IndexController extends Mage_Core_Controller_Front_Action{
    public function indexAction(){
        echo "We're echoing just to show that this is what's called, normally you'd have some kind of redirect going on here";
    }
}

Lo que acaba de configuración es el controlador del módulo / frontName. Este es el controlador por defecto y la acción por defecto del módulo. Si desea agregar controladores o acciones, hay que recordar que la primera parte de árbol de una URL Magento son inmutables siempre van a ir por este camino http://example.com/magento/index.php/frontName/controllerName/actionName

Así que si desea hacer coincidir esta url

http://example.com/magento/index.php/helloworld/foo

Usted tendrá que tener un FooController, que se puede hacer de esta manera:

touch app/code/local/MyCompanyName/HelloWorld/controllers/FooController.php
<?php
class MyCompanyName_HelloWorld_FooController extends Mage_Core_Controller_Front_Action{
    public function indexAction(){
        echo 'Foo Index Action';
    }

    public function addAction(){
        echo 'Foo add Action';
    }

    public function deleteAction(){
        echo 'Foo delete Action';
    }
}

Tenga en cuenta que el controlador de IndexController defecto y el indexAction acción predeterminada puede por implícita, pero tienen que ser explícitos si algo viene después de ella. Así http://example.com/magento/index.php/helloworld/foo coincidirá con el controlador y el FooController indexAction acción y no la acción del fooAction IndexController. Si usted quiere tener un fooAction, en el controlador IndexController usted entonces tiene que llamar a este controlador de forma explícita como esta manera: http://example.com/magento/index.php/helloworld/index/foo porque la segunda parte de la url es y será siempre la controllerName. Este comportamiento es una herencia del Zend Framework incluido en Magento.

Ahora debería ser capaz de golpear las siguientes URL y ver los resultados de sus estados de cuenta de eco

http://example.com/magento/index.php/helloworld/foo
http://example.com/magento/index.php/helloworld/foo/add
http://example.com/magento/index.php/helloworld/foo/delete

Por lo tanto, que debería darle una idea básica de cómo Magento envía a un controlador. De aquí que había recomendado hurgando en las clases de controlador Magento existentes para ver cómo se deben utilizar los modelos y el sistema de plantillas / diseño.

Otros consejos

He estado luchando con Magento para el último mes o así, y todavía estoy tratando de averiguarlo. Así que este es un caso de un ciego guía a otro ciego. Hay poco en el camino de la documentación y el foro / wiki es caótico en el mejor. No sólo eso, sino que hay varias soluciones que son obsoletos o ya sea lejos de ser óptima. No estoy seguro de si tiene un proyecto o simplemente tratando de averiguarlo, pero es probablemente más fácil si usted empieza con la modificación de la funcionalidad existente en lugar de crear algo completamente nuevo. Para que me vaya definitivamente con los "Artículos recomendados para los desarrolladores" en el wiki. El nuevo método de pago era una verdadera revelación.

Para la depuración Sin duda recomiendo el uso de FirePHP y mirando a su fuente HTML cuando algo va mal. El método de depuración de eco ole realidad no funciona del todo bien.

La arquitectura general es tan complejo abrumadoramente, que incluso si he entendido por completo, que había necesidad de escribir un libro para cubrirlo. Lo mejor que puedo hacer es darle consejos me gustaría que alguien me había dado cuando empecé ...

Manténgase alejado de los archivos principales. No los modifique, en vez escribir su propio módulo y omitir lo que necesita.

Magento utiliza archivos de configuración XML que consiste en decidir lo que tiene que hacer. Con el fin de conseguir que se ejecute su propio material en contraposición a la funcionalidad básica que necesita el código XML correcto. Desafortunadamente no hay una guía sobre cómo construir el edificio XML; usted tiene que mirar a los ejemplos y hacer algunas pruebas serias. Para complicar las cosas, el contenido de estos archivos es en gran medida entre mayúsculas y minúsculas. Sin embargo, si usted domina estos se 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') para volver objetos de ciertas clases. Se los encuentra por defecto en su espacio de nombres principal. Si usted quiere que use su propia, es necesario reemplazar estos en su archivo config.xml.

El nombre de sus clases debe corresponder a la carpeta que se encuentran.

Una gran cantidad de los objetos en Magento en última instancia se extiende algo que se llama un Varien_Object. Esta es una clase de propósito general (algo así como una navaja suiza) y su propósito en la vida es que le permite definir sus propios métodos / variables sobre la marcha. Por ejemplo, usted verá que utiliza como una matriz glorificado para pasar datos de un método a otro.

Durante el desarrollo asegúrese de que la caché está deshabilitada. Se va a hacer Magento muy lento, pero que le ahorrará una gran cantidad de trauma en la cabeza (de golpearse en su escritorio).

Usted verá $this se utiliza mucho. Esto significa que una clase diferente dependiendo de qué archivo lo ves. get_class($this) es su amigo, especialmente en conjunción con FirePHP.

Jot cosas en un papel. Mucho. Hay un sinnúmero de pequeños factoides que vas a necesidad de 1-2 días después de que las encuentre.

Magento ama OO. No se sorprenda si trazara un método que lleva a través de 5-10 clases diferentes.

del diseñador aquí . Está destinado principalmente para los diseñadores gráficos, pero necesidad a entender dónde y por qué la salida de su módulo va a terminar. Para que no se olvide de activar el "consejos ruta de plantilla" en la sección de revelado del panel de administración.

Hay más, pero voy a parar aquí antes de que esto se convierte en una disertación.

Voy a recomendar en lugar Mage2Gen , esto le ayudará a generar el texto modelo y sólo puede centrarse en la actividad principal lógica. sólo ayuda a acelerar las cosas.

Un módulo de Magento es un grupo de directorios que contienen bloques, controladores, ayudantes, y los modelos que son necesarios para crear una característica específica de la tienda. Es la unidad de personalización de la plataforma Magento. Los módulos de Magento se pueden crear para realizar múltiples funciones con el apoyo a la lógica de influir en la experiencia del usuario y la apariencia del escaparate. Tiene un ciclo de vida que les permite ser instaladas, eliminar o discapacitados. Desde la perspectiva de los comerciantes y los desarrolladores de extensiones, módulos son la unidad central de la plataforma Magento.

Declaración del módulo

Tenemos que declarar el módulo utilizando el archivo de configuración. Como Magento 2 búsqueda de módulo de configuración en el directorio etc del módulo. Así que ahora vamos a crear Module.xml archivo de configuración.

El código se vería así:

<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <module name="Cloudways_Mymodule" setup_version="1.0.0"></module> </config>

Registro del módulo El módulo debe ser registrado en el sistema Magento 2 mediante el uso de clase Magento Componente Registrador. Ahora vamos a crear el registration.php archivo en el directorio raíz del módulo:

app/code/Cloudways/Mymodule/registration.php

El código se verá así:

?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Cloudways_Mymodule',
__DIR__
);

Comprobar estado del módulo Después de seguir los pasos anteriores, habríamos creado un módulo simple. Ahora vamos a comprobar el estado del módulo y si se activa o desactiva mediante la línea de comandos siguiente:

php bin/magento module:status

php bin/magento module:enable Cloudways_Mymodule

Compartir sus comentarios una vez que haya pasado por el proceso completo

Yo estaba tratando de hacer mi módulo de magaplaza hola tutorial mundo, pero algo salió mal. Me importa un 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é categorías a subcategorías de ajax seleccione Módulo menús desplegables. Después de instalarlo en el directorio de AAP / código de su instalación magento2 siga este URL .. http: // www .example.com / hello_mvvm / hola / mundo Puede descargar su código de aquí https://github.com/sanaullahAhmad/Magento2_cat_subcat_ajax_select_dropdowns y colocarlo en la carpeta de AAP / código. de ejecutar estos comandos ...

php bin/magento setup:update
php bin/magento setup:static-content:deploy -f
php bin/magento c:c

Ahora se puede comprobar la funcionalidad del módulo con la siguiente URL http: // {{}} www.example.com / hello_mvvm / hola / mundo

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top