Comme j'ai récemment eu beaucoup de problèmes avec les extensions gratuites et commerciales, j'ai décidé de poser cette question et d'y répondre avec les étapes que je suis habituellement en train d'écrire une extension. N'hésitez pas à modifier la réponse ou à en ajouter une nouvelle.
Dans la plupart des cas, lors de l'installation d'une extension ou d'un thème, je dois passer quelques heures (parfois plus, parfois moins) à le faire fonctionner dans tous les environnements dont j'ai besoin:
- dev: généralement
localhost
où le projet est dans un sous-dossier - preprod & live
Ce qui est arrivé même avec des extensions de grands fournisseurs d'extension (qui doivent rester anonymes au moins jusqu'à ce que je suis vraiment vraiment en colère et ajouter leur nom ici)
Donc , la question principale is..what étapes dois - je considérer lors de l' écriture d' une extension pour assurer la qualité du code et faciliter son utilisation par un technicien ou un non-technicien et un technicien pour le modifier?
Réponses:
Voici ce que je fais habituellement:
error_reporting
sur.isDeveloperMode
set totrue
. Ajoutez simplementSetEnv MAGE_IS_DEVELOPER_MODE 1
à votrehttpd.conf
fichier (ou fichier correspondant pour Nginx ou autre chose)<depends><Mage_Catalog /></depend>
community
comme pool de codes pour donner aux développeurs la possibilité de remplacer certaines classes sans modifier directement le code.app/design/frontend/base/default
pour les rendre disponibles pour tous les thèmes.app/design/adminhtml/default/default
et ne changez pas le thème d'admin. Je peux vouloir le changer dans un de mes modules.easylife_articles.xml
etapp/design/.../easylife_articles
easylife_articles/images/doh.png
core_config_data
table.Select * from sales_flat_order where ...
. Utilisez aZend_Select
et transformez les noms de table avec->getTable('sales/order')
.js
fichiers dans le modèle. Mal<script type="text/javascript" src="../js/some.js"></script>
. Droite<script type="text/javascript" src="<?php echo Mage::getBaseUrl('js').'some.js'?>"></script>
Mage_Catalog_Model_Product
pour ajouter la méthodegetProductArticles()
. Droit . Dans votre aide ajoutergetProductArticles(Mage_Catalog_Model_Product $product)
readme.txt
fichierarticles/adminhtml_articles/index
. URL d'administrateur de droiteadmin/articles/index
media
dossier. Utilisezskin
. Lemedia
dossier n'est généralement pas versionné, ce qui rend plus difficile le déplacement du site Web vers différents environnements.on
et cacheoff
.<? $this->doSomething() ?>
). Utilisez des balises complètes (<?php $this->doSomething()?>
). Aussi, n'utilisez pas encore de balises écho courtes. (<?="D'oh";?>
) Utiliser (<?php echo "D'oh";?>
)$this->__
et ajoutez le fichier de traduction des paramètres régionaux avec vos textes (app/local/en_US/Easylife_Articles.csv
) au moins pour laen_US
langue. Tous les sites Web ne sont pas construits en anglais et l'identification des textes à traduire prend beaucoup de temps.var/log/system.log
fichier. Les erreurs répertoriées ici ne sont pas affichées même lorsque le mode développeur est activé. S'il y a au moins une erreur, vous vous retrouvez avec un fichier journal volumineux après quelques mois d'exécution de l'extension.C'est ce qui a jusqu'à présent. J'ajouterai plus dès que je penserai à autre chose.
la source
If you encrypt your code files with Ioncube (or something else)...well...I just hate you and I hope your business goes bankrupt
Je ressens la même chose. Certaines entreprises n'offrent pas la version mise à jour, vous devrez payer pour cela, c'est vraiment frustrant pour moi et je ne comprends pas pourquoi elles veulent vendre le même produit encore et encore (pour gagner de l'argent? Évidemment). Je n'achète plus leur produit. Vous savez de qui je parle.Je suis un grand partisan de l’utilisation de modman, ce qui me permet de développer et de contrôler simplement le code source de mon extension, tout en laissant la structure de fichiers et la structure de dossiers inchangées. Cela facilite également les tests sur différentes installations.
Oh, et un conseil massif essayez toujours d’installer votre extension packagée localement sur une nouvelle installation de magento avant de la télécharger sur Magento Connect. J’ai manqué tant de fichiers dans le gestionnaire de paquets.
la source
Andreas von Studnitz et Nikolai Krambrock ont fait une bonne présentation de la qualité du code sur le Meet Magento DE 2014. Ils font la distinction entre la qualité du code général et la qualité du code spécifique à Magento. En bref, il y a les règles générales suivantes:
Les règles spécifiques à Magento sont encore plus importantes:
Voici quelques détails supplémentaires et une vidéo de la présentation: http://www.code4business.de/code-quality-magento/
la source
Si vous vendez votre extension ou si vous la partagez avec d'autres, songez à écrire un code lisible par l'homme.
$productIds
au lieu de$ids
public function myOnProductSaveMethod() {...}
dit ... rien, maistryDisableInternetOnProductSave()
donnera un indice sur le besoin planifiésomeMethod(Varien_Data_Db_Collection $collection)
$_eventPrefix
propriété set set (et$_eventObject
) pour les rendre plus accessibles aux observateursconfig.xml
<validate>
noeuds aux champs danssystem.xml
adminhtml.xml
Mysql4
courscomposer.json
aussi pour faciliter le déploiementdeclare(strict_types=1);
et définir vos types d'entrée et de sortie* Blocs DOC:
Si vous vérifiez votre code Magento-1 avec PHP_CodeSniffer pour PSR2 standard ou PHPMD, vous voudrez peut-être ajouter ces lignes (là où cela a un sens) ...
@phpcs:disable PSR1.Classes.ClassDeclaration.MissingNamespace
@phpcs:disable PSR2.Classes.PropertyDeclaration.Underscore
- propriétés héritées@phpcs:disable Squiz.Classes.ValidClassName.NotCamelCaps
@SuppressWarnings(PHPMD.CamelCaseClassName)
@SuppressWarnings(PHPMD.CamelCasePropertyName)
- propriétés héritées@SuppressWarnings(PHPMD.CamelCaseMethodName)
- méthodes héritées@SuppressWarnings(PHPMD.StaticAccess)
- si vous utilisezMage::
ou d'autres appels statiques** Souvent utilisé:
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
(pas0
comme peut-être prévu)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
Idem pour SQL
ASC
vs vsZend_Db_Select::SQL_ASC
(par exemple) .Dire "Ce n'est pas nécessaire, cela ne changera jamais" ? Par exemple ID d' entité pour les
catalog_product
attributs a changé quelque part entre 1,5 et 1,9 Magento de10
à4
, donc cela pourrait briser votre extension:Utiliser cette option à la place ajoute une requête, mais vous serez en sécurité ...
la source
@marius, concernant les normes de codage (point 24 de votre liste).
J'aime utiliser PHP_CodeSniffer avec EQP et ECG CS pour appliquer automatiquement ces normes.
L' utilisation PHP_CodeSniffer vous n'avez pas à vous soucier d'oublier des choses comme remplaçant
array()
avec[]
, évitez d' utiliseris_null
, les congés non variables locales ou même une méthode sans bloc PHPDoc.PHP_CodeSniffer vous en parlera toujours.
la source