Magento学习手记(第四天)

第四天:

一、 Magento常用函数记录:

    1. Mage::getModel():获得Model对象;

  • 在系统配置中寻找节点;
  • 在节点中间寻找节点;
  • 在节点中寻找节点;

    2. Mage::getSingleton():获得单例模式的Model对象;

    3. Mage::register()/registry()/unregister():注册全局变量/获取全局变量/注销全局变量;

    4. Mage::getBaseUrl():获得当前店铺的路径;

    5. Mage::getData():获得对象中的值或某个值;

    6. Mage::helper():获得helper对象;

 

二、创建测试模块

    第一步:创建目录结构

    app/code/local/YEMA/Test/Block

    app/code/local/YEMA/Test/controllers

    app/code/local/YEMA/Test/data

    app/code/local/YEMA/Test/etc

    app/code/local/YEMA/Test/Helper

    app/code/local/YEMA/Test/Model

    app/code/local/YEMA/Test/sql

 

    第二步:创建config.xml和YEMA_Test.xml文件

  app/code/local/YEMA/Test/etc/config.xml

 1     <?xml version="1.0"?>
 2     <config>
 3         <modules>
 4             <YEMA_Test>
 5                 <version>0.0.1</version>
 6             </YEMA_Test>
 7         </modules>
 8     </config>
 9     app/etc/modules/YEMA_Test.xml
10     <?xml version="1.0" encoding="UTF-8"?>
11     <config>
12         <modules>
13             <YEMA_Test>
14                 <active>true</active>
15                 <codePool>local</codePool>
16             </YEMA_Test>
17         </modules>
18     </config>

 

  第三步:清缓存,在System->Configuration->Advanced中确认模块加载;

    开始增加逻辑模块:

    1. 检查“showConfig”查询字符串是否存在;

    2. 如果“showConfig”存在,那么检查“showConfigFormat”查询字符串是否存在;

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

    4. 终止执行流程;

 

    第四步:编辑config.xml文件

 1     <?xml version="1.0" encoding="UTF-8"?>
 2     <config>
 3         <modules>
 4             <YEMA_Test>
 5                 <version>0.0.1</version>
 6             </YEMA_Test>
 7         </modules>
 8         <global>
 9             <events>
10                 <controller_front_init_routers>
11                     <observers>
12                         <app_configviewer_model_observer>
13                             <type>singleton</type>
14                             <class>YEMA_Test_Model_Observer</class>
15                             <method>checkForConfigRequest</method>
16                         </app_configviewer_model_observer>
17                     </observers>
18                 </controller_front_init_routers>
19             </event>
20         </global>
21     </config>

 

    第五步:创建YEMA/Test/Model/Observer.php

 1 <?php
 2 class YEMA_Test_Model_Observer {
 3     const FLAG_SHOW_CONFIG = 'showConfig';
 4     const FLAG_SHOW_CONFIG_FORMAT = 'showConfigFormat';
 5     private $request;
 6     function checkForConfigRequest($observer) {
 7         $this->request = $observer->getEvent ()->getData ( 'front' )->getRequest ();
 8         if ($this->request->{self::FLAG_SHOW_CONFIG} === 'true') {
 9             $this->setHeader ();
10             $this->outputConfig ();
11         }
12     }
13     private function setHeader() {
14         $format = isset ( $this->request->{self::FLAG_SHOW_CONFIG_FORMAT} ) ? $this->request->{self::FLAG_SHOW_CONFIG_FORMAT} : 'xml';
15         switch ($format) {
16             case 'text' :
17                 header ( "Content-Type:text/plain" );
18                 break;
19             default :
20                 header ( 'Content-Type:text/xml' );
21         }
22     }
23     private function outputConfig() {
24         die ( Mage::App ()->getConfig ()->getNode ()->asXML () );
25     }
26 }

 

 

三、Magento的MVC流程分析及实例测试

 

 

    Magento的MVC处理流程:

    1. URL请求被一个PHP拦截;

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

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

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

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

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

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

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

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

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

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

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

    13. 块对象直接从模型那里获得数据,换句话说,在Magento的MVC架构中,控制器并不直接把数据传给视图;

 

    下面新建示例来进行实际过程测试及理解:

    第一步:创建目录结构

    第二步:创建config.xml和YEMA_MVCTest.xml

    第三步:清缓存,在System->Configuration->Advanced中确认模块加载;

    第四步:配置路由

 1     <frontend>
 2         <routers>
 3             <MVCTest>
 4                 <use>standard</use>
 5                 <args>
 6                     <module>YEMA_MVCTest</module>
 7                     <frontName>MVCTest</frontName>
 8                 </args>
 9             </MVCTest>
10         </routers>
11     </frontend>

 

    frontend:frontend标签指向一个Magento区(Area),比如“frontend”就是指网站的前台,“admin”是指网站的后台,“install”是指Magento的安装程序。

    routers:routers标签有时候包含的是路由对象的定义,有时候包含的是路径的定义。路由对象是进行路由操作的实体,而路径仅仅是路由对象的一个参数。注: 如果仔细看全局配置xml,会发现有两处地方出现routers,一处是“web -> routers”,另外一处是“frontend-> routers”。两处routers包含的内容不一样,第一处包含的是路由对象的定义,第二处包含的是路径的定义。

    module:这个标签的内容应该是一个模块的全名,Packagename_Modulename, Magento用这个名字来定位模块文件。

    frontName:当一个router解析一个URL的时候,它的路由规则是按照如下规则进行的

http://example.com/frontName/actionControllerName/actionMethod/

 

    第五步:为路由创建执行控制器

    创建文件app/code/local/YEMA/MVCTest/controllers/IndexController.php

<?php

class YEMA_MVCTest_IndexController extends Mage_Core_Controller_Front_Action {

    function indexAction() {

        echo "MVCTest Edit by pisTol at ".date('Y-m-d H:i:s', time());

    }

}

    第六步:查看路由地址.../MVCTest/(完整地址为/MVCTest/index/index/)

 

转载于:https://www.cnblogs.com/pisTol/p/Magento_study_note_4.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值