码迷,mamicode.com
首页 > 其他好文 > 详细

Magento

时间:2015-07-16 13:44:31      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:

Magento是一个php电子商务系统.

内部模块化.

创建模块流程

Magento系统模块

app/code/core/Mage

其中每一个子目录都是一个单独的模块

 

自己创建的模块放在下面路径

app/code/local/Packagename

自创的新模块应该包含以下目录结构

app/code/local/Packagename/Configviewer/Block

app/code/local/Packagename/Configviewer/cotrollers

app/code/local/Packagename/Configviewer/etc

app/code/local/Packagename/Configviewer/Helper

app/code/local/Packagename/Configviewer/Model

app/code/local/Packagename/Configviewer/sql

接下来还需要创建两个文件

一个是config.xml

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

文件内容如下

<config> 
<modules> 
<Packagename_Configviewer> 
<version>0.1.0</version> 
</Packagename_Configviewer> 
</modules> 
</config> 

第二个文件创建在

app/etc/modules/Packagename_Configviewer.xml 

此文件命名规则"包名_模块名.xml" 即"Packagename_Modulename.xml"

文件内容如下

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

先看看创建的模块有没有被加载出来:

1. 清空magento 缓存

2. 在后台管理界面, 进入System->Configuration->Advanced 

3. 展开 "Disable Modules Output"

4. 确认 "Package_Configviewer" 显示出来了

如果看到 Package_configviewer 那么这个新模块创建成功.

 

创建模块逻辑 

之前只是创建了模块的骨架, 现在为这个模块输入逻辑:

1. 检查 "showConfig" 查询字符串是否存在

2. 检查 "showConfig" 存在, 那么检查 "showConfigFormat" 查询字符串是否存在

3. 如果 "showConfigFormat" 存在, 那么输出指定格式的配置信息 否则输出默认格式的配置信息

4. 终止执行流程

首先config.xml文件需要修改

<config> 
<modules>...</modules> 
<global> 
<events> 
<controller_front_init_routers> 
<observers> 
<alanstormdotcom_configviewer_model_observer> <type>singleton</type>
<class>Alanstormdotcom_Configviewer_Model_Observer</class>
<method>checkForConfigRequest</method> </alanstormdotcom_configviewer_model_observer> 
</observers>
 </controller_front_init_routers> 
</events> 
</global> 
</config> 

然后创建如下文件 

Packagename/Configviewer/Model/Observer.php 

输入以下内容

<?php 
class Alanstormdotcom_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缓存, 输入URL: http://magento.example.com/?showConfig=true

显示出来的页面是巨大的XML文件, 描述了系统状态, 列出所有的模块, 数据类型, 类, 事件, 监听器, Magento会解析每个模块的config.xml, 并把他包含在这个全局配置中.

 

一般PHP实例化一个类是这样的:

$helper_salesrule = new Mage_Salesrule_Helper();

Magento抽象了PHP的实例化模式, 在Magento中, 上面的代码等同于

$helper_salesrule = Mage::helper(‘salesrule‘);

Magento按照以下逻辑处理:

1. 在配置文件中查找<helpers />标签

2. 在<helpers />中查找 <salesrule />标签

3. 在<salesrule /> 中查找class

4. 实例化从#3中找到的类(Mage_Salesrule_Helper)

这样看起来有些麻烦, 但好处是我们不需要更改Magento的代码就可以更改Magento的核心功能.

 

MVC流程:

1. URL请求被一个PHP文件拦截, 通常称为前端控制器(Front Controller) 

2. 这个PHP文件分析URL, 获得一个执行控制器的名字(Action Controller)和一个执行方法(Action Method)的名字, 这个过程通常称为路由(Routing)

3. 实例化#2获得的执行控制器

4. 调用执行控制器的执行方法

5. 执行方法中处理业务逻辑, 比如获取数据

6. 执行控制器负责把数据传给显示逻辑

7. 显示逻辑生成HTML

 

Magento的MVC流程和这个不同:

1. URL请求被一个PHP文件拦截

2. 这个PHP文件实例化一个Magento对象

3. Magento对象实例化前端控制器

4. 前端控制器实例化全局配置中指定的路由对象, 可以是多个

5. 路由对象会逐个与请求URL匹配

6. 如果发现匹配, 那么可以获得一个执行控制器和执行方法的名字

7. 实例化#6获得的执行控制器并调用相应的执行方法

8. 执行方法中 处理业务逻辑, 数据模型

9. 控制器实例化布局对象(Layout)

10. 布局对象根据请求的参数, 系统配置创建一个块对象(Block)列表, 并实例化

11. 布局对象会调用块对象的output方法生成HTML. 这是一个递归的过程, 因为块对象可以嵌套块对象

12. 每一个块对象和一个模板文件(Template File)对应, 块对象包含了显示逻辑, 模版文件包含了HTML和PHP代码输出

13. 块对象直接从模型那里获取数据, 也就是说 Magento 的MVC 架构中, 控制器不直接把数据传给视图

 

Magento

标签:

原文地址:http://www.cnblogs.com/derrck/p/4650728.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!