Debido a que últimamente tuve muchos problemas con la extensión gratuita y comercial, decidí hacer esta pregunta y responderla con los pasos que generalmente sigo al escribir una extensión. Siéntase libre de editar la respuesta o agregar una nueva.
En la mayoría de los casos, cuando instalo una extensión o un tema, tengo que pasar unas horas (a veces más, a veces menos) para que funcione en todos los entornos que necesito:
- dev: generalmente
localhost
donde el proyecto está en una subcarpeta - preprod & live
Esto ha sucedido incluso con extensiones de grandes proveedores de extensiones (que deberían permanecer sin nombre al menos hasta que me enoje mucho y agregue sus nombres aquí)
Entonces, la pregunta principal es ... ¿qué pasos debo tener en cuenta al escribir una extensión para garantizar la calidad? del código y hacer que sea más fácil para una persona técnica y no técnica usarlo y que una persona técnica lo cambie?
Respuestas:
Esto es lo que suelo hacer:
error_reporting
encendido.isDeveloperMode
set totrue
. Simplemente agrégueloSetEnv MAGE_IS_DEVELOPER_MODE 1
a suhttpd.conf
archivo (o el archivo correspondiente para Nginx u otra cosa)<depends><Mage_Catalog /></depend>
community
úselo como codepool para dar a los desarrolladores la oportunidad de anular algunas clases sin modificar el código directamenteapp/design/frontend/base/default
para que estén disponibles para todos los temas.app/design/adminhtml/default/default
y no cambie el tema de administrador. Es posible que desee cambiarlo en uno de mis módulos.easylife_articles.xml
yapp/design/.../easylife_articles
easylife_articles/images/doh.png
core_config_data
tabla.Select * from sales_flat_order where ...
. Usa ayZend_Select
transforma los nombres de las tablas usando->getTable('sales/order')
.js
archivos en la plantilla. Equivocada<script type="text/javascript" src="../js/some.js"></script>
. Derecho<script type="text/javascript" src="<?php echo Mage::getBaseUrl('js').'some.js'?>"></script>
Mage_Catalog_Model_Product
para agregar el métodogetProductArticles()
. Derecho . En su ayudante agreguegetProductArticles(Mage_Catalog_Model_Product $product)
readme.txt
archivoarticles/adminhtml_articles/index
. URL de administrador correctaadmin/articles/index
media
carpeta. Utilizarskin
. Lamedia
carpeta generalmente no está versionada y esto hace que sea más difícil mover el sitio web a diferentes entornos.on
y cachéoff
.<? $this->doSomething() ?>
). Use etiquetas completas (<?php $this->doSomething()?>
). Tampoco use etiquetas de eco cortas, todavía. (<?="D'oh";?>
) Usar (<?php echo "D'oh";?>
)$this->__
y agregue el archivo de traducción de la configuración regional con sus textos (app/local/en_US/Easylife_Articles.csv
) al menos poren_US
idioma. No todos los sitios web están construidos en inglés y la identificación de textos para traducir lleva mucho tiempo.var/log/system.log
archivo. Los errores enumerados aquí no se muestran incluso con el modo desarrollador activado. Si hay al menos un error, terminará con un archivo de registro grande después de unos meses de ejecutar la extensión.Eso es lo que tenemos hasta ahora. Agregaré más tan pronto como piense en otra cosa.
fuente
If you encrypt your code files with Ioncube (or something else)...well...I just hate you and I hope your business goes bankrupt
Siento lo mismo. Hay algunas compañías que no ofrecen una versión actualizada, tendrá que pagar por ellas, es realmente frustrante para mí y no entiendo por qué quieren vender el mismo producto una y otra vez (¿para ganar dinero? Obviamente). Simplemente ya no compro su producto. Sabes de quién estoy hablando.Soy un gran fanático del uso de modman para poder desarrollar y controlar la fuente solo mi extensión y dejar los archivos centrales y la estructura de carpetas sin cambios. También hace que las pruebas en diferentes instalaciones sean más fluidas.
Ah, y una sugerencia masiva siempre intente instalar su extensión empaquetada localmente en una instalación limpia de magento antes de cargarla en Magento Connect, me he perdido los archivos tantas veces en el administrador de paquetes.
fuente
Andreas von Studnitz y el Dr. Nikolai Krambrock hicieron una buena presentación sobre la calidad del código en el Meet Magento DE 2014. Distinguen entre la calidad del código general y la calidad del código específico de Magento. En resumen, existen las siguientes reglas generales:
Aún más importantes son las reglas específicas de Magento:
Aquí hay más detalles y un video de la presentación: http://www.code4business.de/code-quality-magento/
fuente
Si vende su extensión o la comparte con otras personas, piense en escribir código que sea legible para los humanos.
$productIds
lugar de$ids
public function myOnProductSaveMethod() {...}
dice ... nada, perotryDisableInternetOnProductSave()
dará una pista de que lo planeadosomeMethod(Varien_Data_Db_Collection $collection)
$_eventPrefix
propiedad set de modelos (y$_eventObject
) para hacerlos más accesibles a los observadoresconfig.xml
<validate>
nodos a los campos ensystem.xml
adminhtml.xml
Mysql4
clasescomposer.json
también para facilitar la implementacióndeclare(strict_types=1);
y defina sus tipos de entrada y salida* 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) ...
@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@SuppressWarnings(PHPMD.CamelCaseMethodName)
- métodos heredados@SuppressWarnings(PHPMD.StaticAccess)
- si usaMage::
u otras llamadas estáticas** Utilizado a menudo:
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
(no0
como se esperaba)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
Lo mismo para el orden SQL
ASC
vsZend_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 de10
a4
, por lo que esto podría romper su extensión:Usar esto agrega una consulta, pero estarás seguro ...
fuente
@ marius, con respecto a los estándares de codificación (punto 24 de su lista).
Me gusta usar PHP_CodeSniffer junto con EQP y ECG CS para aplicar automáticamente estos estándares.
Usando PHP_CodeSniffer usted no tiene que preocuparse por olvidar las cosas como reemplazar
array()
con[]
, evitar el usois_null
, deje variables locales no utilizados o incluso un método sin bloque PHPDoc.PHP_CodeSniffer siempre te lo contará.
fuente