深入理解Magento-第九章-修改、扩展、重写Magento代码

logistic回归分析优点_糖尿病前期患者焦虑现状调查及影响因素分析 作者:牟海燕 封面:自己想吧文献概要本篇文献采用自编一般情况调查表及焦虑自评量表(SAS)对某医院100个糖尿病前期患者进行了调查,根据SAS得分将100个患者分为焦虑组(22例)和非焦虑组(78例),了解糖尿病前期患者焦虑现状、分析影响因素。以α=0.05的检验水准判断变量是否有统计学意义。主要统计学方法计量资料采用Shapiro-Wilk检验进行正态性检验;正态分布的计量资料以... 阅读详情

作为一个开发者的你,肯定要修改Magento代码去适应你的业务需求,但是在很多时候我们不希望修改Magento的核心代码,这里有很多原因,例如将来还希望升级Magento、还想使用更多的Magento代码。如果你正在寻找修改Magento代码的最佳方式,那么此篇文章将会是一个不错的教程。

适合对象:高级开发者

适合目标:开发者希望自定义修改Magento

当前版本:Magento versions: 1.4.0.1

作者:精东

最后修改时间:2010年5月30日

版本:V 0.3.0

重写Magento模块(Module)
第一步,你需要创建属于你自己代码的命名空间,例如Wemvc,App等,为了方便与大家分享代码,我将空间命名为App。

假如你现在打算修改Mage/Catalog/Block/Breadcrumbs.php这个文件,你可以在你的命名空间,App里添加一个新的模块 “Catalog”。接下来创建块(Block)目录,并复制Breadcrumbs.php到你的新目录中。这里还需要你创建一个config.xml 配置文件。

修改Breadcrumbs.php的类名为App_Catalog_Block_Breadcrumbs,并继承原类名Mage_Catalog_Block_Breadcrumbs。
现在,你需要激活你的新模块,这样magento才能够知道你的新模块。

创建文件app/etc/modules/App_All.xml,添加如下代码。

下面我们需要一个特殊的标签来复写掉Breadcrumbs,下面我们通过模块的配置文件来实现。

重写Magento区块(Blocks)
编辑文件“app/code/local/App/Catalog/etc/config.xml”

我们需要添加一个“blocks” 标签,或者在已经存在的“blocks”标签中添加内容。然后在模块名后面添加rewrite标签,在这个例子中模块名是“catalog”。然后我们看 “breadcrumbs”标签,这个标签帮助magento找到我们我们想修改的块。在我们的列子中,breadcrumbs是Magento核心代码中的类名: app/code/core/Mage/Catalog/Block/Breadcrumbs.php。如果你有更多的目录层级,可以用下滑线来分隔。例如:

在这个例子中,我们重写了app/code/core/Mage/Catalog/Block/Category/View.php。

在breadcrumbs标签中的值是你的类名,这样Magento就可以获取你的类,因为类名与你的目录名一致。用过zend framework的人都知道,自动加载auto loader这个东西,它会跟你类名中的下滑线去你的目录中需要对应的类文件。记住一点,下滑线代表下一级别的文件夹,如果你的类名与你的文件目录名不一致,那么Magento根本不会理睬你。
举例来说:

重写Magento控制器(Controller)-正则表达式匹配式
重写Magento控制器我们我们以重写购物车为例。

1、首先在App下创建新的模块,依次创建如下文件:

2、编辑/app/code/local/App/Shopping/etc/config.xml文件,加入如下代码:

3、改写你自己的控制器
/app/code/local/App/Shopping/controllers/CartController.php
请将下面的代码添加到你的控制器中,我们唯一修改的地方是在index动作中添加一个error_log();

在这段代码中,首先是类名,跟前面讲到的区块(Block)一样,我们自己的类名是App_Shopping_CartController继承原先Mage_Checkout_CartController.在indexAction中我们记录了一段信息。

4、修改App_All.xml,激活我们新的Shopping模块

到这里,清除缓存后,你已经可以看到error_log成功记录了我们的信息,打开页面http://www.wemvc.dev /checkout/cart/,显示的是购物车页面,一切正常,但如果你访问http://www.wemvc.dev/shopping/cart /,你会发现是首页。。。。我们期望的购物车视图还没有出现,如何解决呢?让我们接下来往下看。

5、修改视图文件app/design/frontend/[myinterface]/[mytheme]/layout/checkout.xml
在layout标签中,添加下面内容:

注意,这里的大小写敏感。

到这里基本大功告成,但是,我建议你学习下正则表达式,因为刚刚的代码中,有这么一段:

这里是使用正则表达式进行匹配的。

还有一点,经过尝试,这里是可以支持同模块名覆盖的,例如Magento代码中商品详情页是Mage_Catalog_ProductController::viewAction(),如果我们想重写这个Controller,我们可以这样做:
a.简历新的目录/app/code/local/App/Catalog/controllers/ProductController.php
代码如下:

b.编辑/app/code/local/App/Catalog/etc/config.xml,代码如下:

清空缓存,刷新你的商品详情页,看是不是变了,呵呵。但是这个方法有个弊病,你需要把这个模块的所有Controller都复写掉,不然你会遇到比较大的麻烦。说到这,我再介绍一种重写方法.
仔细看配置文件的写法:

重写Magento模型和动作助手(Model&Helper)
我们在改写Magento的过程中,为了实现自己的业务逻辑,难免要改它的业务模型,这里先介绍一个最简单的办法。前面我们有将到,Magento是使用的Zend Framework框架:

在breadcrumbs标签中的值是你的类名,这样Magento就可以获取你的类,因为类名与你的目录名一致。用过zend framework的人都知道,自动加载auto loader这个东西,它会跟你类名中的下滑线去你的目录中需要对应的类文件。记住一点,下滑线代表下一级别的文件夹,如果你的类名与你的文件目录名不一致,那么Magento根本不会理睬你。
举例来说:

我们再看下Magento的启动器,Mage类中的一段代码:
Magento 在原有的包含路径上重新添加了它自己的几个包含路径(include path),分别是local,community,core代码池目录,然后是varien库目录,这样的顺序确定了PHP查询PHP类的顺序,分别是 local,community,core,因为magento 并没有显式加载任何的库,而是利用了php的__autoload特性。

如果你在local代码池(目录)下面创建一个Mage名字空间(目录),那么你几乎可以重写 magento的任意一个类了。比如,我们要重写Mage_Catalog_Model_Category这个类,那么你可以创建下列的文件目录结构:
app/code/local/Mage/Catalog/Model/Category.php
这样你可以直接将原来的文件复制过来,然后你可以做任意修改了,而不用担心版本更新的问题。

在这里我不得不告诉你,这样重写类的方法不是最佳方案,因为你每次都要复制一个类出来,这样的方式跟直接修改Magento代码大区别。你可以尝试用模块下的配置文件配置你自己的类,继承你想重写的模型或者助手,然后调用自己的类。现在我们以用户模型为例深入讲解。

a.首先创建自己的模块文件夹

b.修改app/etc/modules/App_All.xml

c.修改自己的模块配置文件app/code/local/App/Customer/etc/config.xml

d.现在写你新的Model,在文件app/code/local/App/Customer/Model/Customer.php中新建类App_Customer_Model_Cutomer


e.我们再重写一个类,以加深理解。接下来我们重写Customer Address Model。 跟重写Customer Model一样,我们先编辑模块的配置文件app/code/local/App/Customer/etc/config.xml。

上面看出来了么,rewrite标签内的customer和address其实就是你要覆写的magento model。
接下来创建model class App_Customer_Model_Address,并写你要覆盖和新增的方法

f.我再讲下如何覆盖Magento的模型资源,这里以复写Address Entity Model class为例,我们先来修改模块的配置文件app/code/local/App/Customer/etc/config.xml。


接下来创建类文件。


总结
在本章中我们学习了如何重写模块、重写控制器、重写区块,以及如何重写模型和助手,基本重写Magento代码对你来说已经不是难事了。文章至此,要恭喜你,你已经掌握了大部分修改Magento的技能。下面的文章我们会进行更深入的研究。最后感谢所有Sasacake Team Member,是他们对待工作的热情和责任感促使我写这些教程。


出自:精東·博客

 

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/shuishui8310/archive/2010/06/17/5676607.aspx

前端学习(396):京东制作页面5三大标签优化 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http... 阅读详情

相关推荐

Labelme AI-Polygon闪退排查与修复指南

本文详细介绍了Labelme AI-Polygon功能闪退问题的排查与修复方法,包括环境配置检查、模型路径设置、依赖库版本控制等关键步骤。通过系统性的解决方案和实用技巧,帮助用户快速解决闪退问题,确保数据标注工作的高效进行。

weixin_29311017的博客 140

python 2到100的素数_po视频app下载安装|西瓜视频app下载安装_电脑知识学习网

陈MM最近迷上某电视剧,任何相关视频都不放过。睡前用好看视频看了几个后,惊喜地发现好看读懂了她的喜好,开始推荐和该剧有关的所有视频~并且还能自动连播!看着看着,天就亮了...人生难得知己,看好看视频,通宵又何妨~张大妈是小区广场舞队的中坚力量,但一直头疼去哪找舞蹈视频。自从发现好看视频里的广场舞频道,就爱不释手~现在舞蹈队的大妈们都用好看视频学舞,励志要从小区广场跳到纽约时代广场!致力于为你提供更...

weixin_31141099的博客 10万+

别再到处找模型了!手把手教你用Xinference+Docker部署本地私有大模型(Llama2/Qwen实战)

本文详细介绍了如何使用Xinference和Docker部署本地私有化大模型(如Llama2/Qwen),涵盖硬件配置、模型管理、Docker部署及性能优化等关键步骤。通过实战案例,帮助开发者快速构建企业级AI推理服务,确保数据安全与高效运行。

weixin_28683065的博客 232

Grid报错clause is ambiguous问题-----------------摘自精东

Magento深入理解-Grid报错clause is ambiguous问题<br />我记得之前没少讲过Grid,今天在写Grid遇到这样一个错误,将解决办法分享下。SQLSTATE[23000]: Integrity constraint violation:1052 Column 'increment_id' in where clause is ambiguous<br />这个错误怎么来的呢,关键是clause is ambiguous。<br />使用Grid必须要设置一个Coll

Terry - 专注外贸B2C 4691

kali2020.2安装出现的问题并附详细解决办法

kali2020.2的安装

weixin_48776804的博客 3049

RK3568部署YOLOv8的7种方法对比:量化vs非量化的性能实测与优化建议

本文针对RK3568平台,深度对比了YOLOv8模型的七种部署方法,重点分析了量化与非量化策略的性能差异。通过实测数据,详细评估了不同方法在推理速度、CPU占用、内存消耗及模型精度上的表现,并提供了从模型结构调整到系统级优化的具体建议,为边缘AI部署选型提供实用参考。

weixin_29099217的博客 529

关于Magento的时间/时区问题--------转自精东

关于Magento的时间/时区问题<br />今天同事研究为啥保存的时间不是东八区时间,由此引来的话题。<br />Magento整个系统中使用UTC时间,即通用协调时(UTC, Universal Time Coordinated)。这样保证在不同的视图或者Store里使用的时间与本地时间一致,在系统配置中可以看到,每个视图或者店铺可以单独设置时区。<br />Magento在数据库中存贮的都是UTC时间,在渲染视图的时候会显示当前时间。<br />如果想在视图中获取当前时间,可以使用如下函数:Mage:

Terry - 专注外贸B2C 6545

思科路由器重分发(静态路由+OSPF动态路由+RIP动态路由)

思科路由器重分发(静态路由+OSPF动态路由+RIP动态路由)

2301_81256766的博客 1261

曾经由盛转衰的骈文,却引领后人在文质兼美的创作之路上坚定前行

古人语:两马并驾为骈,所以骈文最大的特点是用对偶的手法,讲究对仗,以偶句为主,构成字数相等的上下联。句法、结构上也相互对称,词性、词意相互配对。从字数来看,在文中交替出现四字句、六字句,。为了增强句子的文采和感染力,骈文还讲究平仄、用典、辞藻,在增强气势的同时,又兼顾委婉、含蓄、典雅、精炼。在骈文盛行的时代,骈文水平的高低,能直接反映作家文学水平的高低。骈文极其讲究形式美,故而文辞精美,节奏明快,跌宕起伏,气势充沛,一篇好的骈文,读来令人惬意舒畅,尽兴不已。骈文或雄伟奔放如泰山大河,或小巧含蓄如苏州园林。

BabyFish13 2402

CATIA高效设计:自定义快捷键全攻略

本文详细介绍了如何在CATIA中自定义快捷键以提升设计效率。通过减少鼠标依赖、优化工作流程和减轻手腕疲劳,合理设置快捷键可显著提高建模速度。文章提供了从基础设置到高级配置的全流程指南,包括解决冲突、推荐方案及外设扩展建议,帮助用户快速掌握CATIA高效设计技巧。

weixin_42648844的博客 585

Zynq AXI DMA实战:5分钟搞懂S_AXIS_S2MM和M_AXIS_MM2S数据流(附Vivado配置截图)

本文通过Vivado实战配置,清晰解析了Zynq平台AXI DMA IP核中S_AXIS_S2MM和M_AXIS_MM2S数据流的核心概念与连接方法。文章重点阐述了数据流向、主从关系及接口命名规则,并提供了从ADC数据采集到DDR存储,再从DDR读取数据发送至DAC的完整双向数据流搭建指南,帮助工程师快速避坑。

weixin_29200741的博客 451

京东也要出自媒体,申请入口已经出来了

前几天就听说京东要出自媒体原创内容发布平台,也就是京东自媒体,当是还没看到申请入口,没想到今天就就看到入口了,注册链接是http://yc.m.jd.com/login本人把注册过程都公布出来了,注册完感觉就跟淘宝的淘宝达人一样,发卖货贴赚佣金 作者:自寅舍得分享,网络营销爱好者,互联网自媒体人,网络营销实战者...

自寅舍得分享的博客 1万+

第七天 Labview进阶(7.2 与汇川PLC通信)

运行环境: Labview 2020 Autoshop v4.10.1.1 该文档中包括Labview程序和汇川PLC程序,可以完美实现Labview与汇川PLC的通信。具体的使用教程可以参考本人的相关文章,讲解详尽,请尽情享用!

weixin_38637405的博客 3527

深入理解MAGENTO – 第九章 – 数据集合瓦瑞恩

本来,作为一个PHP程序员,如果你想攒一组变量的相关你有一个选择,古老的阵列。 尽管共享一个地址的名称与C存储器的阵列,一个PHP数组是一种通用的字典可变数组索引像数值对象结合行为的影响。 在其他语言的选择不是那么简单。 您有多个数据结构语义学的选择,每组速度和提供特定的优势,存储。 PHP的理念是消除客户程序员这个选择,让他们从一个有用的数据结构,这是”足够好”。 所有这一...

238

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

深入理解Magento - 第八章 – 修改、扩展、重写Magento代码

在原文中,这个是第九章,但是找不到第八章,又鉴于每章相对独立,就直接当做第八章好了 转自: http://justcoding.iteye.com/blog/1590435 重写Magento模块(Module)   第一步,你需要创建属于你自己代码的命名空间,例如Wemvc,App等,为了方便与大家分享代码,我将空间命名为App 。 C代码  

brazor的博客 493

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Magento如何重写block?

功能介绍:Magento中如何重写block?记录下如何对magento的block进行重写:首先看下当前模块中的block返回的是什么, //路径:Message/Count/Block/Count.php <?php class Message_Count_Block_Count extends Mage_Core_Block_...

weixin_33725272的博客 270

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Magento学习资源

Magento学习资源 最近开始学习magento,整理一些学习资源和教程。 http://blog.foolbird.net/1763.html magento用户手册中文版 magento模板制作教程中文版 深入理解magento 深入理解magento是官方提供的由Alan Storm撰写的开发人员教程,下面是Hailong Zhang翻译的深入理解maganto系列教程,A

Ai大模型,odoo,idempiere,metasfresh,低代码,ecshop数据采集发布接口,zencart,lightinthebox,shopex 数据采集接口 888

Magento-中文开发教程

http://www.wemvc.com/magento 前言 因工作需要2010年春正式走上了Magento的开发之路,早在2007年开发国内某服饰类B2C的时候就有看过Magento,当时感觉就不错。可惜业务模式上的差异比较大,所以没有直接采用,但很多地方有借鉴Magento。它真的很奇妙、很好用,是我至今见过的最好开源eCommerce软件。 本套教程基于Magen

whjing的专栏 603

国内大厂都在使用哪些移动跨平台框架

自从移动应用开发兴起以来,不少公司和开发者就在不断的探索移动跨平台开发技术,以适应移动应用高速迭代的需求 。纵观当前的移动跨平台方案,总结一下无外乎三大类:一种是使用原生内置的浏览器加载HTML5的Hybrid技术,采用此方案的主要有Cordova、Ionic和微信小程序;另一种是使用JavaScript开发,然后使用原生组件进行渲染,采用此方案的主要有React Native、Weex和快应用;最后一种是使用自带的渲染引擎和自带的原生组件实现跨平台,采用这种方案的主要是Flutter。 抛开传统的Hybr

xiangzhihong8的专栏 2万+

关于Magento的时间/时区问题

Magento整个系统中使用UTC时间,即通用协调时(UTC, Universal Time Coordinated)。这样保证在不同的视图或者Store里使用的时间与本地时间一致,在系统配置中可以看到,每个视图或者店铺可以单独设置时区。 Magento在数据库中存贮的都是UTC时间,在渲染视图的时候会显示当前时间。 如果想在视图中获取当前时间,可以使用如下函数: Mage::get...

水水的Magento专栏 250
上一篇: 解决ubuntu的ssh慢的方法
下一篇: yum安装phpmyadmin
yiuked
博客等级 码龄16年 16粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值