文档章节

Magento(CE1.X)自带模块解析六

ganfanghua
 ganfanghua
发布于 2017/05/13 13:48
字数 3058
阅读 59
收藏 0

51、Reports

Reports模块字面意思可以理解为是Magento自带的报表功能,包括的报表有订单、购物车、商品、用户、标签、评论和搜索等等。在电商网站运营中,我们一般会离线去做数据分析和报表的事情,整个流程脱离网站的主系统。从Reports模块的实际使用情况来看,不需要很大的数据量,后台通过原生报表查看数据速度上就已经很慢了,而且重点是这类扫表的动作会给数据库瞬时带来不小的压力。

那么Reports模块不用的话可以关闭吗,答案是不能,至少在原生默认模板的情况下。因为除了后台看到的报表,前台的RECENTLY VIEWED PRODUCTS和COMPARE PRODUCTS也是由Reports模块来控制的。商品比较可能有的品类用不到(一般数码产品和电器会适合拿来比较参数),但最近浏览的商品是电商非常普遍而又基础的功能,除非自己写一个“最近浏览商品”的逻辑来代替Reports模块的实现,否则的话,还是得保持Reports模块为开启状态。

52、Review

评论模块,Magento自带的评论功能标准而又简单(或者说简陋),后台唯一跟评论相关的配置项只有一个“Allow Guests to Write Reviews”,前台用户不管是否购买过商品,都可以对商品进行评论。这个自然与我们熟悉的淘宝或者京东等国内电商的标准套路不相符,至少得限制到购买过某商品的用户才允许对该商品进行评论。

解决方案有两种,自己在原始评论功能基础上二次开发,或者寻找合适的第三方模块。老外应该也是注意到了自带评论功能的简陋,所以Magento官方插件市场上有不少号称能加强评论功能的插件。虽然我没有一一验证过这些插件是否合适,不过总的来说,老外写的要适合中国人的习惯还是可能性不高的,所以我还是推荐自己来做二次开发,参考对象嘛,就是淘宝和京东这种国人最熟悉的了。

评论功能算是电商所必须的基本功能之一,还是不能关闭的。

53、Rss

Rss是几年前非常火的概念,各种新闻网站,博客等等都会加上RSS订阅功能,各种Rss工具也是层出不穷,比如大名鼎鼎的Google Reader,我曾经也用RSS工具去订阅一些老外的博客。Magento的Rss模块也是一样的道理,这个模块提供了一些数据的订阅入口,提供了包括新商品、新订单、低库存商品等等,可以作为一种通知来使用。不过呢,Rss现在已经不太流行了,这个概念现在很少有人提起,曾经火爆的几个Rss工具也差不多都已经倒闭了,针对Magento的情况来说,现在应该也没几个人真的有在使用这个Rss,真的要拿来做通知用的话,邮件通知或者短信通知也会符合我们的习惯,所以,这个模块也建议随着Rss这个概念的过时而让他默默的关闭吧。

54、Rule

之前讲CatalogRule模块是有提到,Magento有一套规则引擎,而CatalogRule模块是基于规则引擎来做商品级的促销。那么Rule模块所做的就是实现这个规则引擎,另一个同样基于规则引擎来实现订单级促销的是后面会讲到的SalesRule模块。

规则引擎算是Magento相比于其他B2C系统的特色之一,在促销的条件设置上,基于规则引擎的多重嵌套if和“与或非“条件判断,理论上可以组合出无数种用于促销的条件。相比之下其他电商系统(比如ECShop)一般都是提供了常见的几种促销方式,只能在这几种规则之中选择(或者二次开发新规则)。当然凡事有利也有弊,用Magento的规则引擎设置复杂的规则时,需要有一定的逻辑能力,否则很容易被“与或非“给搞晕。

促销是一个电商网站的基础必备功能之一,而Rule模块是Magento两大促销模块CatalogRule和SalesRule的基础,妥妥的核心模块。

55、Sales

电商几大基本组成元素之一的“订单”模块,基本上和订单相关的操作都由这个Sales模块来控制。Sales模块关联的数据表非常多(详见config.xml),粗略的分一下,可以分成5部分,sales_flat_order开头的系列订单数据表,sales_flat_invoice开头的系列发票(这个直接翻译有点歧义,invoice在这里更准确的理解应该是付款记录)数据表,sales_flat_shipment开头的系列运单数据表,sales_flat_creditmemo开头的系列退款数据表以及sales_flat_quote开头的quote系列表(quote表保存的是从购物车到结算过程中的数据,比如购物车里的商品就存于sales_flat_quote_item表)。

与一般观念上提交订单的逻辑不同的是,Magento的订单保存并不是直接结算页面一个大的表单提交数据到服务器端然后保存到订单表,而是先生成一份完整的quote数据(包含购物车、地址、支付方式和配送方式)在quote系列表里,再通过一种转换机制,把quote数据转换(Convert)成order数据,submitOrder方法的注释里的描述是这样写的“Quote submit process will create the order based on quote data”。Magento设计这种模式肯定有自己的考虑,不过如此复杂的数据库操作也导致了Magento网站的订单提交会成为一个性能的弱点所在,当网站有一定的并发量的情况下。

订单模块是电商的基础核心模块,不能关闭。

56、SalesRule

前面讲Rule模块时有提到,Magento有两种基于规则引擎的促销模块,一种是针对商品级的CatalogRule,另一种就是针对订单级(购物车)的SalesRule模块。与CatalogRule的区别在于,SalesRule规则生效之后的效果针对整个订单,而不是针对具体商品,比如下图中的“满100减10”就需要在SalesRule里配置,而不是CatalogRule。

当然作为规则判断的条件也与CatalogRule有区别,比如条件里包含购物车总金额,购物车总数量等等整个购物车的数据。

值得一提的是,Magento的优惠券(Coupon)机制也是由SalesRule模块来控制的,从逻辑上说,优惠券功能不是独立存在的,而是基于普通的购物车规则,可以理解为优惠券是一种带条件的购物车规则,而条件就是输入的优惠券码是准确并且符合当前条件的。早期的Magento版本,优惠券功能比较简单,一条规则只能对应一个优惠券码,后来新版本加上了批量自动生成优惠券码功能,一条规则终于可以对应多个优惠券码了,不过与电商的实际需求还有一点不满足的是,优惠券码要可以绑定具体单个用户,也就是所谓的“我的优惠券”,这个就需要我们自己在源码基础上二次开发来实现了(或者应该有现成的第三方插件可以满足需求?也许吧)。

促销是电商必须玩的手段,一个没有促销的电商网站该有多么的无趣。

57、Sendfriend

Sendfriend模块的功能以现在的角度来看比较奇葩,不过考虑到Magento诞生的年代,也就可以理解了。这个模块提供了一种很原始的分享商品的方式,就是在前台商品页把商品信息以发邮件的方式分享给你的朋友。在这个社交网络无比发达的时代,不管是国内还是国外应该已经没有人会用这种方式去做一个分享了。

所以,过时的东西就让它安静的过时吧。

58、Shipping

配送模块,类似于支付模块的机制,所有Magento的配送方式的模型(Model)类都需要继承(或者间接继承)Mage_Shipping_Model_Carrier_Abstract,比如Usa模块实现的Dhl、Fedex、Ups和Usps。Shipping模块本身的代码实现了三种配送方式,分别是Flat Rate、Table Rate和Free Shipping,其中Flat Rate和Free Shipping比较好理解,而Table Rate的作用结合实际情况的例子来说,就是可以设置不同的省份和不同的重量需要不同的运费,比如江浙沪6块,新疆10块。

 

理论上参考Usa模块的写法,我们可以自己二次开发出国内的快递公司,比如申通、顺丰。不过结合国内大部分B2C网站的通用做法来看,现在几乎没有哪个网站会让用户自己去选想要用哪家快递公司,网站方都是只显示需要多少运费,然后后续流程自己选择用哪家快递给用户发货(当然一般会在帮助中心这类地方介绍网站会采用哪些快递公司)。

话说有一个蛮多人会犯的理解错误,就是“货到付款”是一种支付方式,而不是一种配送方式。尴尬

在Magento的结构里,Shipping数据是订单数据不可缺的一部分,所以这也是核心模块了。

59、Sitemap

这个比较好理解,Magento会用计划任务每天(默认设置下)把分类页、商品页和CMS页面生成可供爬虫读取的Sitemap文件,帮助网站提高在搜索引擎的收录情况。值得一提的是,虽然这个模块在后台菜单里被称为Google Sitemap,但其实生成的Sitemap文件一样符合百度的抓取标准,并不是仅仅对Google的seo有帮助。

Sitemap虽然算不上核心模块,但其实用性应该每个Magento用户都用得上。

60、Tag

标签模块,Magento的标签逻辑跟大部分电商网站的玩法类似,前台用户可以给商品添加自己认为的标签名,后台管理者也可以基于运营目的人工给一些商品添加标签。与评论类似的是,前台用户添加的标签,需要经过后台审核通过之后才会生效。标签添加之后,可以用来在前台展示标签云(现在好像不怎么流行了),可以在商品页展示用户对该商品的印象,点击某个标签后可以去到一个类似分类页的商品列表页,展示的商品是所有包含该标签的商品。从这点来说,可以利用标签作为一种特殊的商品分类方式,跟常规分类形成不同的两种维度。

Tag模块功能上看是比较独立的,理论上不用的话可以把模块关了,不过在默认模板情况下,前台很多地方调用了Tag模块的代码,直接关闭Tag会让前台几个地方报错,一定要关闭的话就需要手动清理前台模板文件里跟Tag相关的部分了。

 

 

以上是本系列的第六篇内容,简单总结下上面10个模块,

其中Reports,Review,Rule,Sales,SalesRule,Shipping,Sitemap,Tag八个模块是必须开启的(网站正常运行的基础),

Rss,Sendfriend我的建议是关闭(针对做国内中文站),

本文转载自:http://blog.csdn.net/shuishui8310/article/details/52386753

ganfanghua
粉丝 6
博文 115
码字总数 97585
作品 0
深圳
程序员
私信 提问
深入理解Magento - 第一章 - Magento强大的配置系统

深入理解Magento 作者:Alan Storm 翻译:zhlmmc 前言 我从2007年开始使用Magento,应该算是国内第一批使用Magento的用户。但是我却从来没有认真研究过Magento,更多的停留在应用层面。虽然也...

虫虫
2010/04/13
9.4K
19
magento性能优化策略大全

magento的网站实在是太慢了,想了好多办法,参考了好多资料,做了很多测试,总结一下大概的步骤如下 (继续) : 1、压缩js,css代码,如果有必要把所有的css,js分别综合到一个文件中,并压缩...

rio
2010/05/07
5.8K
3
Magento2, 我们在等你

文章前面我要说明,Magento2.0和1.X是完全不同的两个版本.简单来说,magento2.0完全是重构的.完全的不同,彻底的不同.记住哦,这是magento贰 git获得magento2源码:https://github.com/magento/m...

蟋蟀哥哥
2011/12/16
11.5K
18
Magento微信支付接口开发小记

遇到了很多意想不到的问题,首先是微信支付分为四种:刷卡支付(线下)、扫码支付(PC网站)、公众号支付(微信中打开商户的H5页面)、APP支付(移动端支付),客户需要的微信扫码支付,而之前...

Alipaymate
2015/09/17
1K
0
麦进斗 + php7 运行

1,官网下载 2,(Magento-CE-2.1.2-2016-10-11-11-19-27.tar.gz)环境部署,php 7.0.7+centos 7 + nginx + mysql 5.6 + composer php-xsl yum install libicu-devel -y yum install libxslt-d......

晨武
2016/12/05
37
0

没有更多内容

加载失败,请刷新页面

加载更多

linux下ctrl+c中止不了

有一台centos7的服务器,ctrl+c无效,并且tail -f也无效,只能关掉终端或者crtl+z放入后台再删掉,但是ping的时候使用ctrl+c是有效果的。 出现这种情况的原因可能是因为有人要使用ruby安装r...

gaolongquan
6分钟前
0
0
Android三年工作面经

工作三年出来看看新的机会,依次面试过如下公司: 小米(北京) iHandy(北京) 涂鸦智能(杭州) 微软(北京) 宜信(北京) 蚂蚁金服(杭州) 瓜子二手车(北京) 高德(北京) 基本上投递的简历都得到了面...

JerryLin123
9分钟前
0
0
开发函数计算的正确姿势——tensorflow serving

前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计...

阿里云云栖社区
13分钟前
4
0
社区角色(Kubernetes社区Maintainer是什么角色?)

社区成员按照角色,分为member、reviewer、approver、subproject owner。 下面我们介绍一下每个角色的职责和要求。 member reviewer approver subproject owner...

恋恋美食
30分钟前
0
0
【JavaScript】callee 与 caller

callee callee是函数参数arguments对象的一个属性,它指向参数arguments对象所在的函数自身。 function foo (x) {console.log(arguments.callee);return x;}foo(); 从控制台中可以看...

小草先森
33分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部