Se você vender sua extensão ou compartilhá-la com outras pessoas, pense em escrever um código legível por humanos.
- não torne o método muito complexo
- adicione blocos DOC aos seus métodos *
- use nomes de variáveis apropriados, como em
$productIdsvez de$ids
- o mesmo para os métodos,
public function myOnProductSaveMethod() {...}diz ... nada, mas tryDisableInternetOnProductSave()dará uma dica que o planejado
- use dicas de tipo onde faz sentido
someMethod(Varien_Data_Db_Collection $collection)
- evite números e cordas mágicas **
- se você usar modelos, configure a
$_eventPrefixpropriedade (e $_eventObject) para torná-los mais acessíveis aos observadores
- se você adicionar campos de configuração do sistema
- defina os valores padrão em
config.xml
- adicione
<validate>nós aos campos emsystem.xml
- adicionar recursos da ACL a
adminhtml.xml
- não adicione entradas de menu de primeiro nível inúteis / publicitárias no back-end do administrador - nem na barra superior nem nas seções de configuração
- adicione recursos ACL para todas as ações do controlador (massagens também!)
- verifique se suas consultas funcionam com prefixos de tabela do banco de dados
- pense em (não) compatibilidade retroativa (isso é realmente baseado em opiniões)
- não suporta
Mysql4aulas
- não use métodos obsoletos
- garanta que sua extionão funcione conforme o esperado em todos os casos - adicione UnitTests (PhpUnit, por exemplo)
- além de David Manners ... adicione um
composer.jsontambém para facilitar a implantação
- Como o PHP5.6 é EOL, escreva seu código para o PHP7. Use
declare(strict_types=1);e defina seus tipos de entrada e saída
- Magento2: verifique seu código com ferramentas de análise de código estático, como o phpstan . Suporte para métodos mágicos aqui . (o commit mais recente funciona com 2.3, antes para 2.1 / 2.2 - que requer phpstan 0.8.5)
* 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) ...
- para aulas
@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
- para métodos
@SuppressWarnings(PHPMD.CamelCaseMethodName) - métodos herdados
@SuppressWarnings(PHPMD.StaticAccess)- se você usa Mage::ou outras chamadas estáticas
** Usado frequentemente:
- ID da loja do administrador
0 > Mage_Core_Model_App::ADMIN_STORE_ID
- produtos
status
1 > Mage_Catalog_Model_Product_Status::STATUS_ENABLED
2> Mage_Catalog_Model_Product_Status::STATUS_DISABLED (não 0como o esperado)
- produtos
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
- produtos
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 ASCvs Zend_Db_Select::SQL_ASC (por exemplo) .
Dizendo "não é necessário porque nunca vai mudar" ? Por exemplo, o ID da entidade para os catalog_productatributos mudou em algum lugar entre o Magento 1.5 e 1.9 de 10para 4, para que isso possa danificar sua extensão:
$collection->addFieldToFilter('entity_type_id', 10)
Usar isso adiciona uma consulta, mas você estará seguro ...
$entityTypeId = Mage::getModel('eav/config')
->getEntityType(Mage_Catalog_Model_Product::ENTITY)
->getEntityTypeId();
$collection->addFieldToFilter('entity_type_id', $entityTypeId)