si dovrebbe usare community
, se il modulo è progettato per essere distribuito al pubblico, per consentire ad altri sviluppatori di utilizzare Magento il tuo modulo anche nei loro progetti Magento.
Questo è ciò che Varien chiama uno Magento Extension.
Si consiglia di utilizzare local
invece, se non si desidera distribuire al pubblico, ma si sta sviluppando il modulo principalmente per un negozio specifico (o forse solo per uso personale).
Per meglio comprendere la differenza tra il local
e la cartella community
, è utile conoscere come funziona il Magento Autoloader:
Quando un class
sta per essere istanziati in Magento, il caricatore automatico cercherà corrispondenti classi l'ordine dato da PHP include_path
.
Magento inizialmente imposta la sua include_path
in app/Mage.php
all'accensione:
:
define('DS', DIRECTORY_SEPARATOR);
define('PS', PATH_SEPARATOR);
define('BP', dirname(dirname(__FILE__)));
Mage::register('original_include_path', get_include_path());
:
$paths[] = BP . DS . 'app' . DS . 'code' . DS . 'local';
$paths[] = BP . DS . 'app' . DS . 'code' . DS . 'community';
$paths[] = BP . DS . 'app' . DS . 'code' . DS . 'core';
$paths[] = BP . DS . 'lib';
$app_path = implode(PS, $paths);
set_include_path($app_path . PS . Mage::registry('original_include_path'));
:
Il Magento Autoloader ricerche percorsi nello stesso ordine cui appaiono nella include_path
:
1st /app/code/local/
2nd /app/code/community/
3rd /app/code/core/
4th /lib/
:
Supponendo che si sta tentando di creare un'istanza ad esempio una classe denominata Namespace_Module_Block_Hello
, che comporterebbe la presenza del caricatore automatico Magentos nella ricerca dei percorsi indicati da include_path
un file denominato Namespace/Module/Block/Hello.php
*:
1st /app/code/local/Namespace/Module/Block/Hello.php
2nd /app/code/community/Namespace/Module/Block/Hello.php
3rd /app/code/core/Namespace/Module/Block/Hello.php
4th /lib/Namespace/Module/Block/Hello.php
:
Il primo file di trovato vincerà, vale a dire ottenere un'istanza. Quindi, se lo stesso file esiste in local
E community
, ad esempio, lo local
verrà istanziato.
Ciò consente agli sviluppatori di estendere/sovrascrivere/sovraccaricare/ignorare le classi.
* vedere lib/Varien/Autoload.php::autoload()
per le regole di conversione nome
ignorare ciò che ho detto sopra circa comunità in fase di esaurimento. Local è per le cose che stai facendo localmente nel tuo negozio, la community è ** supposta ** per i moduli che vengono distribuiti. Quando si distribuisce il modulo nella cartella della comunità, si consente a qualcuno di sovrascrivere una classe, lo stile del pool di codice, in locale. Tuttavia, poiché non c'è stata comunicazione chiara su questo, molti moduli distribuiti finiscono nella comunità. –