Si vende su extensión o la comparte con otras personas, piense en escribir código que sea legible para los humanos.
- no hagas el método demasiado complejo
- agregue bloques DOC a sus métodos *
- usar nombres de variables apropiados, como en
$productIds
lugar de$ids
- lo mismo para los métodos,
public function myOnProductSaveMethod() {...}
dice ... nada, pero tryDisableInternetOnProductSave()
dará una pista de que lo planeado
- use sugerencias de tipo donde tenga sentido
someMethod(Varien_Data_Db_Collection $collection)
- evita los números y cuerdas mágicos **
- si usa la
$_eventPrefix
propiedad set de modelos (y $_eventObject
) para hacerlos más accesibles a los observadores
- si agrega campos de configuración del sistema
- establecer valores predeterminados en
config.xml
- agregar
<validate>
nodos a los campos ensystem.xml
- agregar recursos de ACL a
adminhtml.xml
- no agregue entradas de menú de primer nivel inútiles / publicitarias en el backend de administración, ni en la barra superior ni en las secciones de configuración
- agregue recursos de ACL para todas las acciones del controlador (¡también masacres!)
- asegúrese de que sus consultas funcionen con prefijos de tabla DB
- pensar en (no) compatibilidad hacia atrás (esto realmente está basado en una opinión)
- no apoyar
Mysql4
clases
- no use métodos obsoletos
- asegúrese de que su extionion funcione como se espera en todos los casos: agregue UnitTests (PhpUnit por ejemplo)
- además de David Manners ... agregue
composer.json
también para facilitar la implementación
- como PHP5.6 es EOL, escriba su código para PHP7. Use
declare(strict_types=1);
y defina sus tipos de entrada y salida
- Magento2: verifique su código con herramientas de análisis de código estático como phpstan . Soporte para métodos mágicos aquí . (el último commit funciona con 2.3, antes para 2.1 / 2.2 - requiere phpstan 0.8.5)
* Bloques DOC:
Si verifica su código Magento-1 con PHP_CodeSniffer para el estándar PSR2 o PHPMD , tal vez desee agregar estas líneas (donde tenga sentido) ...
- a las clases
@phpcs:disable PSR1.Classes.ClassDeclaration.MissingNamespace
@phpcs:disable PSR2.Classes.PropertyDeclaration.Underscore
- propiedades heredadas
@phpcs:disable Squiz.Classes.ValidClassName.NotCamelCaps
@SuppressWarnings(PHPMD.CamelCaseClassName)
@SuppressWarnings(PHPMD.CamelCasePropertyName)
- propiedades heredadas
- a los métodos
@SuppressWarnings(PHPMD.CamelCaseMethodName)
- métodos heredados
@SuppressWarnings(PHPMD.StaticAccess)
- si usa Mage::
u otras llamadas estáticas
** Utilizado a menudo:
- ID de la tienda admin
0
> Mage_Core_Model_App::ADMIN_STORE_ID
- producto
status
1
> Mage_Catalog_Model_Product_Status::STATUS_ENABLED
2
> Mage_Catalog_Model_Product_Status::STATUS_DISABLED
(no 0
como se esperaba)
- producto
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
- producto
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
Lo mismo para el orden SQL ASC
vs Zend_Db_Select::SQL_ASC
(por ejemplo) .
¿Decir "no es necesario porque nunca cambiará" ? Por ejemplo, la identificación de entidad para los catalog_product
atributos cambiaron en algún lugar entre Magento 1.5 y 1.9 de 10
a 4
, por lo que esto podría romper su extensión:
$collection->addFieldToFilter('entity_type_id', 10)
Usar esto agrega una consulta, pero estarás seguro ...
$entityTypeId = Mage::getModel('eav/config')
->getEntityType(Mage_Catalog_Model_Product::ENTITY)
->getEntityTypeId();
$collection->addFieldToFilter('entity_type_id', $entityTypeId)