Como o seguinte pode ser realizado no Magento?
Exiba uma mensagem "Hello World" usando uma abordagem de controlador / exibição / modelo. Então, se eu fosse
http://example.com/myController
, mostraria a string 'Hello World'. Ser capaz de mostrar essa string no modelo do meu site (por exemplo, cabeçalho, rodapé etc.) será um bônus.Como adiciono um método a este controlador (ou a um novo controlador, se necessário), que interage com um modelo, executa a consulta
Select * FROM articles where id='10'
e retorna a linha (contendo as colunasid, title, content
) ao controlador? E, em seguida, use o controlador para incluir uma exibição, que exibirá esta linha. Portanto,http://example.com/myController/show_row
acessar (ou algo semelhante) exibiria a linha em uma exibição. (Não precisa ser chique, apenas umecho $row->id;
ou algo semelhante funcionaria.)
Qualquer outra informação sobre a estrutura de código do Magento também será muito útil.
fonte
Respostas:
Em primeiro lugar, eu recomendo que você compre o PDF / E-Book do PHP Architect . São US $ 20, mas é o único recurso direto "Eis como o Magento funciona" que consegui encontrar. Eu também comecei a escrever tutoriais Magento no meu próprio site .
Segundo, se você tem uma escolha e não é um programador experiente ou não tem acesso a um programador experiente (idealmente em PHP e Java), escolha outro carrinho . O Magento é bem projetado, mas foi projetado para ser uma solução de carrinho de compras, na qual outros programadores podem construir módulos. Não foi projetado para ser facilmente compreendido por pessoas inteligentes, mas não programadores.
Terceiro, o Magento MVC é muito diferente do modelo MVC do Ruby on Rails , Django , CodeIgniter , CakePHP , etc. Atualmente, é popular entre os desenvolvedores de PHP. Eu acho que é baseado no modelo Zend , e tudo é muito parecido com Java OOP. Tem dois controladores que você precisa para se preocupar. O controlador module / frontName e, em seguida, o controlador MVC.
Quarto, o próprio aplicativo Magento é construído usando o mesmo sistema de módulos que você usará, portanto, bisbilhotar o código principal é uma tática de aprendizado útil. Além disso, muito do que você fará com o Magento está substituindo as classes existentes. O que estou abordando aqui é a criação de novas funcionalidades, não substituindo. Lembre-se disso quando estiver analisando os exemplos de código existentes.
Começarei com sua primeira pergunta, mostrando como configurar um controlador / roteador para responder a um URL específico. Este será um pequeno romance. Talvez eu tenha tempo mais tarde para os tópicos relacionados ao modelo / modelo, mas, por enquanto, não tenho. No entanto, falarei brevemente de sua pergunta sobre SQL.
Magento usa uma arquitetura de banco de dados EAV . Sempre que possível, tente usar os objetos de modelo que o sistema fornece para obter as informações necessárias. Eu sei que está tudo lá nas tabelas SQL, mas é melhor não pensar em pegar dados usando consultas SQL brutas, ou você ficará louco.
Isenção de responsabilidade final. Estou usando o Magento há cerca de duas ou três semanas, portanto, ressalte o emptor. Este é um exercício para esclarecer isso tanto na minha cabeça quanto para ajudar o Stack Overflow.
Crie um módulo
Todas as adições e personalizações no Magento são feitas através de módulos. Portanto, a primeira coisa que você precisará fazer é criar um novo módulo. Crie um arquivo XML com o
app/modules
nome da seguinte maneiraMyCompanyName é um espaço de nome exclusivo para suas modificações, não precisa ser o nome da sua empresa, mas sim a convenção recomendada, meu magento.
HelloWorld
é o nome do seu módulo.Limpe o cache do aplicativo
Agora que o arquivo do módulo está no lugar, precisamos informar ao Magento (e verificar nosso trabalho). No aplicativo de administração
Agora, garantimos que o Magento conheça o módulo
Se você pode conviver com o desempenho mais lento, desative o cache do aplicativo durante o desenvolvimento / aprendizado. Nada é mais frustrante do que esquecer a limpeza do cache e se perguntar por que suas alterações não estão aparecendo.
Configurar a estrutura de diretórios
Em seguida, precisaremos configurar uma estrutura de diretórios para o módulo. Você não precisará de todos esses diretórios, mas não há mal algum em configurá-los agora.
E adicione um arquivo de configuração
e dentro do arquivo de configuração, adicione o seguinte, que é essencialmente uma configuração "em branco".
Simplificando as coisas, esse arquivo de configuração permitirá que você diga ao Magento qual código você deseja executar.
Configurando o roteador
Em seguida, precisamos configurar os roteadores do módulo. Isso permitirá que o sistema saiba que estamos lidando com qualquer URL na forma de
Portanto, no seu arquivo de configuração, adicione a seção a seguir.
O que você está dizendo aqui é "qualquer URL com o nome da frente do helloworld ...
deve usar o controlador frontName MyCompanyName_HelloWorld ".
Portanto, com a configuração acima, quando você carregar a página helloworld acima, você obterá uma página 404. Isso porque não criamos um arquivo para o nosso controlador. Vamos fazer isso agora.
Agora tente carregar a página. Progresso! Em vez de um 404, você receberá uma exceção PHP / Magento
Então, abra o arquivo que acabamos de criar e cole o código a seguir. O nome da classe precisa ser baseado no nome que você forneceu no seu roteador.
O que acabamos de configurar é o controlador module / frontName. Este é o controlador padrão e a ação padrão do módulo. Se você deseja adicionar controladores ou ações, lembre-se de que a primeira parte da árvore de uma URL do Magento é imutável e sempre será assim.
http://example.com/magento/index.php/frontName/controllerName/actionName
Então, se você quiser combinar esse URL
Você precisará ter um FooController, que pode ser feito desta maneira:
Observe que o controlador padrão IndexController e a ação padrão indexAction podem estar implícitos, mas precisam ser explícitos se algo vier depois dele. Portanto
http://example.com/magento/index.php/helloworld/foo
, corresponderá ao controlador FooController e à ação indexAction, e NÃO à ação fooAction do IndexController. Se você deseja obter uma fooAction, no controlador IndexController, é necessário chamar esse controlador explicitamente da seguinte maneira:http://example.com/magento/index.php/helloworld/index/foo
porque a segunda parte da URL é e sempre será o controllerName. Esse comportamento é uma herança do Zend Framework incluído no Magento.Agora você deve conseguir acessar os seguintes URLs e ver os resultados de suas instruções de eco
Portanto, isso deve lhe dar uma idéia básica de como o Magento envia para um controlador. A partir daqui, eu recomendo procurar nas classes existentes do controlador Magento para ver como os modelos e o sistema de modelo / layout devem ser usados.
fonte
Estou lutando com o Magento há um mês ou mais e ainda estou tentando descobrir. Portanto, este é um caso de cego guiando cego. Há pouco na documentação e o fórum / wiki é, na melhor das hipóteses, caótico. Não apenas isso, mas existem várias soluções que estão desatualizadas ou estão longe de ser ótimas. Não tenho certeza se você tem um projeto ou apenas está tentando descobrir, mas provavelmente será mais fácil se você começar a modificar a funcionalidade existente em vez de criar algo completamente novo. Para isso, eu definitivamente iria com os "Artigos recomendados para desenvolvedores" no wiki. O novo método de pagamento era um verdadeiro revelador.
Para depuração, eu recomendaria definitivamente o uso do FirePHP e a consulta do seu código HTML quando algo der errado. O método ole echo debug não funciona muito bem.
A arquitetura geral é tão espantosamente complexa que, mesmo que eu a entenda completamente, preciso escrever um livro para cobri-la. O melhor que posso fazer é dar-lhe conselhos que eu gostaria que alguém tivesse me dado quando comecei ...
Fique longe dos arquivos principais. Não modifique-os; em vez disso, escreva seu próprio módulo e substitua o que você precisa.
O Magento usa arquivos de configuração que consistem em XML para decidir o que precisa fazer. Para que ele execute suas próprias coisas, em oposição à funcionalidade principal, você precisa do xml correto. Infelizmente, não há um guia sobre como criar seu XML; você precisa ver exemplos e fazer alguns testes sérios. Para complicar, o conteúdo desses arquivos faz distinção entre maiúsculas e minúsculas. No entanto, se você os dominar, poderá substituir qualquer parte da funcionalidade básica que cria um sistema muito poderoso.
Magento usa métodos como
Mage::getModel('mymodel')
,Mage::getSingleton('mysingleton')
,Mage::helper('myhelper')
para retornar objetos de certas classes. Ele os encontra por padrão em seu namespace principal. Se você quiser usar o seu próprio, precisará substituí-los no seuconfig.xml
arquivo.O nome de suas classes deve corresponder à pasta em que estão.
Muitos dos objetos no Magento acabam estendendo algo chamado a
Varien_Object
. Esta é uma classe de uso geral (como um canivete suíço) e seu objetivo na vida é permitir que você defina seus próprios métodos / variáveis em tempo real. Por exemplo, você verá que é usado como uma matriz glorificada para passar dados de um método para outro.Durante o desenvolvimento, verifique se o cache está desabilitado. Isso tornará o magento dolorosamente lento, mas poupará muitos traumas na cabeça (de bater na sua mesa).
Você verá
$this
sendo muito usado. Significa uma classe diferente, dependendo do arquivo que você vê.get_class($this)
é seu amigo, especialmente em conjunto com o FirePHP.Anote as coisas no papel. Muito. Existem inúmeros pequenos factóides que você precisará de um a dois dias depois de encontrá-los.
Magento adora OO. Não se surpreenda se o rastreamento de um método o levar por 5 a 10 classes diferentes.
Leia o guia do designer aqui . É destinado principalmente a designers gráficos, mas você precisa entender onde e por que a saída do seu módulo terminará. Para isso, não esqueça de ativar as "Dicas de caminho do modelo" na seção de desenvolvedores do painel de administração.
Tem mais, mas vou parar por aqui antes que isso se transforme em uma dissertação.
fonte
Prefiro recomendar o Mage2Gen , isso ajudará você a gerar o clichê e você poderá se concentrar apenas na lógica principal do negócio. isso apenas ajuda a acelerar as coisas.
fonte
Um módulo Magento é um grupo de diretórios que contém blocos, controladores, auxiliares e modelos necessários para criar um recurso específico de armazenamento. É a unidade de personalização na plataforma Magento. Os módulos Magento podem ser criados para executar várias funções com lógica de suporte para influenciar a experiência do usuário e a aparência da loja. Possui um ciclo de vida que permite que eles sejam instalados, excluídos ou desativados. Da perspectiva dos comerciantes e desenvolvedores de extensões, os módulos são a unidade central da plataforma Magento.
Declaração do Módulo
Temos que declarar o módulo usando o arquivo de configuração. Como Magento 2, procure o módulo de configuração no diretório etc do módulo. Então agora vamos criar o arquivo de configuração module.xml.
O código ficará assim:
Registro do módulo O módulo deve ser registrado no sistema Magento 2 usando a classe Magento Component Registrar. Agora vamos criar o arquivo registration.php no diretório raiz do módulo:
O código ficará assim:
Verificar o status do módulo Depois de seguir as etapas acima, teríamos criado um módulo simples. Agora vamos verificar o status do módulo e se ele está ativado ou desativado usando a seguinte linha de comando:
Compartilhe seu feedback depois de concluir o processo
fonte
Eu estava tentando fazer meu módulo do tutorial magaplaza olá mundo, mas algo deu errado. Eu importei o código deste módulo https://github.com/astorm/magento2-hello-world do github e funcionou. a partir desse módulo, eu criei uma subcategorias de categorias ajax selecione o módulo suspenso. Depois de instalá-lo no diretório aap / code da sua instalação do magento2, siga este URL. Http://www.example.com/hello_mvvm/hello/world Você pode fazer o download do código aqui https://github.com/sanaullahAhmad/Magento2_cat_subcat_ajax_select_dropdowns e coloque-o na sua pasta aap / code. do que executar esses comandos ...
Agora você pode verificar a funcionalidade do módulo com o seguinte URL http: // {{www.example.com}} / hello_mvvm / hello / world
fonte
E,
Eu sugiro que você aprenda sobre a configuração do sistema.
Como mostrar todas as categorias no campo de configuração do sistema?
Aqui eu resolvi com um bom exemplo. Está funcionando. Você pode verificar e aprender o fluxo de código.
Existem outros exemplos também que você deve aprender.
fonte