Magento codepools 介绍

Magento有三个不同的Codepools在app/code/文件夹中
.Core
.Community
.Local

app/code/core –
Core这个目录是放Magento自身核心代码的地方, 这个文件夹只属于Magento核心开发者们, 也就是说你绝不能动里面的任何文件, 如果你修改了这个文件夹下面的文件, 那么, 以后当你准备升级Magento的时候, 你就能尝到不听取忠告的惩罚了:)

app/code/community  –
这个目录是属于Magento社区开发者的. 它用来放置第三方模块或者插件, 无论是收费的, 还是免费的. 无论是在MagentoConnect上面找到的, 还是直接在第三方插件的官方站点下载的. 那就是说, 如果你已经安装的有插件的话, 那肯定是在app/code/community/目录里面.

app/code/local –
如果你有一个基于Magento的网站, 同时你又想自己对网站做一些调整, 或者, 你是一个Magento开发者, 你本来就有调整Magento一些逻辑的打算, 那么, Local这个目录就是为你而准备的.当你下载了Magento时这个文件夹是不存在的,必须先创建。
无论你是打算覆盖Magento的extensions, Blocks还是其他的Methods, 你都可以从Core目录拷贝对应的文件及其相应的文件夹结构到Local目录, 然后, 按照你的意愿做任何修改. 当然, 你也可以在这个目录, 创建自己的extensions.

这三个Code Pools在Magento里面是如何相互作用的呢?

要搞清楚这个问题, 我们需要打开Magento的主文件app/Mage.php
    

/**
* Set 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';
 
$appPath = implode(PS, $paths);
set_include_path($appPath . PS . Mage::registry('original_include_path'));
include_once "Mage/Core/functions.php";
include_once "Varien/Autoload.php";

从上面的代码段, 我们可以看出, Magento使用include paths的顺序, 首先它会检索Local目录, 如果没有, 它会接着检查Community目录, 如果都没有的话, 它最后才会加载Core目录的文件. 这也是给开发者提供了一个重写Magento类而不修改核心文件的一个方法.