Magento :: Boas Práticas

Introdução

Este não é um tutorial. Esta é uma lista (colaborativa) de coisas que eu acho que você deve fazer como um Magento Developers. Este é um documento live e adoraria algumas recomendações sobre o conteúdo, bem como um outros olhos sobre o conteúdo.

Tema

O tema que acompanha sua loja vai ser sempre o maior componente de seu desenvolvimento e por isso é importante construí-lo corretamente.

Blocks

  • Desenvolva seus blocos de tal forma que o próximo desenvolvedor pode fazer as modificações necessárias chamando <action method="name" /> no layout.xml.

  • Não substitua o método getTemplate(), se o fizer, use primeiro $this->hasData('template').

  • Não use $this->assign($name, $value) nos blocos. Ninguém gosta de surpresas.

Templates

  • Certifique-se de usar $this->__('') nas string para tradução.

  • Adicione no topo do arquivo /** @var $this Mage_Core_Block_Template */ (substituindo para a classe correta), sua IDE vai adorar.

  • Mantenha o máximo de sua lógica possível em seu bloco. Isso faz com que a lógica seja reutilizável e permita a delegação das tarefas de templates para membros menos experientes da equipe.

Layouts

  • Use <update handle=""> para refatorar as repetidas declarações de blocos.

  • Mova blocos de uma referência para outra usando <action method="unsetChild"></action> e <action method="insert"></action>.

  • Crie um arquivo local.xml para conter todas as modificações na sua loja. Não crie catalog.xml, customer.xml, page.xml e etc.

  • Um tema reutilizável é para todos os efeitos uma extensão para Magento, não deve ser fornecido com local.xml personalizado.

  • Ao criar uma extensão que requer alterações de layout:


    • Não entregue com uma cópia de um arquivolocal.xml.

    • Crie o seu próprio arquivo de layout com um nome exclusivo seguindo o seu namespace módulo, por exemplo $companyname/$modulename.xml.

    • Coloque o arquivo de layout (e seus arquivos de template) no tema base/default para que ele possa ser acessado por todos os temas instalados.

Extensões

Todas as modificações para a funcionalidade central do Magento deve ser feito por meio de extensões Magento.

Um forte incentivo para a migração para o Magento é o número de extensões no Magento Connect.

Ao contrário da Apple Store, não há nenhuma revisão de código nem controle de qualidade no procedimento para publicação. Essas extensões devem residir na pasta community.

Quando se cria uma nova loja Magento, normalmente devemos adicionar códigos customizados e para isso devemos:


  • Sobrescrever funções do core.

  • Sobrescrever funções de módulos que estão na community.

  • Adicionar funções independentes / adicionais.


Essas atualizações deverão ser feitas na pasta code/local.

Extensões de Terceiros

  • Sempre revise o código de qualquer extensão que instalar no site do cliente.

  • Não edite qualquer extensão de terceiro diretamente, porque as alterações podem ser perdidas quando a extensão é atualizada. Em vez disso, crie o seu próprio módulo local que depende do que você deseja editar ou que reescreve seus models / blocks ou mesmo usa os eventos para alcançar o resultado desejado.

  • Verifique se a extensão que você está prestes a instalar não reescrever quaisquer modelos ou blocos já reescritas por outras extensões em sua instância Magento. Se isso acontecer, você enfrentará um conflito de reescrita e você precisará fazer o seu próprio módulo local que depende de ambos os módulos (assim será carregado após eles) e reescreve os mesmos models/blocks de uma forma que não impeça que os módulos conflitantes parem de funcionar correctamente.

  • Crie uma lista de fornecedores confiáveis de extensão (e não confiáveis).

Observers

A melhor maneira de adicionar código no Magento é fazer uso do sistema de eventos. Isso permite que o código personalizado possa ser disparado após o recebimento de um evento, sem ter que reescrever modelos ou blocos. Desenvolvendo com observers significa que o código é mais independente e menos propensos ao conflito com outras extensões.

  • Você pode conferir os eventos que podem ser usados nessa página.

  • Quando desenvolvedores tentam criar suas extensões e eventos, consideram extender ela no futuro com Mage::dispatchEvent.

Área Administrativa

  • Use o ACL para restringir o acesso da interface administrativa.

  • Extenda Mage_Adminhtml_Controller_Action quando criar sua controllers para herdar as alterações de configuração da sessão e CSRF, entre outras coisas.

  • Mude o /admin para evitar ataques.

Debug

Há uma abundância de métodos para depurar questões Magento. A maioria dos problemas podem ser resolvidos com uma compreensão fundamental de como os componentes se encaixam, juntamente com uma boa idéia de onde começar a procurar. Para todo o resto há Xdebug.

O Varien_Object

  • Não use o var_dump(), você provavelmente vai se deparar com uma WSOD.


Você pode inspecionar um objeto com Varien_Object usando o método ->debug().

Log

  • Escreva seus log em var/log usando Mage::log($message, $severity, $filename, $force).

  • Use em vários níveis como em Zend_Log.

  • Faça a seu próprio arquivo, tentar furar a convenção de nomenclatura $company_$extension_$specific.log (Por exemplo: meanbee_shippingrules_requests.log).

  • Ative o Debug Mode para forçar o log de sua extensão, sempre vem globalmente desabilitado.

  • Aplicações de ecommerce exigem rápido rastreamento de problemas, então log qualquer coisa que possa tornar a sua vida mais fácil no futuro deve ser bem-vindo.

  • Só há uma coisa pior que um arquivo de log vazio, um arquivo de log lotado informações inúteis.

Consultas no Banco

  • Há um série de métodos para depuração SQL.


    • $collection->getSelect()->assemble()

    • $collection->printLogQuery(true) deverá exibir, e $collection-> com printLogQuery(false, true) deverá colocar no arquivo system.log.

    • Configurando Varien_Db_Adapter_Pdo_Mysql com ::$_debug para true irá registrar todas as consultas para Varien_Db_Adapter_Pdo_Mysql com ::$_debugFile.

Performace

Lojas devem ser rápidas, e isso tem um preço.

Frontend

A maioria das técnicas tradicionais de desenvolvedores frontend para melhorar a velocidade do seu site se aplicam a Magento.


  • Ativar fusão arquivos CSS e JS em Magento. Você pode usar Fooman Speedster avançada para minification on-the-fly e inteligente agrupamento arquivo combinado..

  • Não substitua o método getTemplate(), se o fizer, use primeiro $this->hasData('template').

  • Não use $this->assign($name, $value) nos blocos. Ninguém gosta de surpresas.

Backend

  • Existem alguns métodos básicos para acelerar a instalação Magento, alguns dos quais são descritos em um whitepaper Magento oficial sobre o tema.

  • Use Percona ao invés de MySQL.

  • Utilize o PHP >= 5.4 para uma melhor performace (PATCH de suporte para 5.4).

  • Instale o bytecode cache para PHP assim como o APC.

  • Se lembre de desativar o Xdebug em servidores que estão em produção.

  • Use NGINX + PHP-FPM no lugar de apache.

  • Ative o cache em servidores de produção.

  • Use o Varnish para um full page cache. Para ter apoio utilize Turpentine.

Ferramentas de Desenvolvimento

Há uma série de ferramentas que surgiram para tornar a sua vida como um desenvolvedor Magento mais fácil.


  • Modman - Gerenciador de módulos.

  • Ecomdev_PHPUnit - Integração com PHPUnit.

  • Magerun - CLI para Magento.

  • Magetool - Outro CLI pra Magento.

  • MageFlow - Sincronize dados de seus ambientes Test, Develop e Production.

  • PHPCS - PHPCodeSniffer, mantenha seu código consistente.

  • PhpStorm - Junto com o plugin PAGO Magicento, possíbilita grandes vantagens no desenvolvimento Magento.

  • Brackets Magento - Plugin FREE Magento para Brackets que auxilia no desenvolvimento.

  • Atom Magento - Plugin FREE Magento para Atom que auxilia no desenvolvimento.

  • DevAlias - Conjunto de Alias para desenvolvedores Magento.

Testes

Testes Magento pode ser difícil às vezes. Usando Behat e PHPSpec fornece um fluxo de trabalho TDD útil que ajuda a automatizar armazenamentos de usuários e extensões de design.


BehatMage

Behat


Desenvolvimento orientado a comportamento é uma metodologia de "fora para dentro". Inicia-se no exterior, identificando os resultados do negócio, e, em seguida, perfura para dentro do conjunto de recursos que permite alcançar esses resultados. Cada recurso é capturada como uma "história", que define o âmbito de aplicação do recurso, juntamente com a sua aceitação criteria.Behat é um framework php BDD, que permite que os desenvolvedores para testar aplicações PHP usando frases legíveis para descrever recursos e cenários sobre como o aplicação deve comportar-se de forma a testar a sua funcionalidade.


BehatMage


BehatMage é uma extensão para provar Behat com contexto sobre a funcionalidade específica Magento, permitindo que os desenvolvedores para definir cenários e medidas relativas a testes de Magento com tools.Reasons BDD para usar BehatMage sobre apenas Behat são que nós incluímos algumas definições passo inicial para trabalhar com Magento um pouco Mais fácil. Por Exemplo. I fazer o login como ... eu vejo na configuração ... Bem como acessórios que nos permitem colocar o sistema em um estado conhecido antes de começar o teste. Por Exemplo. Dados os seguintes produtos existem: Estendendo o BehatContext também nos fornece acesso ao namespace Mago assim podemos definir nossas próprias afirmações com base em objetos Magento.


Uma vez BehatMage é instalado, você pode então usar Behat dentro de um projeto Magento. BehatMage fornece arquivos contextos adicionais para apoiar Magento, bem como proporcionar acesso a Mago dentro de arquivos de contexto. Para obter mais informações sobre o uso BehatMage consulte o repositório no github aqui.


MageSpec


PHPspec é uma ferramenta de desenvolvimento derivado da técnica BDD chamados especificações ou SpecBDD; não há diferença real entre SpecBDD e TDD diferente da língua que é usada para descrever os cenários e características. Ao usar PHPSpec o foco é sobre o "Comportamento" do método em oposição a TDD tradicional, onde o foco é tudo em "testes". Nós escrevemos nossas especificações como se estivéssemos falando com um suporte de participação no projeto: Ele deve fazer alguma coisa quando eu aplicar alguma outra coisa.


O que é MageSpec


MageSpec é uma extensão da ferramenta SpecBDD PHPSpec, Seu principal objetivo é permitir uma fácil integração em Magento ao descrever o comportamento. Ele faz isso por expor as classes Magento necessários e cria um nível de conhecimento sobre modelos de Blocos e controladores ... MageSpec ajuda a manter o foco no laço refactor vermelho, verde por: Descrição, Implementação, Refatoração.


Nós conseguimos isso através da adição de auxiliares adicionais para o PHPSpec CLI para descrever componentes-chave dentro Magento (Blocos, Modelos, Controllers) este valida o nome do fornecedor eo nome do módulo módulos para garantir a compatibilidade Magento. Um recurso recentemente adicionado é geração automática de código para módulos, incluindo app / etc / modules / .... eo conceito de Magento piscinas de código. Para um desenvolvedor isso nos permite descrever no CLI, implementar no IDE e afirmar através do CLI reduzindo a necessidade de etapas manuais de código clichê e navegador refresca.

Para obter mais informações sobre o uso MageSpec consulte o repositório no github aqui.