Magento开发文档(二):Magento配置

magento的配置文件如同系統的心脏一般.它负责从总体上配置所有被请求的模块,模型,类,模板文件等。它是绝大部分php程序员都不会接触到的一块抽象层,同时,会增加一系列的开发成本,但是所有这些都是值得的,因为magento的配置文件允许你对系统默认给你进行你无法想象的高度扩展。为了学习magento配置文件,我们将会在本章创建一个magento模块,使其能够在浏览器中访问并显示配置文件

设置Magento模块的目录结构

这一节,我们将创建一个magento模块。magento模块是由php及xml文件组成,用来给系统扩展新功能,或重写扩展系统的行为。这可能意味着添加新的数据模型来跟踪销售信息,改变系统中类的行为,或添加完全的新功能。

magento系统中绝大多数你使用到的模块都具有相同的结构,。如果你查看

app/code/core/Mage

该目录下的每个文件夹都是magento团队创建的一个单独的模块,同时你创建的模块将会放在以下文件夹中,

app/code/local/Packagename

"packagename"是能够区别你代码的唯一名称.一般情况下科颜氏你的公司名称,但你也可以随意命名,列入微软开发的magento模块会使用以下命名

app/code/local/Microsoft

住在这里我们使用Magentotutorial.那么首先要创建模块,我们需要创建如下所示的目录结构

app/code/local/Magentotutorial/Configviewer/Block

app/code/local/Magentotutorial/Configviewer/controllers

app/code/local/Magentotutorial/Configviewer/etc

app/code/local/Magentotutorial/Configviewer/Helper

app/code/local/Magentotutorial/Configviewer/Model

app/code/local/Magentotutorial/Configviewer/sql

一个模块并不一定需要上述所有的目录,但是先把他们给全部创建好是个不错的注意。接着,需要创建两个配置文件,一个是位于上述路径etc目录中的config.xml

app/code/local/Magentotutorial/Configviewer/etc/config.xml

第二个位于下面路径

app/etc/modules/Magentotutorial_configviewer.xml

config.xml文件会包含下面的代码,先不用理解这些代表着什么,下面会详细讲解

<config>
    <modules>
        <Magentotutorial_Configviewer>
            <active>true</active>
            <codePool>local<codePool>
        </Magentotutorial_Configviewer>
    </modules>
</config>

再然后?不需要然后了,你现在已经创建了一个基本模块,当然它还什么都不能干,但是magento已经能够识别到该模块的存在.登录magento后台,进行如下操作

  • 清空magento缓存
  • 访问System->Configuration->Advanced
  • 点击”Disable modules output”,大概在最下面的位置,能够找到你刚创建的模块

找到了?恭喜你,你的第一个magento模块创建完毕

创建完善模块的配置文件

像上面说的一样,这个模块目前还什么都不能做,在完成本章之后,这个模块会有如下功能

  • 检查路径请求中是否包含showConfig字符串
  • 如果存在该字符串,将会显式magento的配置文件,并停止请求的默认执行
  • 检查路径中是否包含"showConfigFormat字符串",它能够定制配置文件输出格式

首先我们将<global>部分添加到config.xml文件中

<config>
    <modules>
        <Magentotutorial_Configviewer>
            <version>0.1.0</version>
        </Magentotutorial_Configviewer>
    </modules>
    <global>
        <events>
            <controller_front_init_routers>
                <observers>
                    <Magentototurial_configviewer_model_observer>
                        <type>singleton</type>
                        <class>Magentototurial_Configviewer_Model_Observer</class>
                        <method>checkForConfigRequest</method>
                    </Magentototurial_configviewer_model_observer>
                </observers>
            </controller_front_init_routers>
        </events>
    </global>

</config>

然后在下面的路径中创建Ovserver.php文件,

Magentotutorial/Configviewer/Model/Observer.php

添加以下代码到该文件中

class Magentotutorial_Configviewer_Model_Observer {
        const FLAG_SHOW_CONFIG = 'showConfig';
        const FLAG_SHOW_CONFIG_FORMAT = 'showConfigFormat';
 
        private $request;
 
        public function checkForConfigRequest($observer) {
            $this->request = $observer->getEvent()->getData('front')->getRequest();
            if($this->request->{self::FLAG_SHOW_CONFIG} === 'true'){
                $this->setHeader();
                $this->outputConfig();
            }
        }
 
        private function setHeader() {
            $format = isset($this->request->{self::FLAG_SHOW_CONFIG_FORMAT}) ?
            $this->request->{self::FLAG_SHOW_CONFIG_FORMAT} : 'xml';
            switch($format){
                case 'text':
                    header("Content-Type: text/plain");
                    break;
                default:
                    header("Content-Type: text/xml");
            }
        }
 
        private function outputConfig() {
            die(Mage::app()->getConfig()->getNode()->asXML());
        }
    }

到此,我们的配置文件查看模块完成了,清理下Magento缓存,然后在浏览器打开存放此模块的Magento的任意地址,并加上“showConfig=true”字符串。

打开上述页面之后,你会看到一个巨大的 xml文件.它描述了当前运的magento的整个系统状态.你能够找到的所有的模块,模型,类,事件以及所有存在于magento系统中的配置

还记得本章创建模块时,建立的config.xml配置文件吗?试着在浏览器中的xml文档中搜索该配置文件包含的Config_Model_Observer,你会发现这个配置文件也包含在这个xml中.

: 根据文中的配置,不难看出任何指向 Magento 的 URL 加了“?showConfig=true”以后,都会输出同样的内容,正常的执行流程会被终止


目前为止可能有些难以理解,但是这个配置文件是你学习magento的关键.你添加的任何所有模块都能在这个配置文件中找到,任何时候当你需要请求核心系统功能时,magento都会使用到配置文件.

举个例子,作为一个mvc程序员,你经常会使用到一些助手类,使用如下的方式实例化

$helper_sales=new HelperSales();

而magento是抽象化了这个过程,并非使用php类的声明方式.在magento中,上面助手类会使用如下方式实例化

$helper_sales=Mage::helper('sales');

通俗的说这个静态方法将会

  • 在配置文件查找<hepers/>节点
  • <helpers/>节点内,查找<sales/>节点
  • <sales />节点内,再查找<class />节点
  • 实例化在<class />节点中找到的类

这看起来废了很大的事,关键的优点是,通过配置文件查询类名,我们可以重写magento核心功能,而不需要改变或添加任何代码到核心库中.这种"元编程"的方式在php中用的不多,不过它可以明确的扩展你想扩展的任意一个地方

注: 在这个例子中,我们可以通过修改配置文件用我们自己的Helper 类来替换原来那个

Last modification:April 20, 2022
如果觉得我的文章对你有用,请随意赞赏