Como tive muitos problemas recentemente com a extensão gratuita e comercial, decidi fazer esta pergunta e respondê-la com as etapas que normalmente sigo ao escrever uma extensão. Sinta-se livre para editar a resposta ou adicionar uma nova.
Na maioria dos casos, ao instalar uma extensão ou um tema, preciso passar algumas horas (às vezes mais, às vezes menos) para fazê-lo funcionar em todos os ambientes de que preciso:
- dev: geralmente
localhost
onde o projeto está em uma subpasta - pré-produção e ao vivo
Isso aconteceu mesmo com extensões de grandes provedores de extensão (que devem permanecer sem nome, pelo menos até que eu fique realmente bravo e adicione seus nomes aqui).
Portanto, a questão principal é ... que etapas devo considerar ao escrever uma extensão para garantir a qualidade do código e tornar mais fácil para uma pessoa técnica e não técnica usá-lo e para uma pessoa técnica alterá-lo?
Respostas:
Aqui está o que eu costumo fazer:
error_reporting
on.isDeveloperMode
definido comotrue
. Basta adicionarSetEnv MAGE_IS_DEVELOPER_MODE 1
ao seuhttpd.conf
arquivo (ou arquivo correspondente ao Nginx ou algo mais)<depends><Mage_Catalog /></depend>
community
como pool de códigos para dar aos desenvolvedores a chance de substituir algumas classes sem modificar o código diretamenteapp/design/frontend/base/default
para disponibilizá-los para todos os temas.app/design/adminhtml/default/default
e não altere o tema do administrador. Talvez eu queira alterá-lo em um dos meus módulos.easylife_articles.xml
eapp/design/.../easylife_articles
easylife_articles/images/doh.png
core_config_data
tabela.Select * from sales_flat_order where ...
. UseZend_Select
ae transforme os nomes das tabelas usando->getTable('sales/order')
.js
arquivos no modelo. Errado<script type="text/javascript" src="../js/some.js"></script>
. Direito<script type="text/javascript" src="<?php echo Mage::getBaseUrl('js').'some.js'?>"></script>
Mage_Catalog_Model_Product
para adicionar o métodogetProductArticles()
. Certo . No seu ajudante, adicionegetProductArticles(Mage_Catalog_Model_Product $product)
readme.txt
arquivoarticles/adminhtml_articles/index
. URL de administrador corretoadmin/articles/index
media
pasta. Useskin
. Amedia
pasta geralmente não possui controle de versão e isso torna mais difícil mover o site para diferentes ambientes.on
e cacheoff
.<? $this->doSomething() ?>
). Use tags completas (<?php $this->doSomething()?>
). Também não use tags de eco curtas, ainda. (<?="D'oh";?>
) Use (<?php echo "D'oh";?>
)$this->__
e adicione o arquivo de tradução local com seus textos (app/local/en_US/Easylife_Articles.csv
) pelo menos para oen_US
idioma. Nem todos os sites são construídos em inglês e a identificação dos textos a serem traduzidos é demorada.var/log/system.log
arquivo. Os erros listados aqui não são mostrados, mesmo com o modo de desenvolvedor ativado. Se houver pelo menos um erro, você acabará com um arquivo de log grande após alguns meses de execução da extensão.Isso é o que tem até agora. Acrescentarei mais assim que pensar em outra coisa.
fonte
If you encrypt your code files with Ioncube (or something else)...well...I just hate you and I hope your business goes bankrupt
Eu sinto o mesmo. Existem algumas empresas que não oferecem a versão atualizada, você terá que pagar por elas, é realmente frustrante para mim e não entende por que elas querem vender o mesmo produto repetidamente (para ganhar dinheiro? Obviamente). Eu simplesmente não compro mais o produto deles. Você sabe de quem eu estou falando.Sou um grande fã do uso do modman, para que eu possa desenvolver e controlar o código-fonte apenas minha extensão e deixar os arquivos principais e a estrutura de pastas inalterada. Também faz com que os testes em diferentes instalações sejam mais suaves.
Ah, e uma dica massiva sempre tenta instalar sua extensão empacotada localmente em uma instalação limpa do magento antes de carregá-la no Magento Connect, perdi arquivos tantas vezes no gerenciador de pacotes.
fonte
Andreas von Studnitz e Dr. Nikolai Krambrock fizeram uma boa apresentação sobre a qualidade do código no Meet Magento DE 2014. Eles distinguem entre qualidade geral do código e qualidade específica do Magento. Em resumo, existem as seguintes regras gerais:
Ainda mais importantes são as regras específicas do Magento:
Aqui estão mais alguns detalhes e um vídeo da apresentação: http://www.code4business.de/code-quality-magento/
fonte
Se você vender sua extensão ou compartilhá-la com outras pessoas, pense em escrever um código legível por humanos.
$productIds
vez de$ids
public function myOnProductSaveMethod() {...}
diz ... nada, mastryDisableInternetOnProductSave()
dará uma dica que o planejadosomeMethod(Varien_Data_Db_Collection $collection)
$_eventPrefix
propriedade (e$_eventObject
) para torná-los mais acessíveis aos observadoresconfig.xml
<validate>
nós aos campos emsystem.xml
adminhtml.xml
Mysql4
aulascomposer.json
também para facilitar a implantaçãodeclare(strict_types=1);
e defina seus tipos de entrada e saída* Blocos DOC:
Se você verificar seu código Magento-1 com PHP_CodeSniffer para PSR2 padrão ou PHPMD, talvez queira adicionar essas linhas (onde faz sentido) ...
@phpcs:disable PSR1.Classes.ClassDeclaration.MissingNamespace
@phpcs:disable PSR2.Classes.PropertyDeclaration.Underscore
- propriedades herdadas@phpcs:disable Squiz.Classes.ValidClassName.NotCamelCaps
@SuppressWarnings(PHPMD.CamelCaseClassName)
@SuppressWarnings(PHPMD.CamelCasePropertyName)
- propriedades herdadas@SuppressWarnings(PHPMD.CamelCaseMethodName)
- métodos herdados@SuppressWarnings(PHPMD.StaticAccess)
- se você usaMage::
ou outras chamadas estáticas** Usado frequentemente:
0
>Mage_Core_Model_App::ADMIN_STORE_ID
status
1
>Mage_Catalog_Model_Product_Status::STATUS_ENABLED
2
>Mage_Catalog_Model_Product_Status::STATUS_DISABLED
(não0
como o esperado)type
simple
>Mage_Catalog_Model_Product_Type::TYPE_SIMPLE
bundle
>Mage_Catalog_Model_Product_Type::TYPE_BUNDLE
configurable
>Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE
grouped
>Mage_Catalog_Model_Product_Type::TYPE_GROUPED
virtual
>Mage_Catalog_Model_Product_Type::TYPE_VIRTUAL
visibity
1
>Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE
2
>Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG
3
>Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_SEARCH
4
>Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH
O mesmo para a ordem SQL
ASC
vsZend_Db_Select::SQL_ASC
(por exemplo) .Dizendo "não é necessário porque nunca vai mudar" ? Por exemplo, o ID da entidade para os
catalog_product
atributos mudou em algum lugar entre o Magento 1.5 e 1.9 de10
para4
, para que isso possa danificar sua extensão:Usar isso adiciona uma consulta, mas você estará seguro ...
fonte
@ marius, em relação aos padrões de codificação (ponto 24 da sua lista).
Eu gosto de usar PHP_CodeSniffer junto com EQP e ECG CS para aplicar automaticamente esses padrões.
Usando o PHP_CodeSniffer, você não precisa se preocupar em esquecer coisas como substituir
array()
por[]
, evitar o usois_null
, deixar variáveis locais não utilizadas ou até mesmo um método sem o bloco PHPDoc.PHP_CodeSniffer sempre falará sobre isso.
fonte