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