这是一个印度人在做模板时碰到的问题,通过mageto论坛 call我的skype.经过分析,找出了magento 的js文件中的又一BUG.
现在很多人开发magento模板要么是选择blank主题,要么就是用magento自带的default.目的都是希望能够去掉那些自己不想使用的功能或代码.总之,为了提升magento的速度,给模板文件瘦身是非常关键的一个步骤,然后问题也由此而来.magento的模板结构虽然对初学都来讲,其XML设置会稍微有点复杂,然而掌握规律之后,它的模板开发可以说是速度快而且质量好.各个BLOCK相对独立.然而这些都是相对的,尽管它已经做是非常好了.但是js脚本还是不可避免的有一些依赖是需要我们自己处理的.
看一下magento checkout 模块的xml layout设置文件:
<reference name="right"> <action method="unsetChildren"></action> <block type="checkout/onepage_progress" name="checkout.progress" before="-" template="checkout/onepage/progress.phtml"/> </reference>
这个是onepage checkout时右边一列显示当前下单付款进度的指示BLOCK.事实上如果想要去掉这个功能,则可以直接通过这个地方进行开关是最合理的,而有些模板开发的设计人员要么是粗心,要么是不懂,直接在模板中直接删除。事实上直接删除是会把这些功能从前台显示中删除,不过后台magento在处理时还是要分析xml,还是要加载初始化这个block的。
L K Lalitesh估计就是这么做的,导致在用户进入注册时,填写完资料,magento无法进入到下一步。那么这么做会有什么问题呢,看一下opcheckout.js就清楚了:
reloadProgressBlock: function(){ var updater = new Ajax.Updater($$('.col-right')[0], this.progressUrl, {method: 'get', onFailure: this.ajaxFailure.bind(this)}); },
显然这个代码还是会工作的。所以单纯的删除模板文件中的几行html是不行的,还要处理相应的js.有分析过magento onepage checkout的人应该会很清楚,这个页面是使用ajax控制步骤的,而用户每一次进入到下一个步骤都会调用
checkout/onepage/progress/ ajax action.
所以这个也是需要清理的。
解决的方法是:
通过magento的xml文件夹正确的关闭progress block,并通过重载onepage controller,不调用progress action,清除掉模板文件中所有相关html和php代码,最后一步去除掉opcheckout.js中所有的reloadProgressBlock调用。