我正要开始构建我的第一个 magento 模块,但我找不到任何关于核心中本地文件夹和社区文件夹之间区别的文献。我注意到有些人在本地构建他们的模块,而另一些人在社区构建他们的模块,有什么区别,我为什么要使用其中一个?
谢谢
你会想在本地发展。社区文件夹是/原本是您放置从 Magento 市场下载或购买的模块的地方。据我了解,此文件夹的使用正在逐步淘汰,瓦里安建议将所有模块放置在本地文件夹中,即使是从市场下载的模块也是如此。
从系统的角度来看,唯一的区别是在核心文件夹之后搜索社区文件夹,但在本地文件夹之前。在 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 将首先使用社区文件夹中的那个。
community
如果您的模块计划向公众发布,您应该使用,以允许其他 Magento 开发人员也可以在他们自己的 Magento 项目中使用您的模块。
这就是 Varien 所说的Magento Extension。
local
如果您不想向公众分发,而是主要为特定商店(或者可能是您的个人用途)开发模块,则应该使用。
local
为了更好地理解和文件夹之间的区别,community
了解 Magento Autoloader 的工作原理会有所帮助:
当 aclass
即将在 Magento 中实例化时,Autoloader 将按照 PHPs 给出的顺序搜索匹配的类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
example 的类,这将导致 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
:
找到的第一个文件将获胜,即被实例化。因此,如果在local
ANDcommunity
中存在相同的文件,例如,该文件local
将被实例化。
这允许开发人员自由扩展/覆盖/重载/忽略类。
*名称转换规则见lib/Varien/Autoload.php::autoload()
本地文件夹用于存放只有您将使用的模块。community 文件夹用于存放最终将被打包并提供(或出售)给 magento 社区的模块。您下载和安装的任何模块都放在社区文件夹中。Magento 并不真正关心你的模块在哪里,区别主要是为了保持模块的组织性。无论如何,因为从一个切换到另一个很容易,所以它不应该真正打扰你。
如果您不知道您的模块属于哪个类别,您可以从本地文件夹开始,如果要发布,您可以稍后将其移动到社区文件夹。
该模块有两种类型的分类。
社区和商业 社区 - 免费为社区 商业 - 为社区付费
本地和核心核心 - 扩展是使用 magento 核心文件开发的。本地 - 扩展是通过将核心文件复制到本地来开发的。实际更改在本地完成
本地的更可取...