Jika Anda menjual ekstensi Anda atau membagikannya kepada orang lain, pikirkan tentang menulis kode yang dapat dibaca manusia.
- jangan membuat metode terlalu rumit
- tambahkan blok DOC ke metode Anda *
- gunakan nama variabel yang tepat, seperti
$productIdsbukan$ids
- sama untuk metode,
public function myOnProductSaveMethod() {...}mengatakan ... tidak ada, tetapi tryDisableInternetOnProductSave()akan memberikan petunjuk keinginan yang direncanakan
- gunakan petunjuk tipe yang masuk akal
someMethod(Varien_Data_Db_Collection $collection)
- hindari angka ajaib dan string **
- jika Anda menggunakan model, atur
$_eventPrefixproperti (dan $_eventObject) agar lebih mudah diakses oleh pengamat
- jika Anda menambahkan bidang konfigurasi sistem
- atur nilai default di
config.xml
- tambahkan
<validate>node ke bidang dalamsystem.xml
- tambahkan sumber daya ACL ke
adminhtml.xml
- jangan tambahkan entri menu tingkat pertama yang tidak berguna / iklan di admin backend - baik di topbar maupun di bagian config
- tambahkan sumber daya ACL untuk semua aksi pengontrol (juga massactions!)
- memastikan kueri Anda berfungsi dengan awalan tabel DB
- pikirkan (tidak) keterbelakangan ke belakang (ini benar-benar berdasarkan pendapat)
- jangan mendukung
Mysql4kelas
- jangan gunakan metode yang sudah usang
- pastikan ekstensi Anda berfungsi seperti yang diharapkan dalam setiap kasus - tambahkan UnitTests (PhpUnit misalnya)
- selain David Manners ... tambahkan
composer.jsonjuga untuk membuat penempatan lebih mudah
- karena PHP5.6 adalah EOL, tulis kode Anda untuk PHP7. Gunakan
declare(strict_types=1);dan tentukan tipe input dan output Anda
- Magento2: periksa kode Anda dengan alat analisis kode statis seperti phpstan . Dukungan untuk metode ajaib di sini . (komit terbaru bekerja dengan 2.3, sebelumnya untuk 2.1 / 2.2 - yang memerlukan phpstan 0.8.5)
* Blok DOC:
Jika Anda memeriksa kode Magento-1 Anda dengan PHP_CodeSniffer untuk standar PSR2 atau PHPMD, Anda mungkin ingin menambahkan baris ini (yang masuk akal) ...
- ke kelas
@phpcs:disable PSR1.Classes.ClassDeclaration.MissingNamespace
@phpcs:disable PSR2.Classes.PropertyDeclaration.Underscore - properti yang diwarisi
@phpcs:disable Squiz.Classes.ValidClassName.NotCamelCaps
@SuppressWarnings(PHPMD.CamelCaseClassName)
@SuppressWarnings(PHPMD.CamelCasePropertyName) - properti yang diwarisi
- untuk metode
@SuppressWarnings(PHPMD.CamelCaseMethodName) - metode yang diwariskan
@SuppressWarnings(PHPMD.StaticAccess)- jika Anda menggunakan Mage::atau panggilan statis lainnya
** Sering digunakan:
- ID toko admin
0 > Mage_Core_Model_App::ADMIN_STORE_ID
- produk
status
1 > Mage_Catalog_Model_Product_Status::STATUS_ENABLED
2> Mage_Catalog_Model_Product_Status::STATUS_DISABLED (tidak 0seperti yang diharapkan)
- produk
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
- produk
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
Sama untuk urutan SQL ASCvs Zend_Db_Select::SQL_ASC (misalnya) .
Mengatakan "itu bukan keharusan karena itu tidak akan pernah berubah" ? Misalnya ID entitas untuk catalog_productatribut yang diubah di suatu tempat antara Magento 1.5 dan 1.9 dari 10menjadi 4, jadi ini dapat merusak ekstensi Anda:
$collection->addFieldToFilter('entity_type_id', 10)
Menggunakan ini sebagai gantinya menambahkan satu permintaan, tetapi Anda akan aman ...
$entityTypeId = Mage::getModel('eav/config')
->getEntityType(Mage_Catalog_Model_Product::ENTITY)
->getEntityTypeId();
$collection->addFieldToFilter('entity_type_id', $entityTypeId)