2009-06-17 12 views
5

Sto per iniziare a creare il mio primo modulo Magento ma non riesco a trovare alcuna documentazione sulla differenza tra la cartella locale e quella della comunità nel nucleo. Ho notato che alcune persone costruiscono i loro moduli in locale e altri in comunità, qual è la differenza e perché dovrei usare l'uno o l'altro?Creazione moduli magento

Grazie

risposta

2

La cartella locale è per i moduli che solo tu userai. La cartella della comunità è per i moduli che saranno eventualmente pacchettizzati e resi disponibili (o venduti) alla comunità di Magento. Tutti i moduli scaricati e installati sono collocati nella cartella della comunità. Magento non si preoccupa di dove sia il tuo modulo, la distinzione è lì principalmente per mantenere i moduli organizzati. In ogni caso, dal momento che è facile passare da uno all'altro, questo non dovrebbe infastidirti.

Se non si conosce a quale categoria appartiene il modulo, è possibile iniziare nella cartella locale e, se è necessario pubblicarlo, è possibile spostarlo successivamente nella cartella della comunità.

8

Avrai voglia di sviluppare fuori locale. La cartella della comunità è/era destinata a essere il luogo in cui inserire i moduli che hai scaricato o acquistato da Magento Marketplace. Sono a conoscenza del fatto che l'uso di questa cartella è in fase di eliminazione e la raccomandazione di Varian è che tutti i moduli siano collocati nella cartella locale, anche quelli scaricati dal marketplace.

Da un punto di vista del sistema, l'unica differenza è la ricerca della cartella della comunità dopo la cartella principale, ma prima della cartella locale. Acquista questa configurazione percorso in app/Mage.php

$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')); 

Quindi, se si dispone di due file

app/code/community/Companyname/Models/Foo.php 
app/code/local/Companyname/Models/Foo.php 

Magento utilizzerà quello nella cartella comunità di prima.

+0

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à. –

0

Esistono due tipi di categorizzazione per il modulo.

  1. Comunità e commerciale Comunità - gratuito per la comunità commerciale - pagato per la comunità

  2. locale e Core Nucleo - Estensione è sviluppato utilizzando file core Magento. Locale: l'estensione viene sviluppata copiando i file principali sul locale. cambiamenti effettivi sono fatte a livello locale

un locale è più consigliabile ...

3

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

Problemi correlati