2009-06-17 19 views
5

Estoy a punto de comenzar a construir mi primer módulo magento, pero no encuentro ninguna literatura sobre la diferencia entre la carpeta local y la comunidad en core. Me he dado cuenta de que algunas personas construyen sus módulos en local y otros en la comunidad, ¿cuál es la diferencia y por qué debería usar uno u otro?Building magento modules

Gracias

Respuesta

2

La carpeta local es para los módulos que solo usted utilizará. La carpeta de la comunidad es para módulos que eventualmente serán empaquetados y puestos a disposición (o vendidos) a la comunidad magento. Todos los módulos que descargue e instale se colocarán en la carpeta de la comunidad. A Magento realmente no le importa dónde está su módulo, la distinción está allí principalmente para mantener los módulos organizados. En cualquier caso, dado que es fácil cambiar de uno a otro, realmente no debería molestarte demasiado.

Si no sabe a qué categoría pertenece su módulo, puede comenzar en la carpeta local y, si va a publicarse, puede moverlo a la carpeta de la comunidad más adelante.

8

Querrá desarrollar fuera de lo local. La carpeta de la comunidad es/fue diseñada para ser el lugar donde pondría los módulos que descargó o compró en Magento Marketplace. Tengo entendido que el uso de esta carpeta se está eliminando progresivamente, y Varian recomienda que todos los módulos se coloquen en la carpeta local, incluso en los descargados del mercado.

Desde el punto de vista del sistema, la única diferencia es que la carpeta de la comunidad se busca después de la carpeta principal, pero antes de la carpeta local. Pedido esta configuración de la ruta en 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')); 

Por lo tanto, si tiene dos archivos

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

Magento utilizará el que está en la carpeta de la comunidad en primer lugar.

+0

ignorar lo que he dicho anteriormente sobre la comunidad está eliminando gradualmente. Local es para cosas que estás haciendo localmente en tu tienda, se supone ** que la comunidad estará para distribuir módulos. Cuando distribuye su módulo en la carpeta de comunidad, permite que alguien anule una clase, estilo de grupo de código, en local. Sin embargo, debido a que no ha habido una comunicación clara sobre esto, muchos módulos distribuidos terminan en la comunidad. –

0

Hay dos tipos de categorización para el módulo.

  1. Comunidad y comercial Comunidad - libre para la comunidad Comercial - pagado por la comunidad

  2. local y Core Core - Extensión se desarrolla utilizando los archivos principales de Magento. Local: la extensión se desarrolla al copiar los archivos principales al local. Los cambios reales se llevan a cabo a nivel local

uno local es más recomendable ...

3

que puedes usar community, si se planea su módulo para ser distribuido al público, para permitir que otros desarrolladores de Magento para usar su módulo en sus propios proyectos de Magento, también.

Eso es lo que Varien llama un Magento Extension.

En su lugar, debe usar local, si no desea distribuirlo al público, pero está desarrollando el módulo principalmente para una tienda específica (o tal vez para su uso personal) solamente.

Para comprender mejor la diferencia entre el local y la carpeta community, es muy útil saber cómo funciona el Magento cargador automático:

Cuando un class está a punto de crear una instancia de Magento, el autocargador buscará para hacer coincidir las clases de el orden dado por PHPs include_path.

Magento establece inicialmente su include_path en app/Mage.php en el arranque:

: 

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

: 

El Magento autocargador busca los en el misma orden en que aparecen en include_path:

1st /app/code/local/ 
2nd /app/code/community/ 
3rd /app/code/core/ 
4th /lib/ 
: 

Suponiendo que usted está tratando de crear una instancia una clase llamada Namespace_Module_Block_Hello por ejemplo, que resultaría en que el autocargador Magentos busque en las rutas dadas por include_path para un archivo llamado 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 
: 

La primera archivo encontrado va a ganar, es decir, conseguir instanciado. Por lo tanto, si existe el mismo archivo en local Y community, por ejemplo, se creará una instancia del local.

Esto permite a los desarrolladores extender/sobreescribir/sobrecargar/ignorar libremente las clases.


* ver lib/Varien/Autoload.php::autoload() de reglas de conversión de nombre