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相关的部分了。