หากคุณขายส่วนขยายของคุณหรือแชร์กับผู้อื่นให้คิดถึงการเขียนรหัสที่มนุษย์อ่านได้
- อย่าทำให้วิธีซับซ้อนเกินไป
- เพิ่มบล็อก DOC ให้กับวิธีการของคุณ*
- ใช้ชื่อตัวแปรที่เหมาะสมเช่น
$productIds
แทน$ids
- เหมือนกันสำหรับวิธีการ
public function myOnProductSaveMethod() {...}
พูดว่า ... ไม่มีอะไร แต่tryDisableInternetOnProductSave()
จะให้คำแนะนำที่วางแผนไว้
- ใช้คำใบ้ประเภทที่เหมาะสม
someMethod(Varien_Data_Db_Collection $collection)
- หลีกเลี่ยงการใช้เวทมนตร์ตัวเลขและสตริง**
- ถ้าคุณใช้โมเดลตั้ง
$_eventPrefix
คุณสมบัติ (และ$_eventObject
) เพื่อให้ผู้สังเกตการณ์สามารถเข้าถึงได้ง่ายขึ้น
- หากคุณเพิ่มฟิลด์การกำหนดค่าระบบ
- ตั้งค่าเริ่มต้นเป็น
config.xml
- เพิ่ม
<validate>
โหนดในฟิลด์system.xml
- เพิ่มทรัพยากร ACL ไปที่
adminhtml.xml
- อย่าเพิ่มรายการเมนูระดับแรกที่ไร้ประโยชน์ในแบ็กเอนด์ผู้ดูแลระบบ - ไม่อยู่ในแถบด้านบนหรือในส่วนกำหนดค่า
- เพิ่มทรัพยากร ACL สำหรับการกระทำของคอนโทรลเลอร์ทั้งหมด (เช่นกัน!)
- ตรวจสอบให้แน่ใจแบบสอบถามของคุณทำงานกับคำนำหน้าตารางฐานข้อมูล
- คิดถึง (ไม่) ความสามารถในการย้อนกลับ(เป็นความเห็นที่อิงตามจริง ๆ )
- ไม่รองรับ
Mysql4
คลาส
- อย่าใช้วิธีการที่เลิกใช้แล้ว
- ตรวจสอบให้แน่ใจว่าการบีบอัดของคุณทำงานตามที่คาดไว้ในทุกกรณี - เพิ่ม UnitTests (ตัวอย่าง PhpUnit)
- นอกเหนือจากมารยาทของดาวิด ... เพิ่มอีก
composer.json
ด้วยเพื่อทำให้การปรับใช้ง่ายขึ้น
- เนื่องจาก PHP5.6 คือ EOL ให้เขียนโค้ดของคุณสำหรับ PHP7 ใช้
declare(strict_types=1);
และกำหนดประเภทของคุณในและเอาท์พุท
- Magento2: ตรวจสอบรหัสของคุณด้วยรหัสคงวิเคราะห์เครื่องมือเช่นphpstan การสนับสนุนสำหรับวิธีมายากลที่นี่ (การคอมมิชชันล่าสุดทำงานกับ 2.3 ก่อนหน้า 2.1 / 2.2 - ต้องใช้ phpstan 0.8.5)
* บล็อก DOC:
หากคุณตรวจสอบโค้ด Magento-1 ของคุณด้วย PHP_CodeSniffer สำหรับมาตรฐานPSR2หรือPHPMDคุณอาจต้องการเพิ่มบรรทัดนี้ (ที่เหมาะสม)
- ไปเรียน
@phpcs:disable PSR1.Classes.ClassDeclaration.MissingNamespace
@phpcs:disable PSR2.Classes.PropertyDeclaration.Underscore
- คุณสมบัติที่สืบทอด
@phpcs:disable Squiz.Classes.ValidClassName.NotCamelCaps
@SuppressWarnings(PHPMD.CamelCaseClassName)
@SuppressWarnings(PHPMD.CamelCasePropertyName)
- คุณสมบัติที่สืบทอด
- วิธีการ
@SuppressWarnings(PHPMD.CamelCaseMethodName)
- วิธีการสืบทอด
@SuppressWarnings(PHPMD.StaticAccess)
- หากคุณใช้Mage::
หรือการโทรแบบคงที่อื่น ๆ
** มักใช้:
- ID ร้านค้าผู้ดูแลระบบ
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
( 0
อาจไม่คาดหวัง)
- สินค้า
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
เดียวกันสำหรับการสั่งซื้อ SQL ASC
VS (ตัวอย่าง)Zend_Db_Select::SQL_ASC
การพูดว่า"ไม่ใช่สิ่งจำเป็นเพราะจะไม่มีวันเปลี่ยนแปลง" ? ตัวอย่างเช่นรหัสเอนทิตีสำหรับcatalog_product
แอตทริบิวต์เปลี่ยนที่อยู่ระหว่าง Magento 1.5 และ 1.9 จาก10
เป็น4
เป็นดังนั้นสิ่งนี้อาจทำให้ส่วนขยายของคุณแตก:
$collection->addFieldToFilter('entity_type_id', 10)
ใช้สิ่งนี้แทนเพิ่มหนึ่งแบบสอบถาม แต่คุณจะปลอดภัย ...
$entityTypeId = Mage::getModel('eav/config')
->getEntityType(Mage_Catalog_Model_Product::ENTITY)
->getEntityTypeId();
$collection->addFieldToFilter('entity_type_id', $entityTypeId)