我正准备开始构建我的第一个magento模块,但我找不到任何关于核心本地和社区文件夹之间差异的文献。我注意到有些人在本地和其他社区建立他们的模块,有什么区别,为什么我应该使用其中一个?
谢谢
答案 0 :(得分:8)
你想要在当地发展。社区文件夹是/您打算放置从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将首先使用社区文件夹中的那个。
答案 1 :(得分:3)
如果您的模块计划分发给公众,您应该使用community
,以允许其他Magento开发人员在他们自己的Magento项目中使用您的模块。
Varien称之为Magento Extension。
如果您不想向公众发布,而是主要针对特定商店(或者您个人使用)开发模块,则应使用local
。
为了更好地理解local
和community
文件夹之间的区别,有助于了解Magento Autoloader的工作原理:
当要在Magento中实例化class
时,Autoloader将按照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
:
找到的第一个文件将获胜,即获得实例化。因此,如果local
AND community
中存在相同的文件,则会local
实例化lib/Varien/Autoload.php::autoload()
。
这允许开发人员自由地扩展/覆盖/重载/忽略类。
* 有关名称转换规则,请参阅{{1}}
答案 2 :(得分:2)
本地文件夹适用于您将使用的模块。社区文件夹用于最终打包并提供(或出售)给magento社区的模块。您下载和安装的任何模块都放在社区文件夹中。 Magento并不关心你的模块在哪里,区别在于主要是为了保持模块的组织。在任何情况下,因为它很容易从一个切换到另一个,它不应该真的打扰你那么多。
如果您不知道模块属于哪个类别,则可以从本地文件夹开始,如果要发布,可以稍后将其移动到社区文件夹。
答案 3 :(得分:0)
模块有两种类型的分类。
社区和商业 社区 - 社区免费 商业 - 为社区付费
本地和核心 Core - Extension是使用magento核心文件开发的。 本地 - 扩展是通过将核心文件复制到本地来开发的。实际更改在当地
本地人更可取......