Вы должны использовать community
, если ваш модуль планируется распространять среди общественности, чтобы другие разработчики Magento могли использовать ваш модуль и в своих собственных проектах Magento.
Вот что Varien называет Magento Extension .
Вместо этого вы должны использовать local
, если вы не хотите распространять их среди общественности, но разрабатываете модуль в основном только для определенного магазина (или, возможно, для личного использования).
Чтобы лучше понять разницу между папкой local
и community
, полезно узнать, как работает Magento Autoloader:
Когда создается экземпляр class
в Magento, автозагрузчик будет искать подходящие классы в порядке, заданном PHP include_path
.
Magento изначально устанавливает include_path
в app/Mage.php
при запуске:
:
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'));
:
Magento Autoloader ищет пути в том же порядке, в котором они появляются в include_path
:
1st /app/code/local/
2nd /app/code/community/
3rd /app/code/core/
4th /lib/
:
Если вы пытаетесь создать экземпляр класса с именем Namespace_Module_Block_Hello
, например, это приведет к тому, что Magentos Autoloader будет искать пути, указанные в include_path
, для файла с именем 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
:
Победит первый файл *1038*, то есть будет создан экземпляр. Таким образом, если такой же файл существует, например, в local
AND community
, экземпляр local
будет создан.
Это позволяет разработчикам свободно расширять / переопределять / перегружать / игнорировать классы.
* см. lib/Varien/Autoload.php::autoload()
правила преобразования имен