构建magento模块
我即将开始构建我的第一个magento模块,但我找不到任何有关核心中本地文件夹和社区文件夹之间差异的文献。我注意到一些人在本地和社区中的其他人建立他们的模块,有什么区别,为什么我应该使用其中一个或另一个?构建magento模块
谢谢
本地文件夹仅适用于您将使用的模块。社区文件夹适用于最终将打包并提供(或销售)到magento社区的模块。您下载并安装的任何模块都放置在社区文件夹中。 Magento并不关心你的模块在哪,主要区别在于保持模块的组织。无论如何,因为很容易从一个切换到另一个,所以它不应该让你感到困扰。
如果您不知道模块属于哪个类别,则可以从本地文件夹开始,如果要发布,则可以稍后将其移至社区文件夹。
你会想开发出当地的。社区文件夹的目的是成为你从Magento Marketplace下载或购买模块的地方。据我的理解,这个文件夹的使用正在逐步停止,Varian建议所有模块都放在本地文件夹中,即使是从市场上下载的文件夹也是如此。
从系统角度来看,唯一不同的是社区文件夹是在核心文件夹之后搜索的,但是在本地文件夹之前。结帐在应用这条道路设置/ 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将首先使用一个在社会上的文件夹。
该模块有两种类型的分类。
社区和商业 社区 - 免费为社区 商业 - 支付的社会
本地和核心 核心 - 推广使用Magento的核心文件制定。 本地 - 扩展是通过将核心文件复制到本地来开发的。实际的变化在当地
当地一个更明智做...
您应该使用community
,如果你的模块,计划分发给市民,以允许其他Magento的开发人员使用你的模块也在他们自己的Magento项目中。
这就是Varien所说的Magento Extension。
如果您不想向公众发布,而是仅针对特定商店(或者您的个人使用)开发该模块,则应该使用local
。
为了更好地理解local
和community
文件夹的区别,它有助于了解Magento的自动装弹机是如何工作的:
当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的自动加载搜索在相同为了路径它们出现在include_path
:
1st /app/code/local/
2nd /app/code/community/
3rd /app/code/core/
4th /lib/
:
假设你正在试图实例例如,一个名为Namespace_Module_Block_Hello
的类会导致Magentos自动加载器搜索给出的路径名为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
和community
中存在相同的文件,则local
将被实例化。
这允许开发人员自由扩展/覆盖/重载/忽略类。
* 看到lib/Varien/Autoload.php::autoload()
的名称转换规则
忽略我上面说了社区被淘汰。本地是为你的商店本地做的事情,社区**应该是**被分配的模块。在社区文件夹中分发模块时,您允许某人在本地覆盖类,代码池样式。但是,由于这方面的沟通并不明确,所以很多分布式模块最终成为社区。 – 2011-04-11 06:20:03