再摸shopnc——修改运费模板
来源:互联网 发布:网络理财88财富 编辑:程序博客网 时间:2024/04/30 06:38
1.问题
发布商品时,选择的运费模板只能到市,而不能精确到区县,又且,只做陕西。所以需求就又来了。
通过源码查到模板页面/templates/default/member/transport.add.php,不过没有什么用,line 95引入了另一模板页,require(template(‘member/transport_area_’.(strtolower(CHARSET)==’utf-8’?’utf-8’:’gbk’)));即在选择区域列表项有两个不同编码文件,分别是transport_area_utf-8.php和transport_area_gbk.php。先改一个便好。
首先,要有区县的数据,区县数据怕搜到的缺怎么办,只好去淘宝模板那里一组组里弄出来。
现在开始在模板中加区县的显示,用的<select>(淘宝页面本来也就是select,比较方便)但未果,因为多选比较难调,而且还得处理较多的JS,实在对JS没有过兴趣。那么,就继续用市的样式开始。也好操作,最后区分哪些是真的市,哪些是区县就好。
2.精确
选定之后,除了【运送到】区域的显示,还有和数据库关联(用户提交订单的时候,才会取到地区邮费),这时,暴力解:看到宝鸡的values是440,直接全局搜,出来好多文件,一番排查下来,锁定几个文件:
- transport.php line278 数组,形如 440=>27 ①
- area.php 更为庞大的数组 ,下面说 ②
- area_array.js 重要,这里应该是运送会用到的信息,很全,地域,市为key,下级为values,可以使用,早知就不用去淘宝页面复制了
现在添加数据到上面两个文件,数据源在ID.txt,帖一部分:
3.解决
数据有了,写个脚本生成吧,无奈Python才刚学,C&C++又好久没用,还是用PHP写吧
针对文件①脚本,形如440=>27,
<?php //440=>27, header("Content-type: text/html; charset=utf-8"); $file=fopen("ID.txt",'r') or die ("error!"); $str=fread($file,filesize("ID.txt")); if(strlen($str)%2 != 0) exit(); //$lab=False; $str_arr=array(); for($i=0,$j=0;$i<strlen($str);$i++){ if($str[$i]=="'") { $i++; $str_arr[$j]=substr($str,$i,4); $j++; } } $str=""; for($i=0;$i<count($str_arr);$i+=4){ //跨度为4是因为 单引号隔4个取组后四位。这是得要多信任数据啊=-= //echo $str_arr[$i].'<br/>'; $str.=$str_arr[$i]."=>27,"; } echo $str; //print_r($str_arr); fclose($file);?>
效果如….
最后多出的一个逗号都不用取了,效果刚好。
针对文件②脚本,形如 440 => array ( ‘area_name’ => ‘宝鸡’, ‘area_parent_id’ => ‘27’, ),
<?php //440 => array ( 'area_name' => '宝鸡', 'area_parent_id' => '27', ), header("Content-type: text/html; charset=utf-8"); $file=fopen("ID.txt",'r') or die ("error!"); $str=fread($file,filesize("ID.txt")); if(strlen($str)%2 != 0) exit(); $lab=False; $str_arr=array(); //稍作改动,只取单引号内内容,这其实是第一次想实现的=-= for($i=0,$j=0;$i<strlen($str);$i++){ if((!$lab) && $str[$i]=="'") { $i++; $str_arr[$j]=''; $lab=True; }else if($lab && $str[$i]=="'"){ $lab=False; $j++; } if ($lab){ $str_arr[$j].=$str[$i]; } } $str=""; for($i=0,$j=1;$i<count($str_arr);$i+=2,$j+=2){ //跨度2是因为前面ID($i),后面地区($j) //echo $str_arr[$i].'--'.$str_arr[$j].'<br/>'; $str.=$str_arr[$i]."=> array ( 'area_name' => '$str_arr[$j]', 'area_parent_id' => '27', ),"; echo $str_arr[$i]."=> array ( 'area_name' => '$str_arr[$j]', 'area_parent_id' => '27', ),<br/>"; } //echo $str; //print_r($str_arr); fclose($file);?>
另,发现JS中有区域选择相关代码操作,不去动它。理由,前面有。
然后检查了下数据库,运费模板有添加的区县值。
现在,开始改订单这块,查多次后,决定修改templates/default/home/cart_shipping.php
city_id="$val['city_id']"; //原数据//改动:$cityToArea=array(438,439,440,441,442,443,444,445,446,447);//数组存储陕西省份,然后判断,不是陕西的省就用原数据,即市的ID,否则,用区县IDcity_id="<?php if(!in_array($val['city_id'],$cityToArea)) echo $val['city_id']; else{ echo $val['area_id']; } ?>"
已经好了,添加的几个测试数据都行,但是(我哥哥告诉我,”但是”前面的都是废话 ——权力的游戏)还有一个小问题,就是把transport_area_gbk.php和transport_area_utf-8.php数据添加完整,继续用前面写的脚本生成所需数据:
形如 市区*3<br/>区*3<br/>...<hr/>市//不管区隔几个换行和hr了,直接输出区就好了。...<?php /* <span class="areas"> <input type="checkbox" class="J_City" id="J_City_4669" value="4669"/> <label for="J_City_4669">新城区</label> </span> */ header("Content-type: text/html; charset=utf-8"); $file=fopen("ID.txt",'r') or die ("error!"); $str=fread($file,filesize("ID.txt")); if(strlen($str)%2 != 0) exit(); $lab=False; $str_arr=array(); //稍作改动,只取单引号内内容,这其实是第一次想实现的=-= for($i=0,$j=0;$i<strlen($str);$i++){ if((!$lab) && $str[$i]=="'") { $i++; $str_arr[$j]=''; $lab=True; }else if($lab && $str[$i]=="'"){ $lab=False; $j++; } if ($lab) $str_arr[$j].=$str[$i]; } $str=""; for($i=0,$j=1,$k=1;$i<count($str_arr);$i+=2,$j+=2,$k++){ //$k为<br/>位,最后弃用 $str.='<span class="areas"> <input type="checkbox" class="J_City" id="J_City_'.$str_arr[$i].'" value="'.$str_arr[$i].'"/> <label for="J_City_'.$str_arr[$i].'">'.$str_arr[$j].'</label> </span>'; //if($k%6==0) $str.= '<br />'; } echo $str; fclose($file);?>
运行结果是:
但不是要取这些,取页面html源码即可。
最后,稍作改动就好了。(其实,并不是,还有用JS检测全选,取消等),稍微写了下完成了。
最终效果:
注:
1. 谢绝转载
2. 程序不要用,都是根据需要特写的
3. 程序员节快到了,预祝各位monkey节日快乐。是不是该玩个hackthon,但没人会要我=-=
- 再摸shopnc——修改运费模板
- 瞎子摸象——shopnc篇
- AngularJS尝鲜——快递运费计算
- jQuery写的简单的运费模板对数据的选择取消修改
- shopnc 业务逻辑与模板架构
- 旁观电子商务——运费之争背后的价格战
- 二次开发shopnc默认的修改密码流程
- shopnc——购买商品成功发送短信至买家和卖家
- mm 物料 主档 修改 运费群组 BAPI_MATERIAL_SAVEDATA
- 运费问题
- web2(wm)修改之——模板
- POI——动态修改Excel模板下拉框
- 线段树模板(区间修改)——hdu1698
- 模板修改
- 模板修改
- 模板——函数模板、类模板
- ShopNC创业之路
- shopnc josn实现方式
- hibernate的一级、二级和查询缓存问题
- java 集合详探
- 书信敬语
- meta 标签属性和自动跳转
- freemarker 数字输出中的逗号问题
- 再摸shopnc——修改运费模板
- java中的Hashmap与LinkedHashMap总结
- mysql cmake参数详解
- Uninstall/Remove 11.2.0.2 Grid Infrastructure & Database in Linux
- Android系统架构解析
- ION基本概念介绍
- 一种开发组件管理工具
- Highcharts 异常码
- android spinner的使用