构建magento模块

时间:2009-06-17 07:57:01

标签: php magento module

我正准备开始构建我的第一个magento模块,但我找不到任何关于核心本地和社区文件夹之间差异的文献。我注意到有些人在本地和其他社区建立他们的模块,有什么区别,为什么我应该使用其中一个?

谢谢

4 个答案:

答案 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

为了更好地理解localcommunity文件夹之间的区别,有助于了解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)

模块有两种类型的分类。

  1. 社区和商业 社区 - 社区免费 商业 - 为社区付费

  2. 本地和核心 Core - Extension是使用magento核心文件开发的。 本地 - 扩展是通过将核心文件复制到本地来开发的。实际更改在当地

  3. 完成

    本地人更可取......