2009-06-17 7 views
5

Je suis sur le point de commencer à construire mon premier module magento, mais je ne trouve aucune documentation sur la différence entre le dossier local et communautaire dans le noyau. J'ai remarqué que certaines personnes construisent leurs modules en local et d'autres en communauté, quelle est la différence et pourquoi devrais-je utiliser l'un ou l'autre?Construire des modules magento

Merci

Répondre

2

Le dossier local est pour les modules qui ne vous utiliserez. Le dossier de la communauté est pour les modules qui seront éventuellement empaquetés et rendus disponibles (ou vendus) à la communauté magento. Tous les modules que vous téléchargez et installez sont placés dans le dossier de la communauté. Magento ne se soucie pas vraiment de l'emplacement de votre module, la distinction est là principalement pour garder les modules organisés. Dans tous les cas, puisqu'il est facile de passer de l'un à l'autre, cela ne devrait pas vraiment vous déranger.

Si vous ne savez pas dans quelle catégorie appartient votre module, vous pouvez commencer dans le dossier local et si vous souhaitez le publier, vous pouvez le déplacer dans le dossier de la communauté ultérieurement.

8

Vous aurez envie de développer en local. Le dossier de la communauté est/était destiné à être l'endroit où vous mettriez les modules que vous avez téléchargés ou achetés sur le Marché Magento. Je crois comprendre que l'utilisation de ce dossier est en cours de suppression, et c'est la recommandation de Varian que tous les modules soient placés dans le dossier local, même ceux téléchargés sur le marché. Du point de vue du système, la seule différence est que le dossier de communauté est recherché après le dossier principal, mais avant le dossier local. Commander cette configuration de chemin dans l'application/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')); 

Donc, si vous avez deux fichiers

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

Magento utilisera celui dans le dossier de la première communauté.

+0

ce que je disais Ignore ci-dessus au sujet de la communauté étant éliminés. Local est pour les choses que vous faites localement dans votre magasin, la communauté est supposée être ** pour les modules distribués. Lorsque vous distribuez votre module dans le dossier de la communauté, vous permettez à quelqu'un de remplacer une classe, un style de pool de codes, en local. Cependant, parce qu'il n'y a pas eu de communication claire à ce sujet, beaucoup de modules distribués se retrouvent dans la communauté. –

0

Il existe deux types de catégorisation pour le module.

  1. communautaire et commercial communautaire - gratuit pour la communauté commercial - payé pour la communauté

  2. locale et Core de base - Extension est développé à l'aide des fichiers de base de magento. Local - L'extension est développée en copiant les fichiers de base au niveau local. Les changements actuels sont effectués à la

    locale

un local est plus conseillé ...

3

Vous devez utiliser community, si votre module est prévu pour être distribué au public, afin de permettre à d'autres développeurs d'utiliser Magento votre module dans leurs propres projets Magento, aussi.

C'est ce que Varien appelle un Magento Extension.

Vous devriez utiliser local à la place, si vous ne voulez pas distribuer au public, mais développez le module principalement pour un magasin spécifique (ou peut-être votre usage personnel) seulement.

Pour mieux comprendre la différence entre le local et le dossier community, il est utile de savoir comment fonctionne Magento autochargeur:

Lorsqu'un class est sur le point d'être instancié dans Magento, l'autochargeur recherchera des classes correspondant à l'ordre donné par les PHP include_path.

Magento définit d'abord son include_path en app/Mage.php au démarrage:

: 

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

: 

Les chemins Magento autochargeur recherche dans le même ordre d'apparition dans include_path:

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

En supposant que vous essayez d'instancier une classe nommée Namespace_Module_Block_Hello par exemple, qui aurait pour résultat que Magentos Autoloader recherche les chemins donnés par include_path pour un fichier nommé 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 
: 

Le premier fichier trouvé va gagner, à savoir obtenir instancié. Donc, si le même fichier existe dans local et community par exemple, l'un local serait instancié.

Cela permet aux développeurs d'étendre/surcharger/surcharger/ignorer librement les classes.


* voir lib/Varien/Autoload.php::autoload() des règles de conversion du nom