没有合适的资源?快使用搜索试试~ 我知道了~
Magento模块开发教程
5星 · 超过95%的资源 需积分: 10 32 下载量 30 浏览量
2012-02-17
15:57:45
上传
评论 1
收藏 539KB PDF 举报
温馨提示
试读
65页
magento学习模块开发教程 magento二次开发Magento功能列表
资源推荐
资源详情
资源评论
Magento 模块开发教程
第一章
Magento
Magento
Magento
Magento
强大的配置系统
Magento 的配置系统就像是 Magento 的心脏 , 支撑着 Magento 的运行 。 这套
配置系统掌管着几乎所有 “ module/model/class /template/etc ” 。它把整 个
Magento 系统抽象出来 , 用一个配置文件来描述 。 这里的 “ 配置文件 ” 并不是一
个物理上存在的文件,而是 Magento 根据当前的系统状态动态生成的一段 XML
。
大多数的 PHP 开发者并不习惯于这样抽象层 , 因为它增加的编程的复杂性 。 但是
这样的抽象提供了无与伦比的灵活性,允许你覆盖几乎任何系统的默认行为。
首先 , 让我们写一个简单的插件来看看这个所谓的 “ 配置文件 ” 长什么样 。 虽然
我已经提供的现成的代码 , 但是还是建议你自己建立这个插件 , 把整个流程走一
遍有助于你的理解。
设置插件的目录结构
我们将要创建一个 Magento 的模块 【 注 : Magento 的插件不叫 plug-in , 叫
module , 翻译成模块 】 。 Magento 的模块由 php 和 xml 文件组成 , 目的是扩展或
者覆盖系统的行 为,比如为订单增加数据模型,更改一个类的方法,或者增加
一个全新的功能 。 【 注 : Magento 自带的那些功能也都是基于模块的 , 比如用户
注册,商品展 示,结账流程等等。 Magento 给我的感觉就是一切皆模块, 和
Eclipse 的插件体系结构有点像】
大多数 Magento 的系统模块的结构和我们将要构建的插件的结构是一样的
。
Magento 的系统模块在以下目录
app/code/core/Mage
每一个子目录都是一个单独的模块 。 这些模块是由 Magento 官方开发的 。 我们安
装完 Magento 以后 , 所使用的功能就是来自这些模块 。 我们自己创建的模块应该
放在如下目录
app/code/local/Packagename
“ Packagename ” 应该是一个唯一的字符串,用来标识你的代码。通常人们使用
公司名字作为 Packagename ,比如
app/code/local/Microsoft
由于我在做我自己的 Magento 项目,我将使用我自己的域名
“ Alanstormdotcom ” 。 然后,我们要创建以下目录结构
app/code/local/Alanstormdotcom/Configviewer/Block
app/code/local/Alanstormdotcom/Configviewer/controllers
app/code/local/Alanstormdotcom/Configviewer/etc
app/code/local/Alanstormdotcom/Configviewer/Helper
app/code/local/Alanstormdotcom/Configviewer/Model
app/code/local/Alanstormdotcom/Configviewer/sql
你的插件并不一定需要包含以上所有的目录 , 但是为了以后开发方便 , 我们还是
在一开始就把目录创建好。接下来我们要创建两个文件,一个是 config.xml ,
放在 etc 目录下面
app/code/local/Alanstormdotcom/Configviewer/etc/config.xml
文件内容如下
<config>
<modules>
<Alanstormdotcom_Configviewer>
<version>0.1.0</version>
</Alanstormdotcom_Configviewer>
</modules>
</config>
第二个文件需要在如下位置创建
app/etc/modules/Alanstormdotcom_Configviewer.xml
第二个文件应该遵循如下命名规则 “ Packagename_Modulename.xml ” , 文件内容
如下
<config>
<modules>
<Alanstormdotcom_Configviewer>
<active>true</active>
<codePool>local</codePool>
</Alanstormdotcom_Configviewer>
</modules>
</config>
我们先不管这些文件是干什么的 , 以后会解释 。 建立好这两个文件以后 , 你的模
块的骨架就已经完成了 。 Magento 已经知道你的模块存在 , 但是现在你的模块不
会做任何事情。我们来确认一下 Magento 确实装载了你的模块
1. 清空 Magento 缓存
2. 在后台管理界面,进入 System->Configuration->Advanced
3. 展开 “ Disable Modules Output ”
4. 确认 “ Alanstormdotcom_Configviewer ” 显示出来了
如果你看到 “ Alanstormdotcom_Configviewer ” , 那么恭喜你 , 你已经成功创建
了你第一个 Magento 模块!
创建模块逻辑
我们之前创建的模块不会做任何事情,下面我们来为这个模块加入逻辑
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_Obs
erver</class>
<method>checkForConfigRequest</method>
</alanstormdotcom_configviewer_model_observer>
</observers>
</controller_front_init_routers>
</events>
</global>
</config>
然后创建如下文件
Alanstormdotcom/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
【注: 根据文中的配置,不难看出任何指向 Magento 的 URL 加了 “ ?showConfig=true ” 以后
,
都会输出同样的内容,正常的执行流程会被终止 。 】
配置文件分析
打开上述 URL ,你应该看到一个巨大的 XML 文件。这个文件描述了当 前
Magento 系统的状态 。 它列出了所有的模块 , 数据模型 , 类 , 事件 , 监听器等等
。
举个例子,如果你搜索如下字符串
Configviewer_Model_Observer
你会发现刚刚你创建的那个类被列出来了。 Magento 会解析每个模块 的
config.xml ,并把它们包含在这个全局配置中。
这个配置文件有啥用?
到目前为止 , 我们所作的事情似乎没什么意义 , 但是这个配置文件却是理
解 Magento 的关键因素 。 你创建的每一个模块都会被加到这个配置文件中 , 任何
时 候,你需要调用一个系统功能的时候, Magento 都会通过这个配置文件来查
询相应的模块和功能 。 举个简单的例子 , 如果你懂 MVC 的话 , 你应该和 “ helper
class ” 之类概念的打过交道
$helper_salesrule = new Mage_SalesRule_Helper();
Magento 抽象了 PHP 的类声明方式。在 Magento 系统中,上面的代码等同于
$helper_salesrule = Mage::helper('salesrule');
Magento 将通过以下逻辑来处理这行代码
1. 在配置文件中查找 <helpers /> 标签
2. 在 <helpers /> 里面查找 <salesrule /> 标签
3. 在 <sales /> 里面查找 <class /> 标签
4. 实例化从 #3 找到的类( Mage_SalesRule_Helper )
Magento 总是通过配置文件来获得类名 , 这个逻辑看起来有些复杂 , 但这样做的
优点也很明显 , 我们可以不需要更改 Magento 的代码就能更改 Magento 的核心功
能。
【注: 在这个例子中,我们可以通过修改配置文件用我们自己 的
SalesRule_Helper 类来替换原来那个】这种高度抽象的编程方式在 php 中并不
常见,但是它可以让你清晰的扩展或者替换系统的某一部分。
第二章
Magento
Magento
Magento
Magento
请求分发与控制器
Model-View-Controller (MVC) , 模型 - 视图 - 控制器 , 源于 Smalltalk 编程语言
和 Xerox Parc 。现在有很多系统是基于 MVC 架构的,不同的系统 MVC 的实现也
略有不同 , 但都体现了 MVC 的精髓 , 分离数据 , 业务逻辑和显示逻辑 。 最常见的
PHP MVC 框架是这样的
剩余64页未读,继续阅读
资源评论
- fish131420872013-12-13教程讲的很详细,受益匪浅,magneto的模块确实比其他网站系统更要复杂一些,就xml配置文件便会让入门使用者研究一阵了了
- netyitong2014-01-24magneto 入门好资料,很详细,受益匪浅
- KZ_STIO2015-11-08参考用的,没什么特殊的地方,不够详细
- joy9992014-07-30还可以,参考有帮助
boolfly
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- SSCMS登录模块需要的JS文件
- JSP网络购物中心毕业设计(源代码+论文).rar
- 白盒测试报告.docx
- 基于LM5117芯片评估开发板硬件参考设计(原理图+PCB)+中英文数据手册资料.zip
- 照片批量重命名软件(文件批量修改图片文件名)
- app.apk
- 人工智能(AI)是计算机科学的一个分支,旨在开发和应用能够模拟、延伸和扩展人类智能的理论、方法和技术,包括机器人、语言识别、图像
- 嵌入式与物联网开发是当今信息技术领域的两大重要分支,它们相互交织,共同推动着智能化时代的进步 嵌入式开发主要关注在嵌入式操作
- 网络安全,这一看似高深莫测的领域,实则与我们每个人的生活息息相关
- 毕业设计基于深度学习的视觉问答系统源码+文档说明+答辩PPT.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功