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