Da ich in letzter Zeit viele Probleme mit kostenlosen und kommerziellen Erweiterungen hatte, habe ich beschlossen, diese Frage zu stellen und mit den Schritten zu beantworten, die ich normalerweise beim Schreiben einer Erweiterung befolge. Sie können die Antwort jederzeit bearbeiten oder eine neue hinzufügen.
In den meisten Fällen muss ich beim Installieren einer Erweiterung oder eines Themas einige Stunden (manchmal mehr, manchmal weniger) aufwenden, damit es in allen von mir benötigten Umgebungen funktioniert:
- dev: normalerweise,
localhost
wenn sich das Projekt in einem Unterordner befindet - preprod & live
Dies ist sogar bei Erweiterungen von großen Erweiterungsanbietern der Fall (die zumindest so lange namenlos bleiben sollten, bis ich wirklich verrückt werde und ihre Namen hier hinzufüge).
Die Hauptfrage ist also, welche Schritte ich beim Schreiben einer Erweiterung beachten muss, um die Qualität sicherzustellen des Codes zu ändern und es einer technischen und nichttechnischen Person zu erleichtern, ihn zu verwenden, und einer technischen Person, ihn zu ändern?
Antworten:
Folgendes mache ich normalerweise:
error_reporting
auf.isDeveloperMode
set totrue
. FügeSetEnv MAGE_IS_DEVELOPER_MODE 1
es einfach zu deinerhttpd.conf
Datei hinzu (oder der entsprechenden Datei für Nginx oder etwas anderes)<depends><Mage_Catalog /></depend>
community
als Codepool verwenden, um den Entwicklern die Möglichkeit zu geben, einige Klassen zu überschreiben, ohne den Code direkt zu ändernapp/design/frontend/base/default
, um sie für alle Themen verfügbar zu machen.app/design/adminhtml/default/default
und ändern Sie das Admin-Design nicht. Ich möchte es vielleicht in einem meiner Module ändern.easylife_articles.xml
undapp/design/.../easylife_articles
easylife_articles/images/doh.png
core_config_data
Tabelle entfernt werden.Select * from sales_flat_order where ...
. Verwenden Sie aZend_Select
und transformieren Sie die Tabellennamen mit->getTable('sales/order')
.js
Dateien in die Vorlage aufzunehmen. Falsch<script type="text/javascript" src="../js/some.js"></script>
. Richtig<script type="text/javascript" src="<?php echo Mage::getBaseUrl('js').'some.js'?>"></script>
Mage_Catalog_Model_Product
, um die Methode hinzuzufügengetProductArticles()
. Richtig . In Ihrem Helfer hinzufügengetProductArticles(Mage_Catalog_Model_Product $product)
readme.txt
Datei einarticles/adminhtml_articles/index
. Rechte Admin-URLadmin/articles/index
media
Ordner. Verwenden Sieskin
. Dermedia
Ordner ist normalerweise nicht versioniert und dies erschwert das Verschieben der Website in andere Umgebungen.on
und Cacheoff
.<? $this->doSomething() ?>
). Verwenden Sie vollständige Tags (<?php $this->doSomething()?>
). Verwenden Sie auch noch keine kurzen Echo-Tags. (<?="D'oh";?>
). Benutze (<?php echo "D'oh";?>
)$this->__
und fügen Sie die Übersetzungsdatei für das Gebietsschema mit Ihren Texten (app/local/en_US/Easylife_Articles.csv
) hinzu, zumindest für dieen_US
Sprache. Nicht alle Websites sind in englischer Sprache erstellt und die Identifizierung der zu übersetzenden Texte ist zeitaufwändig.var/log/system.log
Datei an. Die hier aufgeführten Fehler werden auch im Entwicklermodus nicht angezeigt. Wenn mindestens ein Fehler auftritt, wird nach einigen Monaten des Ausführens der Erweiterung eine große Protokolldatei angezeigt.Das ist was bisher. Ich werde mehr hinzufügen, sobald mir etwas anderes einfällt.
quelle
If you encrypt your code files with Ioncube (or something else)...well...I just hate you and I hope your business goes bankrupt
Ich fühle das gleiche. Es gibt einige Unternehmen, die keine aktualisierte Version anbieten, für die Sie bezahlen müssen. Für mich ist das sehr frustrierend und ich verstehe nicht, warum sie dasselbe Produkt immer wieder verkaufen möchten (um Geld zu verdienen? Natürlich). Ich kaufe ihr Produkt einfach nicht mehr. Sie wissen, über wen ich spreche.Ich bin ein großer Fan von Modman, damit ich nur meine Erweiterung entwickeln und die Quellcodeverwaltung durchführen kann und die Kerndateien und die Ordnerstruktur unverändert lassen kann. Dadurch wird auch das Testen über verschiedene Installationen hinweg reibungsloser.
Oh und ein großer Tipp: Versuchen Sie immer, Ihre paketierte Erweiterung lokal auf einer Neuinstallation von Magento zu installieren, bevor Sie sie auf Magento Connect hochladen. Ich habe so oft Dateien im Paket-Manager verpasst.
quelle
Andreas von Studnitz und Dr. Nikolai Krambrock haben auf dem Meet Magento DE 2014 eine gute Präsentation zur Codequalität gehalten. Sie unterscheiden zwischen allgemeiner Codequalität und Magento-spezifischer Codequalität. Kurz gesagt gibt es die folgenden allgemeinen Regeln:
Noch wichtiger sind die Magento-spezifischen Regeln:
Hier einige Details und ein Video der Präsentation: http://www.code4business.de/code-quality-magento/
quelle
Wenn Sie Ihre Erweiterung verkaufen oder mit anderen teilen, sollten Sie darüber nachdenken, Code zu schreiben, der für Menschen lesbar ist.
$productIds
anstelle von$ids
public function myOnProductSaveMethod() {...}
sagt ... nichts,tryDisableInternetOnProductSave()
will aber einen tipp geben der geplant istsomeMethod(Varien_Data_Db_Collection $collection)
$_eventPrefix
Eigenschaft (und$_eventObject
), um sie den Beobachtern besser zugänglich zu machenconfig.xml
<validate>
Knoten zu Feldern insystem.xml
adminhtml.xml
Mysql4
Klassencomposer.json
, um die Bereitstellung zu vereinfachendeclare(strict_types=1);
und definieren Sie Ihre Ein- und Ausgabetypen* DOC-Blöcke:
Wenn Sie Ihren Magento-1-Code mit PHP_CodeSniffer für PSR2-Standard oder PHPMD überprüfen, möchten Sie möglicherweise diese Zeilen hinzufügen (wo es Sinn macht) ...
@phpcs:disable PSR1.Classes.ClassDeclaration.MissingNamespace
@phpcs:disable PSR2.Classes.PropertyDeclaration.Underscore
- geerbte Eigenschaften@phpcs:disable Squiz.Classes.ValidClassName.NotCamelCaps
@SuppressWarnings(PHPMD.CamelCaseClassName)
@SuppressWarnings(PHPMD.CamelCasePropertyName)
- geerbte Eigenschaften@SuppressWarnings(PHPMD.CamelCaseMethodName)
- geerbte Methoden@SuppressWarnings(PHPMD.StaticAccess)
- wenn SieMage::
oder andere statische Anrufe verwenden** Oft benutzt:
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
(nicht0
wie erwartet)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
Gleiches gilt für die SQL-Reihenfolge im
ASC
Vergleich zuZend_Db_Select::SQL_ASC
(zum Beispiel) .Zu sagen, "es ist nicht notwendig, weil es sich nie ändern wird" ? Zum Beispiel Entity ID für
catalog_product
Attribute, die irgendwo zwischen Magento 1.5 und 1.9 von10
nach geändert wurden4
, so dass dies Ihre Erweiterung beschädigen könnte:Wenn Sie dies verwenden, wird stattdessen eine Abfrage hinzugefügt, aber Sie sind sicher ...
quelle
@marius, bezüglich der Kodierungsstandards (Punkt 24 in Ihrer Liste).
Ich verwende gerne PHP_CodeSniffer zusammen mit EQP und ECG CS, um diese Standards automatisch durchzusetzen.
Mit PHP_CodeSniffer Sie müssen sich keine Sorgen über Dinge zu vergessen , wie zu ersetzen
array()
mit[]
, vermeiden Sieis_null
, lassen Sie nicht verwendeten lokalen Variablen oder auch ein Verfahren ohne PHPDoc Block.PHP_CodeSniffer wird Sie immer darüber informieren .
quelle