Якщо ви продаєте розширення або ділитесь ним з іншими, подумайте про те, щоб написати код, який читається людиною.
- не робіть метод занадто складним
- додати блоки 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::або інші статичні дзвінки
** Часто використовується:
- ідентифікатор магазину адміністратора
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)