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
$productIdslugar 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
$_eventPrefixpropiedad 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
Mysql4clases
- 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.jsontambié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 0como 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 ASCvs Zend_Db_Select::SQL_ASC (por ejemplo) .
¿Decir "no es necesario porque nunca cambiará" ? Por ejemplo, la identificación de entidad para los catalog_productatributos cambiaron en algún lugar entre Magento 1.5 y 1.9 de 10a 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)