Сборка модулей magento - PullRequest
       20

Сборка модулей magento

5 голосов
/ 17 июня 2009

Я только собираюсь приступить к созданию моего первого модуля magento, но я не могу найти никакой литературы о разнице между локальной папкой и папкой сообщества в ядре. Я заметил, что некоторые люди создают свои модули локально, а другие - в сообществе, в чем разница и почему я должен использовать один или другой?

Спасибо

Ответы [ 4 ]

8 голосов
/ 17 июня 2009

Ты захочешь развиваться вне местного. Папка сообщества предназначена для размещения модулей, которые вы скачали или купили на Magento Marketplace. Насколько я понимаю, использование этой папки постепенно прекращается, и Varian рекомендует размещать все модули в локальной папке, даже те, которые были загружены с рынка.

С системной точки зрения единственное отличие состоит в том, что папка сообщества ищется после основной папки, но перед локальной папкой. Проверьте этот путь настройки в 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'));

Итак, если у вас есть два файла

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

Сначала Magento будет использовать тот, что находится в папке сообщества.

3 голосов
/ 13 апреля 2011

Вы должны использовать 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() правила преобразования имен

2 голосов
/ 17 июня 2009

Локальная папка предназначена для модулей, которые будут использоваться только вами. Папка сообщества предназначена для модулей, которые в конечном итоге будут упакованы и предоставлены (или проданы) сообществу magento. Все загружаемые и устанавливаемые вами модули размещаются в папке сообщества. Magento на самом деле не волнует, где находится ваш модуль, различие заключается в том, чтобы держать модули организованными. В любом случае, поскольку легко переключаться с одного на другое, это не должно вас сильно беспокоить.

Если вы не знаете, к какой категории относится ваш модуль, вы можете начать с локальной папки, а если она будет опубликована, вы можете переместить ее в папку сообщества позже.

0 голосов
/ 28 июня 2010

Существует два типа категоризации для модуля.

  1. Общественные и коммерческие Сообщество - бесплатно для сообщества Коммерческая - платная для сообщества

  2. Local и Core Core - расширение разработано с использованием основных файлов magento. Local - расширение разрабатывается путем копирования файлов ядра на локальный. Актуальные изменения делаются на местном

Локальный лучше ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...