Ponieważ ostatnio miałem wiele problemów z darmowym i komercyjnym rozszerzeniem, postanowiłem zadać to pytanie i odpowiedzieć na nie, wykonując czynności, które zwykle wykonuję, pisząc rozszerzenie. Edytuj odpowiedź lub dodaj nową.
W większości przypadków podczas instalowania rozszerzenia lub motywu muszę poświęcić kilka godzin (czasem więcej, a czasem mniej), aby działał we wszystkich potrzebnych środowiskach:
- dev: zwykle
localhost
tam, gdzie projekt znajduje się w podfolderze - przedprodukcja i życie
Stało się tak nawet w przypadku rozszerzeń od dużych dostawców rozszerzeń (które powinny pozostać bezimienne, przynajmniej dopóki naprawdę nie oszaleję i nie dodam tutaj ich nazw).
Zatem głównym pytaniem jest ... jakie kroki powinienem wziąć pod uwagę, pisząc rozszerzenie, aby zapewnić jakość kodu i ułatwić korzystanie z niego przez osobę techniczną i nietechniczną oraz zmianę przez osobę techniczną?
Odpowiedzi:
Oto, co zwykle robię:
error_reporting
włączonym.isDeveloperMode
ustawionym natrue
. Po prostu dodajSetEnv MAGE_IS_DEVELOPER_MODE 1
do swojegohttpd.conf
pliku (lub odpowiedniego pliku dla Nginx lub czegoś innego)<depends><Mage_Catalog /></depend>
community
jako puli kodów, aby dać programistom szansę na zastąpienie niektórych klas bez bezpośredniej modyfikacji koduapp/design/frontend/base/default
aby były dostępne dla wszystkich motywów.app/design/adminhtml/default/default
i nie zmieniaj motywu administratora. Mogę chcieć to zmienić w jednym z moich modułów.easylife_articles.xml
iapp/design/.../easylife_articles
easylife_articles/images/doh.png
core_config_data
tabeli.Select * from sales_flat_order where ...
. Użyj aZend_Select
i przekształć nazwy tabel za pomocą->getTable('sales/order')
.js
pliki do szablonu. Źle<script type="text/javascript" src="../js/some.js"></script>
. Dobrze<script type="text/javascript" src="<?php echo Mage::getBaseUrl('js').'some.js'?>"></script>
Mage_Catalog_Model_Product
aby dodać metodęgetProductArticles()
. Racja . W swoim pomocniku dodajgetProductArticles(Mage_Catalog_Model_Product $product)
readme.txt
plikuarticles/adminhtml_articles/index
. Właściwy adres URL administratoraadmin/articles/index
media
folderze. Użyjskin
.media
Folder zazwyczaj nie posiada oznaczenia wersji, a to sprawia, że coraz trudniej jest przejść na stronę z różnymi środowiskami.on
i pamięci podręcznejoff
.<? $this->doSomething() ?>
). Użyj pełnych tagów (<?php $this->doSomething()?>
). Nie używaj jeszcze krótkich znaczników echa. (<?="D'oh";?>
). Użyj (<?php echo "D'oh";?>
)$this->__
i dodaj plik tłumaczenia ustawień regionalnych z tekstami (app/local/en_US/Easylife_Articles.csv
) przynajmniej dlaen_US
języka. Nie wszystkie strony internetowe są zbudowane w języku angielskim, a identyfikacja tekstów do przetłumaczenia jest czasochłonna.var/log/system.log
plik. Wymienione tutaj błędy nie są wyświetlane nawet przy włączonym trybie programisty. Jeśli występuje co najmniej jeden błąd, po kilku miesiącach uruchamiania rozszerzenia pojawia się duży plik dziennika.Jak dotąd. Dodam więcej, gdy tylko wymyślę coś innego.
źródło
If you encrypt your code files with Ioncube (or something else)...well...I just hate you and I hope your business goes bankrupt
Czuję to samo. Są firmy, które nie oferują zaktualizowanej wersji, trzeba będzie za nie zapłacić, to dla mnie naprawdę frustrujące i nie rozumiem, dlaczego chcą ciągle sprzedawać ten sam produkt (oczywiście, aby zarabiać pieniądze?). Po prostu nie kupuję już ich produktu. Wiesz o kim mówię.Jestem wielkim fanem używania modmana, dzięki czemu mogę rozwijać i kontrolować źródła tylko mojego rozszerzenia i pozostawić podstawowe pliki i strukturę folderów bez zmian. Sprawia również, że testy w różnych instalacjach przebiegają płynniej.
Aha, i jedna ogromna wskazówka zawsze próbuje lokalnie zainstalować paczkowane rozszerzenie na czystej instalacji magento przed przesłaniem go do Magento Connect, tyle razy brakowało mi plików w menedżerze pakietów.
źródło
Andreas von Studnitz i Dr. Nikolai Krambrock dobrze przedstawili jakość kodu na Meet Magento DE 2014. Rozróżniają między ogólną jakością kodu a jakością kodu specyficzną dla Magento. Krótko mówiąc, obowiązują następujące ogólne zasady:
Jeszcze ważniejsze są reguły specyficzne dla Magento:
Oto kilka dodatkowych szczegółów i wideo z prezentacji: http://www.code4business.de/code-quality-magento/
źródło
Jeśli sprzedajesz swoje rozszerzenie lub udostępniasz je innym, pomyśl o pisaniu kodu, który będzie czytelny dla człowieka.
$productIds
zamiast$ids
public function myOnProductSaveMethod() {...}
mówi ... nic, aletryDisableInternetOnProductSave()
da wskazówkę, że chcesz zaplanowaćsomeMethod(Varien_Data_Db_Collection $collection)
$_eventPrefix
właściwość (i$_eventObject
), aby były lepiej dostępne dla obserwatorówconfig.xml
<validate>
węzły do pól wsystem.xml
adminhtml.xml
Mysql4
klascomposer.json
też, aby ułatwić wdrożeniedeclare(strict_types=1);
i zdefiniuj typy wejścia i wyjścia* Bloki DOC:
Jeśli sprawdzisz kod Magento-1 za pomocą PHP_CodeSniffer dla standardu PSR2 lub PHPMD , być może zechcesz dodać te linie (tam, gdzie ma to sens) ...
@phpcs:disable PSR1.Classes.ClassDeclaration.MissingNamespace
@phpcs:disable PSR2.Classes.PropertyDeclaration.Underscore
- odziedziczone właściwości@phpcs:disable Squiz.Classes.ValidClassName.NotCamelCaps
@SuppressWarnings(PHPMD.CamelCaseClassName)
@SuppressWarnings(PHPMD.CamelCasePropertyName)
- odziedziczone właściwości@SuppressWarnings(PHPMD.CamelCaseMethodName)
- metody odziedziczone@SuppressWarnings(PHPMD.StaticAccess)
- jeśli używaszMage::
lub innych połączeń statycznych** Często używany:
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
(nie0
jak można się spodziewać)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
To samo dla zamówienia SQL
ASC
vsZend_Db_Select::SQL_ASC
(na przykład) .Mówiąc „to nie jest niepotrzebne, bo nigdy się nie zmieni” ? Na przykład identyfikator jednostki dla
catalog_product
atrybutów zmienił się gdzieś pomiędzy Magento 1.5 a 1.9 z10
na4
, więc może to spowodować uszkodzenie twojego rozszerzenia:Użycie tego zamiast tego dodaje jedno zapytanie, ale będziesz bezpieczny ...
źródło
@marius, dotyczący standardów kodowania (punkt 24 na liście).
Lubię używać PHP_CodeSniffer wraz z EQP i EKG CS automatycznie egzekwować te normy.
Korzystanie PHP_CodeSniffer nie trzeba się martwić o zapominając rzeczy jak zastąpienie
array()
ze[]
unikać używaniais_null
pozostawić nieużywane zmienne lokalne lub nawet metodę bez bloku PHPDoc.PHP_CodeSniffer zawsze ci o tym powie.
źródło