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任何核心代码的基础上就可以重写原有的功能。我们就可以整洁的扩展系统功能。
- magento 开发者笔记1
- Magento开发者基础知识
- 开发者对 Magento 的认识
- Magento 2开启开发者模式
- magento -- 打开magento开发的调试模式(开发者模式)
- magento学习笔记之一
- magento学习笔记之一
- Magento开发笔记
- magento 开发笔记2
- Magento 开发笔记3
- Magento 开发笔记4
- Magento 开发笔记5
- magento 开发笔记6
- magento后台设置笔记
- magento学习笔记一
- Magento笔记/记录
- Magento笔记--安装篇
- magento 笔记
- Linux修改SSH端口和禁止Root远程登陆
- 在WYSIWYG模块中为Drupal 7配置CKEditor 4
- Python Windows Service的方式运行
- hdu4324
- 算两个日期相差天数之使用Calendar类型注意事项
- magento 开发者笔记1
- js键盘键值
- cygwin编译ffmpeg
- c语言大小端转化
- 一些想法吧
- android 获得手机号相关
- MongoDB Note
- 软件项目管理的十大定律
- Android TextView的各种属性