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
$productIds
vez 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
$_eventPrefix
propriedade (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
Mysql4
aulas
- 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.json
també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 0
como 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 ASC
vs 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_product
atributos mudou em algum lugar entre o Magento 1.5 e 1.9 de 10
para 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)