หากคุณขายส่วนขยายของคุณหรือแชร์กับผู้อื่นให้คิดถึงการเขียนรหัสที่มนุษย์อ่านได้
- อย่าทำให้วิธีซับซ้อนเกินไป
- เพิ่มบล็อก 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 ASCVS (ตัวอย่าง)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)