设为首页收藏本站关注微信<<< 抵制 IE6 人人有责 >>>
搜索
热搜: 活动 交友 discuz
查看: 2087|回复: 0

[Html] 对iWebShop测试的一些技巧和心得分享

[复制链接]
发表于 2015-4-29 23:11:04 | 显示全部楼层 |阅读模式
经过数日来对iwebshop无休止的折腾,从2.6x一直折腾到了3.0x版本,发现了许许多的问题,其中很多也找到了解决方法,有的问题有待官方在以后的版本升级中处理,另外一些问题,经过自己小小的修改就能搞定。现在把我发现的问题和解决的方法和小伙伴们分享,同时记录下来也可以防止自己今后忘记的时候来查证。有些问题我没有发现,有的代码可以更加精简,有的方法也许不是最佳的方法,但是确实使问题得到了解决,希望大家都来共同讨论。


以下大部分问题在最新的3.0版本中都存在,有的不能算问题,但涉及到用户的使用习惯、页面友好度等,所以一并列出。


我的测试环境是:万网linux主机,伪静态模式。iwebshop版本:3.0.15011000


  • 1.iwebshop在万网主机的伪静态问题
问  题:万网的伪静态无法实现。
解决方法:针对万网主机修改伪静态规则代码。
解决步骤:修改
/lib/core/util/urlmanager_class.php

文件。
在大约909行左右找到:
  1. class IServerVars_Apache implements IIServerVars
复制代码

,将其下面的代码
  1. public function realUri()
  2. {
  3. return $_SERVER['PHP_SELF'];
  4. }
复制代码


替换为:
  1. public function realUri()
  2.    {
  3.                if(strpos($_SERVER['PHP_SELF'],$_SERVER['SCRIPT_NAME']) === false)
  4.                {
  5.                        return $_SERVER['SCRIPT_NAME'].$_SERVER['PHP_SELF'];
  6.                }


  7.                $php_self = $_SERVER['QUERY_STRING'] ? $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'] : $_SERVER['PHP_SELF'];


  8.                if(strpos($_SERVER['REQUEST_URI'],$_SERVER['SCRIPT_NAME']) === false && ($php_self != ($_SERVER['SCRIPT_NAME'].$_SERVER['REQUEST_URI'])))
  9.                {
  10.                        return str_replace('?'.$_SERVER['QUERY_STRING'],'',$_SERVER['SCRIPT_NAME'].$_SERVER['REQUEST_URI']);
  11.                }


  12.                return $_SERVER['PHP_SELF'];
  13.     }
复制代码


问题解决。



  • 2.万网的邮件问题。
问  题:万网主机禁用了sockets扩展,iwebshop的SMTP邮件无法发出。
解决方法:万网虽禁用了sockets扩展,但允许使用fsockopen函数,于是我们就得到了解决方法。
解决步骤:1.进入万网的主机控制台-主机高级设置,打开fsockopen()函数
2.修改
/lib/core/util/phpmailer/class.smtp.php

文件,大约在215行左右,找到以下代码:
      
  1. $this->smtp_conn = @stream_socket_client(
  2.            $host . ":" . $port,
  3.            $errno,
  4.            $errstr,
  5.            $timeout,
  6.            STREAM_CLIENT_CONNECT,
  7.            $socket_context
  8.        );
复制代码


将其改为fsockopen函数的方式:
  1. $this->smtp_conn = @fsockopen("你的SMTP地址","端口",$errno,$errstr,$timeout);
复制代码

问题解决。我为了修改简便,直接使用了固定的SMTP地址和端口,这个你可以根据需要,或使用固定的,也可以获取传递的变量,具体代码不再叙述。


  • 3.搜索栏的空提交问题
问  题:不输入任何数据时,直接按搜索,会出现错误提示,这一特征使页面显得不够友好,即使最新的3.0版本依然也有这个问题。
解决方法:使页面友好点,在用户未输入直接按搜索的时候,搜索指定的关键字或提示输入内容。
具体步骤:提示用户输入内容代码较为简单,但依然不够友好,所以我采用了直接展示指定的内容。
          修改
/views/default/layouts/site.html

文件,在文件结尾最下方js代码处找到以下代码:
     
  1. echo "<script language='javascript'>window.location.href='/ucenter/order_detail/id/'+{$id};</script>";
复制代码

跳转回当前的订单,问题解决。


  • 4.伪静态状态下付款成功、密码发送成功等(除了默认的“操作成功”正常)页面乱码问题。
问  题:在伪静态环境下(URL方式正常),付款成功、密码发送成功、充值成功等所有成功的提示页面都会出现乱码(除了默认的“操作成功”)
解决方法:仔细看了看代码,发现所有在给地址栏传递中文的时候都用到了UrlEncode编码,就是为了避免出现乱码,但是success文件在提取中文的时候,并未用UrlDecode解码,所以会出现乱码,至于为什么只有伪静态时出现,我并未去研究,只是解决问题即可。
具体步骤:修改
/views/default/site/success.html

文件,将页首添加
  1. {set:$msg = IReq::get('message') ? IReq::get('message') : '操作成功!'}
复制代码

,然后将输出的代码
  1. <strong class="f14">.....</strong>
复制代码

中间内容替换为:
  1. {echo:UrlDecode($msg)}
复制代码

问题解决。


  • 5.错误日志极大占用主机空间的问题,空间塞满后会导致不显示验证码、后台菜单消失等奇怪问题。
问  题:iwebshop会自动记录错误日志,在网站调试的时候无疑作用很大,但在小伙伴们捉襟见肘的虚拟主机空间上来说,太浪费了。在我测试的短短几天时间,/backup/errorLog/目录下的错误日志达到了好几个G,曾有好几次因为错误日志塞满了虚机空间,导致登录后台不显示验证码、登录之后菜单消失等奇怪问题。
解决方法:这个解决方法比较简单,直接将主机/backup/errorLog目录的写入权限取消就行了,但我有一点点的强迫症,总觉得虽然空间没损失,但系统或许有一些计算资源的浪费,所以,我的方法是直接注释掉了写日志的代码。
具体步骤:打开
/lib/core/util/exception_class.php

文件,在第249行左右找到如下代码,直接注释掉即可(或许还有更好的方法,我顺藤摸瓜找到这个文件,修改了一下凑效了,就没再深究。)
  1. $fp = fopen(self::$logPath,"ab");
  2. if($fp !== false)
  3. {
  4. fwrite($fp,$str);
  5. }
复制代码




  • 6.伪静态后台登录不显示验证码、后台菜单消失等问题。
问  题:伪静态后,登录后台没有验证码,刷新无数次也无效,登录之后后台菜单消失的问题。
解决方法:在确定主机支持伪静态和排除了错误日志占用完整个主机空间的原因后,删除/runtime下面的所有文件,是最有效的办法。
具体步骤:用FTP软件打开站点的/runtime/目录,删除所有文件,若问题依旧,尝试修改
/config/config.php

文件中的'safe' => ......代码,将其改为
  1. 'safe' => 'session'
复制代码

,问题解决。


7.帮助中心默认关闭状态
问  题:帮助中心默认展开,虽然极为方便,但对于小分辨率显示器的用户来说,遮挡了主页内容,而且对于我这样有强迫症的人,不喜欢一个大框在那飘来飘去的。
解决方法:修改帮助中心的默认状态,将其改为折叠状态,这个文件中含有注释,很方便找到其中一些参数的设置,如修改初始状态,修改颜色风格、修改大小等。
具体步骤:打开
/plugins/sonline/js/jquery.Sonline.js

文件,在第31行左右找到,DefaultsOpen:true,将其改为
  1. DefaultsOpen:false
复制代码

,问题解决。



8.用户付款成功等关键信息发送提示问题。
问  题:当网站运营后,不可能整天都呆在电脑前刷新后台吧?所以,在用户付款成功、下订单成功或是要求退款什么的,都需要有一些提示信息。
解决方法:在用户付款成功等一些关键信息更新的时候,自动发送邮件到指定的信箱,比如我是用手机绑定了QQ信箱,在有用户付款成功后,手机上会就即时显示一封新邮件,妈妈再不也不用担心我成天刷新后台了。(当然官方有手机短信提醒,对我们这些还没有购买授权还在试用阶段的小伙伴来说,发个邮件提醒还是最经济有效的方法)
具体步骤:我是在用户付款成功后发送一封邮件到我的手机,所以我的方法是在付款成功后,加入一段发送邮件的代码来实现。
打开
/controllers/block.php

文件,在大约242行左右,在付款成功返回信息之前,在$this->redirect($url); exit;这段代码的前面加上发送邮件的简单代码,例如:
  1. //发送邮件到管理员信箱,提示支付成功
  2. $orderDB  = new IModel('order');
  3. $orderRow = $orderDB->getObj('id = '.$order_id);
  4. $payment_id = $orderRow['order_no'];              //获取订单编号
  5. $payment_price = $orderRow['order_amount'];       //获取付款金额

  6. $smtp = new SendMail();                           //发送邮件
  7. $content = "提示:订单已付款,等待发货中...

  8. 订单编号:<font color=#FF6600>{$payment_id}</font>
  9. 订单金额:<font color=#FF6600>{$payment_price}</font> 元

  10. ---------iwebshop商城";
  11. $re = $smtp->send("我的邮箱地址","订单已付款",$content );
  12. //发送完成
复制代码


当然,你也可以在任何需要的位置加入这些代码来达到发送邮件提醒的目的,比如订单生成、充值成功、要求退款、商家结算等,你还可以获取更多的变量信息来完善邮件的内容,使提醒更加详细。


9.后台管理作废订单误操作,完成订单后不返回列表问题。
问  题:在后台订单管理中,作废订单没有确认提示,很容易误操作,而且不可恢复;一般完成订单是最后一个操作,完成订单后依然停留在当前页面,不能自动返回订单列表。
解决方法:1.作废订单加入确认提示消息,避免误操作。
              2.完成订单后自动跳转到订单列表
具体步骤:1.作废订单:打开
/views/sysdefault/order/order_show.html

文件,在约487行上下找到JS代码:
  1. function complete(id,statusVal)
复制代码

,在该函数中添加弹出确认对话框,代码如下:
  1. if(statusVal == '4')
  2. {
  3. var st=confirm('订单作废后不可恢复!是否作废当前订单?');
  4. if(st==false)
  5.               {
  6.                   return false;
  7.               }

  8. }
复制代码


2.订单完成后自动跳转,在上面代码的下面几行,找到:
  1. if(data=='success')
  2. {
  3. actionCallback();
复制代码



直接在后面加上跳转到订单列表的代码就行了。我加的代码是:
  1. document.location = '{url:?controller=order&action=order_list}';
复制代码

你可以根据需要修改成伪静态地址。


10.用户中心查看订单时,收货地址显示不完整的问题。
问  题:在用户中心查看订单详情时,没有完整显示省/市/区,只显示了具体的地址一栏。最新的3.0版本问题依然存在.
解决方法:官方的代码中其实有显示省/市/区的代码,但是我测试了下变量值为空,并未获得具体的地址显示,具体原因我没有仔细查看,这个问题留给官方,我采用了临时的方法提取了省/市/区的信息,显示出来。具体步骤:打开
/views/default/ucenter/order_detail.html

文件,在大约83行上下找到:
  1. {$this->order_info['province_str']} {$this->order_info['city_str']} {$this->order_info['area_str']} {$this->order_info['address']}
复制代码

将其替换为以下代码:
                  
  1. {set:$a_id=$this->order_info['province']}
  2.                    {query:name=areas where=area_id eq $a_id item=$item1}{/query}
  3.                    {set:$a_id=$this->order_info['city']}
  4.                    {query:name=areas where=area_id eq $a_id item=$item2}{/query}
  5.                    {set:$a_id=$this->order_info['area']}   
  6.                    {query:name=areas where=area_id eq $a_id item=$item3}{/query}
  7.                    {$item1['area_name']} {$item2['area_name']} {$item3['area_name']}{$this->order_info['address']}
复制代码

经测试,问题解决,但明显不是最佳方法,增加了数据库的读取次数,希望官方在以后的版本更新中解决。

11.用户下单后,在用户中心修改订单完成后出错。
问  题:用户在下单后,回到用户中心修改地址、电话等信息后,会出现错误的页面。最新3.0版本问题依然存在。
解决方法:我仔细测试了下,在修改完之后点击提交就会出现错误的提示页面,但是数据是已经修改成功的了,就证明只是返回页出错,只需要修改返回页面的代码就OK。
具体步骤:打开
/controllers/ucenter.php

文件,在第184行上下,找到代码:
  1. IReq::set('id',$id);
复制代码

将下面的两行代码:
  1. $this->order_detail();.......
复制代码

注释掉,增加一行代码:
  1. echo "<script language='javascript'>window.location.href='/ucenter/order_detail/id/'+{$id};</script>";
复制代码

跳转回当前的订单,问题解决。


12.新版物流跟踪问题
问  题:在后台修改了物流公司信息后,物流跟踪失效,不管什么都是一直显示:接口不包含该公司编码
解决方法:仔细查看了数据库,发现在进入后台-----物流公司修改其内容,一旦修改,数据库中快递代码就会被改变,比如顺丰快递原代码是“SF”,只要在物流公司页面点击了保存(哪怕是仅仅改了下排序),该快递的代码就会变成"CNSF",于是,出现了以上错误。具体代码出错原因未深究。只要在修改物流公司的页面不点击“确定”,就不会出现此问题,目前就只能这样了,不影响使用,此BUG有待官方在以后版本更新中解决。
具体步骤:不要尝试修改物流公司页面内容,如果不小心已经改变了,重新导入一张原版的数据表(表名为:freight_company)即可解决问题。


13.分类页(搜索页)价格区间输入出错
问  题:在分类列表页或是搜索页,在右方的多少价格---多少价格输入框中,输入后点击确认,会直接出错跳转到主页。
解决方法:此处比较奇怪,无论怎么改,或者对传递的地址参数编码解码,地址栏中的&符号始终会变成&最终导致地址错误返回主页(可能是我技术有限或对些代码理解不够)。在浏览器使用兼容模式下,此问题不会出现,但你不能要求用户都使用兼容模式吧?但经过测试,在伪静态下,此问题不存在。所以解决此问题的方法就是使全站伪静态,或者等待官方在以后版本中改进。

14.商品分类的问题
问  题:在商品列表页筛选分类或者增加商品时选择分类,操作界面不直观,一旦分类数量多了完全看不清楚。在后台商品列表页、筛选商品的下拉菜单中尤为严重。
解决方法:我测试了用三级分类,分了几十个类别,在选择的时候就恨不得把鼠标砸了,根本看不清,很难选择一个分类。于是我尝试使用多个选择框级联的方式,在选择了一级分类的时候,第二个选择框只显示该分类下的二级分类,选择二级分类的时候,第三个框只显示其下的三级分类,这样一来就简单明了多了,界面也友好多了,但是需要修改的代码量也就大大增加了,所以这个问题留给官方,希望在以后的版本更新中优化。我采用了临时的方法解决问题,就是将分类改成不同的颜色,一级分类改成红色,二级改成绿色,三级改成灰色等等。
具体步骤:这只是临时的解决方法,在相关文件中根据分类改变一下颜色即可,代码较为简单,这里不再叙述。


15.商品分类多选导致的问题
问  题:在增加/修改商品时,商品分类采用了多选框,导致一个商品可能会有不同的类别,这样虽然对商品的展示量有所帮助,但在某些特定的列表页面中,商品就会重复的出现。
解决方法:这个根据需要选择,我定义了商品只能选择一个分类,只要查找该商品的上级分类字段parent_id就能获得上级分类,所以,我只需要商品单一分类即可。
具体步骤:将编辑商品/增加商品/入驻商家编辑商品的页面,将多选框代码:<input type="checkbox" 改为"raido"即可将分类定义为单选。

16.首页幻灯片加载速度问题
问  题:在主页内容较多、首面幻灯片较大或网络不给力的时候,主页的幻灯片加载就显得过于缓慢了,严重影响了站点的体验度。
解决方法:尽量压缩幻灯片图片文件的大小,官方原代码是在页面全部加载完成后再运行幻灯片的代码,所以一旦主页内容较多,幻灯片加载就显得过于缓慢了。要么更改别的更优化的幻灯片代码,要么尽快的使幻灯片提前运行。我选择了先运行幻灯片的方法,尽量的使幻灯片在主页下面的图片显示以前开始运行。
具体步骤:打开主页html文件:
/views/default/site/index.html

,将页面尾部幻灯片开始运行的代码提前到幻灯片的后面。即加载完马上开始运行,再加载后面的几十张商品图片。 将以下代码剪切到你想加到的位置即可。我加到了
  1. <div class="main f_l">......</div>
复制代码

幻灯片所在DIV的后面。
  1. <script type="text/javascript">
  2.     //幻灯片开启
  3. $('.bxslider').bxSlider({'mode':'fade','captions':false,'pager':false,'auto':true});
  4.    </script>
复制代码

17.广告位名称重复导致广告不显示
问  题:新版本虽然增加了用广告名称来显示广告的方式,但是也就失去了广告id的唯一性。如果广告位名称重复,那么广告将无法显示。
解决方法:可以使用以前版本,以唯一广告位id的方式来插入广告,或者在建立广告位时,不要使广告位名称重复,此问题即解决。

18.产品列表页或搜索页,对有多个选项的产品添加购物车浮动空不消失
问  题:在列表页、搜索页和其它一些有“加入购物车”按钮的页面,当某一个商品有多个规格值的时候,点击“加入购物车”就会出现一个浮动DIV,用于选择加入购物车的商品具体规格,但是当用户什么也不干的时候,去点击另一个有多个规格值的商品加入购物车,原先显示的浮动DIV就不会消失,你一直点下去,满屏幕就是浮动DIV了。
解决方法:此问题在最新的3.0版本中依然存在,有待官方在以后版本中解决。




19.广告切换生硬
问  题:广告的切换过于生硬,没有过渡的选项,同一广告位展示多张广告图片时,在切换的过程中会出现一段空白,网络不给力的情况下更为严重,
解决方法:此问题在最新的3.0版本中依然存在,有待官方在以后版本中完善。


20.商家找回密码
问  题:商家忘记密码,没有找回的选项
解决方法:自行增加找回密码功能,参照会员找回密码发送邮件验证即可,或者等待官方在以后的版本中完善。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?免费注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

QQ|手机版|Archiver|源于生活(个人生活娱乐工作的笔记)css3,html5,学习笔记    

GMT+8, 2024-4-19 10:04 , Processed in 0.140400 second(s), 29 queries .

Powered by Mr.Kevin-ying

© 2004-2015

快速回复 返回顶部 返回列表