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。先改一个便好。
首先,要有区县的数据,区县数据怕搜到的缺怎么办,只好去淘宝模板那里一组组里弄出来。
现在开始在模板中加区县的显示,用的
2.精确
选定之后,除了【运送到】区域的显示,还有和数据库关联(用户提交订单的时候,才会取到地区邮费),这时,暴力解:看到宝鸡的values是440,直接全局搜,出来好多文件,一番排查下来,锁定几个文件:
现在添加数据到上面两个文件,数据源在ID.txt,帖一部分:
3.解决
数据有了,写个脚本生成吧,无奈Python才刚学,C&C++又好久没用,还是用PHP写吧
针对文件①脚本,形如440=>27,
//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$str );$i++){
if($str[$i]=="'") {
$i++;
$str_arr[$j]=substr($str,$i,4);
$j++;
}
}
$str="";
for($i=0;$i$str_arr );$i+=4){ //跨度为4是因为 单引号隔4个取组后四位。这是得要多信任数据啊=-=
//echo $str_arr[$i].'
';
$str.=$str_arr[$i]."=>27,";
}
echo $str;
//print_r($str_arr);
fclose($file);
?>
效果如….
最后多出的一个逗号都不用取了,效果刚好。
针对文件②脚本,形如 440 => array ( ‘area_name’ => ‘宝鸡’, ‘area_parent_id’ => ‘27’, ),
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$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$str_arr);$i+=2,$j+=2){ //跨度2是因为前面ID($i),后面地区($j)
//echo $str_arr[$i].'--'.$str_arr[$j].'
';
$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', ),
";
}
//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,否则,用区县ID
city_id="
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了,直接输出区就好了。
...
/*
*/
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$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$str_arr );$i+=2,$j+=2,$k++){ //$k为
位,最后弃用
$str.='
$str_arr[$i].'" value="'.$str_arr[$i].'"/>
[$i].'">'.$str_arr[$j].'
';
//if($k%6==0) $str.= '
';
}
echo $str;
fclose($file);
?>
最后,稍作改动就好了。(其实,并不是,还有用JS检测全选,取消等),稍微写了下完成了。
最终效果:
注:
1. 谢绝转载
2. 程序不要用,都是根据需要特写的
3. 程序员节快到了,预祝各位monkey节日快乐。是不是该玩个hackthon,但没人会要我=-=