Karena saya memiliki banyak masalah akhir-akhir ini dengan ekstensi gratis dan komersial, saya memutuskan untuk mengajukan pertanyaan ini dan menjawabnya dengan langkah-langkah yang biasanya saya ikuti ketika menulis ekstensi. Jangan ragu untuk mengedit jawaban atau menambahkan yang baru.
Dalam sebagian besar kasus ketika memasang ekstensi atau tema, saya harus menghabiskan beberapa jam (kadang-kadang lebih, kadang-kadang kurang) untuk membuatnya berfungsi pada semua lingkungan yang saya butuhkan:
- dev: biasanya di
localhost
mana proyek berada dalam subfolder - preprod & hidup
Ini telah terjadi bahkan dengan ekstensi dari penyedia ekstensi besar (yang harus tetap tanpa nama setidaknya sampai saya benar-benar marah dan menambahkan nama mereka di sini)
Jadi pertanyaan utamanya adalah .. langkah apa yang harus saya pertimbangkan ketika menulis ekstensi untuk memastikan kualitas kode dan membuatnya lebih mudah bagi orang teknis dan non-teknis untuk menggunakannya dan bagi orang teknis untuk mengubahnya?
Jawaban:
Inilah yang biasanya saya lakukan:
error_reporting
terus.isDeveloperMode
set ketrue
. Cukup tambahkanSetEnv MAGE_IS_DEVELOPER_MODE 1
kehttpd.conf
file Anda (atau file yang sesuai untuk Nginx atau yang lainnya)<depends><Mage_Catalog /></depend>
community
sebagai codepool untuk memberi para pengembang kesempatan untuk menimpa beberapa kelas tanpa memodifikasi kode secara langsungapp/design/frontend/base/default
untuk membuatnya tersedia untuk semua tema.app/design/adminhtml/default/default
dan jangan mengubah tema admin. Saya mungkin ingin mengubahnya di salah satu modul saya.easylife_articles.xml
danapp/design/.../easylife_articles
easylife_articles/images/doh.png
core_config_data
tabel.Select * from sales_flat_order where ...
. Gunakan aZend_Select
dan ubah nama tabel menggunakan->getTable('sales/order')
.js
file dalam templat. Salah<script type="text/javascript" src="../js/some.js"></script>
. Baik<script type="text/javascript" src="<?php echo Mage::getBaseUrl('js').'some.js'?>"></script>
Mage_Catalog_Model_Product
untuk menambahkan metodegetProductArticles()
. Benar . Di pembantu Anda tambahkangetProductArticles(Mage_Catalog_Model_Product $product)
readme.txt
filearticles/adminhtml_articles/index
. URL admin yang tepatadmin/articles/index
media
folder. Gunakanskin
. Themedia
folder biasanya tidak diversi dan ini membuat lebih sulit untuk memindahkan website untuk lingkungan yang berbeda.on
dan cacheoff
.<? $this->doSomething() ?>
). Gunakan tag lengkap (<?php $this->doSomething()?>
). Juga, jangan gunakan tag gema pendek. (<?="D'oh";?>
). Gunakan (<?php echo "D'oh";?>
)$this->__
dan tambahkan file terjemahan lokal dengan teks Anda (app/local/en_US/Easylife_Articles.csv
) setidaknya untuken_US
bahasa. Tidak semua situs web dibuat dalam bahasa Inggris dan identifikasi teks untuk diterjemahkan membutuhkan waktu.var/log/system.log
file tersebut. Kesalahan yang tercantum di sini tidak ditampilkan bahkan dengan mode pengembang aktif. Jika setidaknya ada satu kesalahan Anda berakhir dengan file log besar setelah beberapa bulan menjalankan ekstensi.Itulah yang sejauh ini. Saya akan menambahkan lebih banyak segera setelah saya memikirkan sesuatu yang lain.
sumber
If you encrypt your code files with Ioncube (or something else)...well...I just hate you and I hope your business goes bankrupt
Saya merasakan hal yang sama. Ada beberapa perusahaan yang tidak menawarkan versi terbaru, Anda harus membayar untuk mereka, itu benar-benar membuat saya frustrasi dan tidak mengerti mengapa mereka ingin menjual produk yang sama berulang-ulang (untuk menghasilkan uang? Tentu saja). Saya hanya tidak membeli produk mereka lagi. Anda tahu siapa yang saya bicarakan.Saya penggemar berat menggunakan modman sehingga saya dapat mengembangkan dan mengontrol sumber hanya ekstensi saya dan membiarkan file inti dan struktur folder tidak berubah. Hal ini juga membuat pengujian di berbagai instalasi berjalan lebih lancar.
Oh dan satu tip besar selalu mencoba untuk menginstal ekstensi paket Anda secara lokal pada instalasi magento yang bersih sebelum mengunggahnya ke Magento Connect, saya telah kehilangan file berkali-kali di manajer paket.
sumber
Andreas von Studnitz dan Dr. Nikolai Krambrock memberikan presentasi yang baik tentang kualitas kode pada Meet Magento DE 2014. Mereka membedakan antara kualitas kode umum dan kualitas kode khusus Magento. Singkatnya, ada aturan umum berikut:
Yang lebih penting adalah aturan khusus Magento:
Berikut ini beberapa detail dan video presentasi: http://www.code4business.de/code-quality-magento/
sumber
Jika Anda menjual ekstensi Anda atau membagikannya kepada orang lain, pikirkan tentang menulis kode yang dapat dibaca manusia.
$productIds
bukan$ids
public function myOnProductSaveMethod() {...}
mengatakan ... tidak ada, tetapitryDisableInternetOnProductSave()
akan memberikan petunjuk keinginan yang direncanakansomeMethod(Varien_Data_Db_Collection $collection)
$_eventPrefix
properti (dan$_eventObject
) agar lebih mudah diakses oleh pengamatconfig.xml
<validate>
node ke bidang dalamsystem.xml
adminhtml.xml
Mysql4
kelascomposer.json
juga untuk membuat penempatan lebih mudahdeclare(strict_types=1);
dan tentukan tipe input dan output Anda* 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) ...
@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@SuppressWarnings(PHPMD.CamelCaseMethodName)
- metode yang diwariskan@SuppressWarnings(PHPMD.StaticAccess)
- jika Anda menggunakanMage::
atau panggilan statis lainnya** Sering digunakan:
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
(tidak0
seperti yang diharapkan)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
Sama untuk urutan SQL
ASC
vsZend_Db_Select::SQL_ASC
(misalnya) .Mengatakan "itu bukan keharusan karena itu tidak akan pernah berubah" ? Misalnya ID entitas untuk
catalog_product
atribut yang diubah di suatu tempat antara Magento 1.5 dan 1.9 dari10
menjadi4
, jadi ini dapat merusak ekstensi Anda:Menggunakan ini sebagai gantinya menambahkan satu permintaan, tetapi Anda akan aman ...
sumber
@marius, tentang Standar Pengkodean (poin 24 dalam daftar Anda).
Saya suka menggunakan PHP_CodeSniffer bersama dengan EQP dan ECG CS untuk secara otomatis menegakkan standar ini.
Menggunakan PHP_CodeSniffer Anda tidak perlu khawatir tentang melupakan hal-hal seperti mengganti
array()
dengan[]
, hindari menggunakanis_null
, meninggalkan variabel lokal yang tidak terpakai atau bahkan metode tanpa blok PHPdoc.PHP_CodeSniffer akan selalu memberi tahu Anda tentang hal itu.
sumber