magento 开发者笔记1

来源:互联网 发布:手机网络赚钱资源 编辑:程序博客网 时间:2024/05/01 18:44

本文参考了alanstorm的经典文章,原文链接如下

http://alanstorm.com/magento_config


Magento 配置文件

配置文件是magento的核心部分。它描述了我们所有能接触到的 module/model/class/template/etc。尽管对大多数php开发人员来说,不习惯这种抽象方式,而且需要花费时间去避免混淆概念,但是在这种方式下,通过重写系统的默认行为,可以给我们带来想象不到的灵活性。

作为开始,我们将会开发一个Magento模块来让我们在网页里查看系统配置。尽管只是复制粘贴,但是最好可以自己实践一下。这样可以熟悉magento的开发方式,同时可以学习这里面的关键术语。

建立module目录结构

在magento下,module其实就是一组php和xml文件的集合,用以扩展或者重写核心系统功能。这意味着可以增加额外的数据模型来跟踪销售情况,改变现有累的行为,或者增加全新的特性。

所有的magento基类是基于同一个module系统建立的,同样这也是我们建立module的标准。如果你查看目录

app/code/core/Mage

每个文件都是一个独立的module。他们组合在一起成了magento。本地开发的模块应该放在

app/code/local/Packagename(or CompanyName)/modulename

这个packagename 和 companyname就是起到了一个命名空间的作用。在这里用XStarX,module命名未Configviewer。那么一般来说需要建立如下的目录结构

app/code/local/XStarx/Configviewer/Block

app/code/local/XStarx/Configviewer/controllers

app/code/local/XStarx/Configviewer/etc

app/code/local/XStarx/Configviewer/Helper

app/code/local/XStarx/Configviewer/Model

app/code/local/XStarx/Configviewer/sql

 

接下来,在我们第一个例子里,有两个文件需要创建。首先建立配置文件config.xml

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

第二个文件应该在下面的位置创建,Packagename_Modulename

app/etc/module/XStarX_Configviewer.xml

文件config.xml应该包含以下内容

<config>

            <modules>

                        <XStarX_Configviewer>

                                    <version>0.1.0</version>

                        </XStarX_Configviewer>

            </modules>

</config>

在XStarX_Configviewer.xml里面包含下面内容

<config>

            <modules>

                        <XStarX_Configviewer>

                                    <active>true<active>

                                    <codePool>local</codePool>

                        </XStarX_Configviewer>

            </modules>

</config>

此时尽管我们写任何module的代码,但是magento已经知道有这样一个module的存在了。为了确认配置文件成功,可以清除magento cache, 然后在管理端,打开system->configuration->Advanced, 下面的“Disable modules output”里看到你刚刚加入的module:Configviewer。如果没有看到,建议你从头再做一次。如果看到了,那么恭喜你,已经迈出了成功的第一小步。

建立module config

改模块应该有如下功能

1.     检查“showConfig”的请求串是否存在。

2.     如果请求串存在,显示Magento config并停止正常执行

3.     检查是否有其他请求变量,showConfigFormat将会帮助我们明确是text或者是xml输出。

首先我们在config.xml下面增加新的部分配置

<config>

<modules>…</modules>

<global>

      <events>

                  <controller_front_init_routers>

                              <observers>

                                          <star_configviewer_model_observer>

                                                      <type>singleton</type>

                                          <class>Star_Configviewer_Model_Observer</class>

                                                      <method>checkForConfigRequest</method>

                                          </star_configviewer_model_observer>

                              </observers>

                  </controller_front_init_routers>

      </events>

</global>

</config>

然后在下面的目录创建一个文件

Star/Configviewer/Model/Observer.php

在里面添加如下代码

<?php

class Star_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() );

}

}

  ?>

清除缓存,载入下面的url,查看结果

http://localhost/magento/?showConfig=true

我们看到的是什么?

重点是厐大的xml,他们描述了magento的系统状态。他们给出了所有的模块,模型,类,甚至是监听者以及你所能想到的任何东西。

例如,考虑你上面创建的configx.xml。如果你在xml里搜索下面的关键字

Configviewer_Model_Observer

你就可以找到定义的类。每个模块的config.xml都会被解析并包含到全局的config文件中。(那这样会不会效率很低?)

我们需要关注的重点

现在所接触的东西看上去可能会觉得很深奥,但是config是理解magento的关键。我们创建的每个模块都要添加这样的config,而且你需要用到核心系统功能的时候,magento都会去查找配置文件。

在继续深入前,一个MVC的开发者,可能想要去研究一下helper类,初始一个例子如下

$helper_sales = new HelperSales();

Mageno已经对php类的申明做了抽象化。在magento里,上面的语句用下面的替代

$helper_sales = Mage::helper(‘sales/data’);

通俗来说,静态的helper方法是

1.     查找Config里的<helpers/>部分。

2.     在<helpers/>, 找<sales />部分

3.     在<sales />部分找<class />部分

4.     用3中找到的类名(Mage_Sales_Helper)去构建一个完整的类Mage_Sales_Helper_Data

这些看起来很繁琐,但是用config来找到类的名字也是有好处的,你可以在不必修改magento任何核心代码的基础上就可以重写原有的功能。我们就可以整洁的扩展系统功能。

 


原创粉丝点击