Magento 的配置文件如同该系统的心脏一般。它负责从总体上配置所有被请求的模块,模型,类,模板文件等。它是绝大部分PHP程序员不会接触到的一块抽象层,同时也 会增加一系列的开发成本,但是,所有这些都是值得的,因为Magento的配置文件允许你对系统的默认功能进行你无法想象的高度扩展。

为了学习Magento配置文件,我们将会在本章创建一个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文件中会包含下面的代码,先不用理解这些代表什么,继续看,下面会细细讲解。

01
02
03
04
05
06
07
<config>
    <modules>
        <Magentotutorial_Configviewer>
            <version>0.1.0</version>
        </Magentotutorail_Configviewer>
    </modules>
</config>

最后, Magentotutorial_configviewer.xml需要包含以下配置文件代码,

01
02
03
04
05
06
07
08
<config>
    <modules>
        <Magentotutorial_Configviewer>
            <active>true</active>
            <codePool>local</codePool>
        </Magentotutorial_Configviewr>
    </modules>
</config>

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

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

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

万俟飞(http://www.moqifei.com)整理收集

创建、完善模块的配置文件

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

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

首先,我们将下列代码中的<global>部分添加到config.xml文件中,

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
<modules>
    ...
</modules>
<global>
    <events>
        <controller_front_init_routers>
            <observers>
                <Magentototurial_configviewer_model_observer>
                    <type>singleton</type>
                    <class>Magentototurial_Configviewer_Model_Observer</class>
                    <mothod>checkForConfigRequest</mothod>
                </Magentototurial_configviewer_model_observer>
            </observers>
        </controller_front_init_routers>
    </events>
</global>

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

Magentotutorial/Configviewer/Model/Observer.php

添加以下代码到该文件中,

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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”字符串。

http://www.moqifei.com/?showConfig=true

我能在配置文件中找到什么有用信息?

打开上述页面之后,你会看到一个巨大的XML文件。它描述了当前运行的Magento系统的整个状态。你能够找到所有的模块,模型,类,时间监听者以及所有存在于Magento系统中的配置。

还记得本章创建模块时建立的config.xml配置文件吗?试着在浏览器中的xml文档中搜索该配置文件中包含的Configviewer_Model_Observer,你会发现刚刚创建的这个配置文件实际上也包含在这个xml文档中。总的来说Magento中所有模块的配置文件都会被解析并包含在这个全局配置文件当中。

为什么配置文件对我如此重要?

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

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

01 $helper_sales new HelperSales();

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

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

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

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

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

转载请注明: 转载自技安的博客 – Web系统构架与运维管理

本文链接地址: Magento开发文档(二):Magento配置

转载于:https://www.cnblogs.com/lifeifei_heyang/p/4291310.html

Magento开发文档(二):Magento配置相关推荐

  1. Magento开发文档(七):Magento EAV模型

    在第一篇介绍Magento ORM的文章中,我们提到过Magento拥有两类模型.普通的模型及Entity Attribute Value(EAV)模型.这里首先搞清楚它们之前的一些关系. 所有的Ma ...

  2. Magento开发文档(一):Magento入门

    开始之前,首先声明下,Magento开发者手册由Alan Storm发表在Magento官方网站上.总共分八个部分,由浅入深的介绍了Magento的MVC架构及Magento中使用的比较特殊的EAV模 ...

  3. Magento开发文档(四)Magento 布局、块 、模板

    刚入门magento的开发者容易吧布局和视图给混淆. 本文将看看Magento的Layout/Block的做法, 并告诉您如何将其融入Magento的MVC的世界观. 与许多流行的MVC系统相比,Ma ...

  4. 树莓派开发文档笔记—基础配置

    1.树莓派刷机 2.树莓派登陆 2.1 HDMI 视频线 连接到显示器 2.2 串口 2.2.1设备破解                         默认情况,树莓派的串口和蓝牙连接.       ...

  5. 微信小程序开发文档-小程序配置 /全局配置

    # 全局配置 小程序根目录下的 app.json 文件用来对微信小程序进行全局配置.文件内容为一个 JSON 对象,有以下属性: # 配置项 属性 类型 必填 描述 最低版本 entryPagePat ...

  6. SpringBoot开发文档二(MD5二次加密)

    经过我们第一步的测试,我们可以进行最简单的网页-后台的交互,第二步我们就来进行密码的MD5的加密了. 首先我们为什么要进行MD5加密呢?是这样的,当前端返回给后端密码时,如果不进行加密,很容易被黑客入 ...

  7. lan口配置 petalinux_PetaLinux开发文档

    最近又开始在xupv5-lx10t板子上基于microblaze移植petalinux了,贴一个前年写的文档吧. 弄得很花哨,一半都是虚的内容,务虚者必被虚名所害,说起来头头是道,什么都知道,做起来却 ...

  8. 最新云豹二开直/播短视频完整系统源码+带开发文档/教程

    正文: 最新云豹二开直/播短视频完整系统源码+带开发文档/教程,好友给我分享的,属于云豹二开,功能非常的强大,且有非常完整的开发文档和教程. 但是说实话这类程序不属于好部署的那一种,比较吃一定的技术, ...

  9. luajit开发文档中文版(二)LuaJIT扩展

    2022年6月10日15:33:04 luajit开发文档中文版(一)下载和安装 luajit开发文档中文版(二)LuaJIT扩展 luajit开发文档中文版(三)FAQ 常见问题 luajit开发文 ...

  10. luajit开发文档wiki中文版(二) LuaJIT 扩展

    2022年6月9日09:39:53 luajit开发文档中文版(一)下载和安装 luajit开发文档中文版(二)LuaJIT扩展 luajit开发文档中文版(三)FAQ 常见问题 luajit开发文档 ...

最新文章

  1. c语言课程设计学生籍贯信息记录簿,C语言课程设计 学生籍贯信息记录簿设计.doc...
  2. hive外部表改为内部表_3000字揭秘Greenplum的外部数据加载——外部表
  3. angular 定义对象_angular – 使用对象定义定义FomGroup
  4. ssh端口映射,本地转发
  5. [蓝桥杯][算法提高VIP]分苹果(差分||树状数组)
  6. mysql嵌套loop循环_mysql游标嵌套循环
  7. php不显示内容里的图片不显示,图片显示不出来,但是数据库里有显示
  8. Android:模拟器使用命令安装apk
  9. python算法常用技巧与内置库
  10. repeater 实现分列(两列的简单办法)
  11. ESP32开发实例(七),WebServer使用
  12. 去除winrar广告
  13. 电能终端服务器,抄表终端服务器设置教程
  14. [渝粤教育] 西南科技大学 财务会计 在线考试复习资料(1)
  15. 如何写好一篇SCI论文
  16. OP负反馈放大电路的自激振荡
  17. java 打印字间距 行距_[图片问答]LODOP打印的行间距字间距
  18. 卖辣椒包的也要IPO:给肯德基们“打工”,但志不在此
  19. 邮件发送失败服务器繁忙,★邮件发送失败的原因和解决方法
  20. 各大搜索引擎蜘蛛名称

热门文章

  1. AweEraser for Mac如何永久删除笔记本电脑上的数据?
  2. 多图像合成为延时视频的方法
  3. 矢量图形设计工具Artboard快捷键汇总
  4. 2019最强Python书单,喜欢看书的小伙伴看这里!
  5. JAVA程序员面试32问(价值8k)你认同吗?
  6. Linux的文件系统与文件
  7. MySQL max_allowed_packet
  8. laravel路由基本知识
  9. 基于隐式调用风格的kwic实现
  10. 理解Virtual方法。