Поскольку в последнее время у меня было много проблем со свободным и коммерческим расширением, я решил задать этот вопрос и ответить на него с помощью шагов, которые я обычно выполняю при написании расширения. Не стесняйтесь редактировать ответ или добавить новый.
В большинстве случаев при установке расширения или темы мне приходится тратить несколько часов (иногда больше, иногда меньше), чтобы оно работало во всех необходимых мне средах:
- dev: обычно
localhost
там, где проект находится в подпапке - preprod & live
Это происходило даже с расширениями от крупных поставщиков расширений (которые должны оставаться безымянными, по крайней мере, до тех пор, пока я действительно не сойду с ума и не добавлю их имена)
кода и облегчить его использование техническим и нетехническим персоналом, а техническому специалисту - его изменить?
Ответы:
Вот что я обычно делаю:
error_reporting
на.isDeveloperMode
установленным наtrue
. Просто добавьтеSetEnv MAGE_IS_DEVELOPER_MODE 1
в свойhttpd.conf
файл (или соответствующий файл для Nginx или что-то еще)<depends><Mage_Catalog /></depend>
community
качестве пула кода, чтобы дать разработчикам возможность переопределить некоторые классы без непосредственного изменения кода.app/design/frontend/base/default
чтобы сделать их доступными для всех тем.app/design/adminhtml/default/default
и не меняйте тему администратора. Я могу хотеть изменить это в одном из моих модулей.easylife_articles.xml
а такжеapp/design/.../easylife_articles
easylife_articles/images/doh.png
core_config_data
таблицы.Select * from sales_flat_order where ...
. ИспользуйтеZend_Select
и преобразуйте имена таблиц, используя->getTable('sales/order')
.js
файлов в шаблон. Неправильно<script type="text/javascript" src="../js/some.js"></script>
. Правильно<script type="text/javascript" src="<?php echo Mage::getBaseUrl('js').'some.js'?>"></script>
Mage_Catalog_Model_Product
чтобы добавить методgetProductArticles()
. Верно . В свой помощник добавьgetProductArticles(Mage_Catalog_Model_Product $product)
readme.txt
файлarticles/adminhtml_articles/index
. Правильный админский URLadmin/articles/index
media
папку. Используйтеskin
.media
Папка обычно не версируются , и это делает его более трудным перенести сайт в различные среды.on
и кешемoff
.<? $this->doSomething() ?>
). Используйте полные теги (<?php $this->doSomething()?>
). Также пока не используйте короткие эхо-теги. (<?="D'oh";?>
). Использовать (<?php echo "D'oh";?>
)$this->__
и добавьте файл перевода локали с вашими текстами (app/local/en_US/Easylife_Articles.csv
) хотя бы дляen_US
языка. Не все веб-сайты построены на английском языке, и определение текста для перевода занимает много времени.var/log/system.log
файл. Перечисленные здесь ошибки не отображаются даже при включенном режиме разработчика. Если есть хотя бы одна ошибка, вы получите большой файл журнала после нескольких месяцев работы расширения.Это то, что есть до сих пор. Я добавлю больше, как только я подумаю о чем-то еще.
источник
If you encrypt your code files with Ioncube (or something else)...well...I just hate you and I hope your business goes bankrupt
Я чувствую то же самое. Есть некоторые компании, которые не предлагают обновленную версию, вам придется заплатить за них, это действительно расстраивает меня и не понимают, почему они хотят продавать один и тот же продукт снова и снова (очевидно, чтобы заработать деньги). Я просто больше не покупаю их товар. Вы знаете, о ком я говорю.Я большой поклонник использования modman, так что я могу разрабатывать и контролировать исходные тексты только моего расширения и оставить основные файлы и структуру папок без изменений. Это также делает тестирование в разных установках более плавным.
Да, и один важный совет: всегда пытайтесь установить ваше упакованное расширение локально на чистой установке magento, прежде чем загружать его в Magento Connect, я так много раз пропускал файлы в менеджере пакетов.
источник
Андреас фон Студниц и доктор Николай Крамброк представили хорошую презентацию о качестве кода на Meet Magento DE 2014. Они различают общее качество кода и качество кода, специфичного для Magento. Короче говоря, существуют следующие общие правила:
Еще более важными являются специфичные для Magento правила:
Вот еще некоторые подробности и видео презентации: http://www.code4business.de/code-quality-magento/
источник
Если вы продаете свое расширение или делитесь им с другими, подумайте о написании кода, понятного человеку.
$productIds
вместо$ids
public function myOnProductSaveMethod() {...}
говорит ... ничего, ноtryDisableInternetOnProductSave()
даст подсказку хотят, планируетсяsomeMethod(Varien_Data_Db_Collection $collection)
$_eventPrefix
свойство (и$_eventObject
), чтобы сделать их лучше доступными для наблюдателейconfig.xml
<validate>
узлы в поля вsystem.xml
adminhtml.xml
Mysql4
классыcomposer.json
также, чтобы упростить развертываниеdeclare(strict_types=1);
и определяйте ваши типы ввода и вывода* 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
противZend_Db_Select::SQL_ASC
(например) .Сказать «это не обязательно, потому что это никогда не изменится» ? Например, идентификатор объекта для
catalog_product
атрибутов изменился где-то между Magento 1.5 и 1.9 с10
на4
, так что это может сломать ваше расширение:Использование этого вместо этого добавляет один запрос, но вы будете в безопасности ...
источник
@marius, о стандартах кодирования (пункт 24 в вашем списке).
Мне нравится использовать PHP_CodeSniffer вместе с EQP и ECG CS для автоматического обеспечения соблюдения этих стандартов.
Используя PHP_CodeSniffer, вам не нужно беспокоиться о том, чтобы забыть такие вещи, как замена
array()
на[]
, избегать использованияis_null
, оставлять неиспользованные локальные переменные или даже метод без блока PHPDoc.PHP_CodeSniffer всегда расскажет вам об этом.
источник