Pergunta

Como pode a seguir ser realizado em Magento?

  • Mostrar uma mensagem "Olá Mundo" usando uma abordagem de controlador / view / modelo. Então, se eu fosse para http://example.com/myController ele iria mostrar a string 'Olá Mundo'. Ser capaz de mostrar-lhe a corda dentro do modelo do meu site (por exemplo, o cabeçalho, rodapé, etc.) será um bônus.

  • Como faço para adicionar um método para este controlador (ou um novo controlador, se necessário), que interage com um modelo, e executa a Select * FROM articles where id='10' consulta e retorna a linha (contendo o id, title, content colunas) para o controlador? E, em seguida, usar o controlador para incluir uma vista, o que exibir esta linha. Então vai http://example.com/myController/show_row (ou algo similar) iria mostrar a linha dentro de uma visão. (Não há necessidade de ser extravagante, apenas um echo $row->id; ou algo semelhante iria funcionar.)

Qualquer outra informação sobre a estrutura do código do Magento também será muito útil.

Foi útil?

Solução

Em primeiro lugar, eu recomendo que você comprar o PDF / E-Book de PHP Architect . É US $ 20, mas é a única simples "Veja como Magento obras" recurso que eu tenho sido capaz de encontrar. Eu também comecei a escrever Magento tutoriais no meu próprio website .

Em segundo lugar, se você tem uma escolha, e não é um programador experiente ou não têm acesso a um programador experiente (de preferência em PHP e Java), escolher um outro carrinho . Magento é bem projetado, mas foi projetado para ser uma solução de carrinho de compras que outros programadores podem construir módulos em cima. Não foi projetado para ser facilmente compreendido por pessoas que são inteligentes, mas não são programadores.

Em terceiro lugar, Magento MVC é muito diferente do Ruby on Rails , Django , CodeIgniter , CakePHP , etc. modelo MVC que é popular com desenvolvedores PHP nos dias de hoje. Eu acho que é baseado no href="http://en.wikipedia.org/wiki/Zend_Framework" rel="noreferrer"> Zend modelo , ea coisa toda é muito Java OOP-like. Há dois controladores que você precisa para se preocupar. O módulo / controlador frontName, e, em seguida, o controlador MVC.

Em quarto lugar, a aplicação Magento em si é construído usando o mesmo sistema de módulos que você vai usar, então picando em torno do código do núcleo é uma tática de aprendizagem útil. Além disso, muito do que você vai fazer com Magento é primordiais classes existentes. O que eu estou cobrindo aqui é criar novas funcionalidades, não substituindo. Tenha isso em mente quando você está olhando para os exemplos de código lá fora.

Vou começar com a sua primeira pergunta, mostrando-lhe como configurar um controlador / router para responder a uma URL específica. Este será um pequeno romance. Eu poderia ter tempo mais tarde para os temas relacionados com modelo / modelo, mas por agora, eu não sei. Vou, no entanto, falar brevemente à sua pergunta SQL.

Magento usa um href="http://en.wikipedia.org/wiki/Entity-Attribute-Value_model" rel="noreferrer"> EAV arquitetura de banco de dados

aviso final. Estou usando o Magento por cerca de duas ou três semanas, então caveat.emptor. Este é um exercício para ver se entendi em minha cabeça, tanto quanto é a ajuda de estouro de pilha.

Criar um módulo

Todas as adições e personalizações para Magento são feitas através de módulos. Então, a primeira coisa que você precisa fazer é criar um novo módulo. Criar um arquivo XML em app/modules nomeado como segue

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 é um namespace exclusivo para suas modificações, ele não tem que ser o nome da sua empresa, mas que a convenção recomendada meu magento. HelloWorld é o nome do seu módulo.

Limpar a aplicação de cache

Agora que o arquivo de módulo está no lugar, vamos precisar deixar Magento saber sobre ele (e verificar o nosso trabalho). Na aplicação admin

  1. Vá para System-> Gerenciamento de cache
  2. Selecione Atualizar no menu Todos os Cache
  3. Clique em Salvar configurações de cache

Agora, nós temos certeza que Magento sabe sobre o módulo

  1. Vá para System-> Configuração
  2. Clique em Avançado
  3. No "saída módulos Desativar" configuração caixa, olhar para o seu novo módulo chamado "MyCompanyName_HelloWorld "

Se você pode viver com o desempenho lento para baixo, você pode querer desligar o cache do aplicativo durante o desenvolvimento / aprendizagem. Nada é mais frustrante em seguida, esquecer a limpar o cache e se perguntando por que as alterações não estão aparecendo.

Configuração a estrutura do diretório

A seguir, vamos precisar de configurar uma estrutura de diretório para o módulo. Você não vai precisar de todos esses diretórios, mas não há mal nenhum em colocá-los todos até agora.

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

E adicione um arquivo de configuração

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

e dentro do arquivo de configuração, adicione a seguinte, que é essencialmente uma configuração "em branco".

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

Simplificando as coisas, este arquivo de configuração permitirá que você diga Magento o código que você deseja executar.

Configurando o router

Em seguida, precisamos configurar roteadores do módulo. Isso permitirá que o sistema sabe que somos manusear qualquer URLs na forma de

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

Assim, no seu arquivo de configuração, adicione a seguinte seção.

<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>

O que você está dizendo aqui é "qualquer URL com a frontName de helloworld ...

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

deve usar o MyCompanyName_HelloWorld controlador frontName".

Assim, com a configuração acima no lugar, quando você carregar a página helloworld acima, você vai ter uma página 404. Isso é porque nós não criamos um arquivo para o nosso controlador. Vamos fazer isso agora.

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

Agora tente carregar a página. Progresso! Em vez de um 404, você vai ter uma exceção PHP / Magento

Controller file was loaded but class does not exist

Então, abra o arquivo que acabou de criar, e cole no código a seguir. O nome das necessidades da classe a ser baseado no nome fornecido no seu roteador.

<?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";
    }
}

O que acabamos de configuração é o controlador de módulo / frontName. Este é o controlador padrão ea ação padrão do módulo. Se você deseja adicionar controladores ou ações, você tem que lembrar que a primeira parte de árvore de uma Magento URL são imutáveis ??eles vão sempre ir por este caminho http://example.com/magento/index.php/frontName/controllerName/actionName

Então, se você quer combinar este url

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

Você terá que ter um FooController, o que você pode fazer desta maneira:

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';
    }
}

Por favor note que o controlador padrão IndexController ea ação indexAction lata padrão, implícita, mas tem que ser explícito se algo vir depois dela. Então http://example.com/magento/index.php/helloworld/foo irá coincidir com a FooController controlador eo indexAction acção e não a fooAction do IndexController ação. Se você quiser ter um fooAction, na IndexController controlador então você tem que chamar este controlador explicitamente como desta maneira: http://example.com/magento/index.php/helloworld/index/foo porque a segunda parte da url é e será sempre o controllername. Este comportamento é uma herança do Zend Framework agrupados em Magento.

Agora você deve ser capaz de atingir os seguintes URLs e ver os resultados de suas instruções echo

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

Então, isso deve dar-lhe uma idéia básica sobre como Magento despachos para um controlador. A partir daqui eu tinha picar recomendado nas classes do controlador Magento existentes para ver como modelos e o sistema de template / layout deve ser utilizado.

Outras dicas

Eu estive lutando com Magento para o último mês ou assim e eu ainda estou tentando descobrir isso. Portanto, este é um caso de um cego guiando outro cego. Há pouco na forma de documentação e o fórum / wiki é caótico na melhor das hipóteses. Não só isso, mas existem várias soluções que são ou desatualizado ou longe de ser ideal. Eu não tenho certeza se você tem um projeto ou apenas tentando descobrir isso, mas é provavelmente mais fácil se você começou com modificar a funcionalidade existente em vez de criar algo completamente novo. Para que eu definitivamente ir com os "artigos recomendados para desenvolvedores" no wiki. O novo método de pagamento foi uma verdadeira revelação.

Para a depuração Eu definitivamente recomendo usando FirePHP e olhando para a sua fonte de HTML quando algo dá errado. O método ole eco depuração realmente não funciona muito bem.

A arquitetura geral é tão tediosamente complexo, que mesmo se eu entendi completamente, eu preciso escrever um livro para cobri-lo. O melhor que posso fazer é dar-lhe conselhos que eu gostaria que alguém tivesse me dado quando eu comecei ...

Fique longe de arquivos principais. Não modificá-los, em vez escrever o seu próprio módulo e substituir o que você precisa.

Magento usa arquivos de configuração que consistem em XML para decidir o que ele precisa fazer. A fim de obtê-lo para executar o seu próprio material, em oposição a funcionalidade do núcleo você precisa do xml correto. Infelizmente não existe um guia sobre como construir você XML; você precisa olhar para exemplos e fazer alguns testes sérios. Para as coisas complicam o conteúdo desses arquivos é em grande parte maiúsculas de minúsculas. No entanto, se você dominar estas você pode substituir qualquer parte da funcionalidade básica que contribui para um sistema muito poderoso.

Magento usa métodos como Mage::getModel('mymodel'), Mage::getSingleton('mysingleton'), Mage::helper('myhelper') a objetos de retorno de certas classes. Ele encontra estes por padrão no seu núcleo namespace. Se você quiser usar o seu próprio, você precisará substituir estes em seu arquivo config.xml.

O nome de suas classes devem corresponder para a pasta que está dentro.

Um monte de objetos no Magento, em última análise estender algo chamado Varien_Object. Esta é uma classe de uso geral (como uma espécie de canivete suíço) e seu propósito na vida é para permitir que você definir seus próprios métodos / variáveis ??na mosca. Por exemplo, você vai vê-lo usado como uma matriz glorificado para passar dados a partir de um método para outro.

Durante o desenvolvimento certifique-se de cache está desativado. Ela vai fazer magento dolorosamente lento, mas vai poupar um monte de traumatismo craniano (de bater-lo em sua mesa).

Você verá $this sendo muito utilizada. Isso significa uma classe diferente, dependendo de qual arquivo você vê-lo. get_class($this) é seu amigo, especialmente em conjunto com FirePHP.

Jot coisas no papel. Muito. Há inúmeros factóides pouco que você vai precisar de 1-2 dias depois de encontrá-los.

Magento ama OO. Não se surpreenda se traçar um método leva você através de 5-10 classes diferentes.

Leia o guia do designer aqui . É destinado principalmente para designers gráficos, mas você necessidade para entender onde e por que a saída do seu módulo vai acabar. Para que não se esqueça de ligar "dicas caminho de modelo" na seção desenvolvedor do painel de administração.

Há mais, mas vou parar por aqui antes de isso se transforma em uma dissertação.

Vou sim recomendar Mage2Gen , isso vai ajudá-lo a gerar o clichê e você pode se concentrar apenas no core business lógica. ele apenas ajuda a acelerar as coisas.

Um módulo Magento é um grupo de diretórios contendo blocos, controladores, ajudantes, e modelos que são necessárias para criar um recurso de loja específica. É a unidade de personalização na plataforma Magento. Magento módulos podem ser criados para executar várias funções com o apoio de lógica para a experiência do usuário influência e aparência loja. Ele tem um ciclo de vida que lhes permite ser instalado, excluído ou desativado. Do ponto de vista de ambos os comerciantes e desenvolvedores de extensão, os módulos são a unidade central da plataforma Magento.

Declaração de Módulo

Temos que declarar o módulo usando o arquivo de configuração. Como Magento 2 pesquisa para a configuração do módulo no diretório etc do módulo. Então agora vamos criar configuração de arquivo module.xml.

O código será parecido com este:

<?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 do Módulo O módulo deve ser registrado no sistema Magento 2 usando classe Magento Component secretário. Agora vamos criar o registration.php arquivo no diretório módulo root:

app/code/Cloudways/Mymodule/registration.php

O código será parecido com este:

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

Verificar Status do Módulo Depois de seguir os passos acima, que teria criado um módulo simples. Agora nós estamos indo para verificar o status do módulo e se ele está ativado ou desativado usando a seguinte linha de comando:

php bin/magento module:status

php bin/magento module:enable Cloudways_Mymodule

Compartilhe sua opinião depois de ter passado por processo completo

Eu estava tentando fazer meu módulo de magaplaza Olá tutorial mundo, mas algo deu errado. Eu importados código desse módulo https://github.com/astorm/magento2-hello-world partir github e funcionou. a partir desse módulo, i criou um Categorias subcategorias ajax selecionar queda baixos Module. Após instalá-lo em aap diretório / código de sua instalação magento2 seguir esta URL .. http: // www .example.com / hello_mvvm / Olá / mundo Você pode baixar o código a partir daqui https://github.com/sanaullahAhmad/Magento2_cat_subcat_ajax_select_dropdowns e colocá-lo em sua pasta AAP / code. de executar estes comandos ...

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

Agora você pode verificar a funcionalidade do módulo com seguinte URL http: // {{www.example.com}} / hello_mvvm / Olá / world

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top