ECSHOP实现收货国家省市由选择下拉菜单改为手动

ECSHOP实现收货国家省市由选择下拉菜单改为手动

今天由 青岛网站建设 青岛SEO 一起和大家分享一下,本次ECSHOP开发过程中的ECSHOP实现收货国家省市由选择下拉菜单改为手动输入文本框的实现方法。

有些做外贸的朋友可能涉及的国家省、市众多,所以不想在后台逐个添加,又或者一些其他原因,想要实现国家和省市由选择的方式改为手动输入文本框的方式。那下面我就具体来介绍一下这个功能的实现。

首先,ECSHOP默认的数据库中存储省市国家的表内容为数值型的数据,无法写入字符串。那就要先修改数据库的字段才行。运行如下SQL语句,将ecs_order_info表中的对应字段修改为字符串型:

alter table  `ecs_order_info` modify province varchar(255) NOT NULL DEFAULT '';
alter table  `ecs_order_info` modify city varchar(255) NOT NULL DEFAULT '';
alter table  `ecs_order_info` modify district varchar(255) NOT NULL DEFAULT '';

然后,同样的修改ecs_user_address表中的对应字段。

alter table  `ecs_user_address` modify province varchar(255) NOT NULL DEFAULT '';
alter table  `ecs_user_address` modify city varchar(255) NOT NULL DEFAULT '';
alter table  `ecs_user_address` modify district varchar(255) NOT NULL DEFAULT '';

进行完以上两步操作之后,我们就可以将ecshop中的国家、省份和城市改为手动输入文本框了。下面要修改的就是提交数据和读取数据的时候,所得到的值。

默认的是通过去的省份的索引值然后到对应表中查询找到对应的省份并予以输出,那现在,我们就要直接读取这个值,并给予输出。首先在表单提交页:

flow.php中,我们将保存收货人信息代码中的

/*
         * 保存收货人信息
         */

这一段下面的

'district'      => empty($_POST['district'])   ? '' : intval($_POST['province'],

改为

'district'      => empty($_POST['district'])   ? '' : $_POST['province'],

这样就实现了把省份去的的值直接写入数据库的目的,同样的,我们修改国家(这里将district改为国家)和城市,这样就把用户输入的值直接写入了数据库。

然后我们需要修改用户中心的对应字段,同样的方法,也是把整数值转换的函数去掉即可。我们还需要修改的页面就是在订单确认页面。那里的用户信息确认,同样需要我们来修改其中的显示方式。那方法很简单,只需要将Consigee中的对应字段加入即可。比如我们把地址写成下面的样式:

{$consignee.address|escape}, {$consignee.city}, {$consignee.province}, {$consignee.district}

这样就可以从前面调用城市、省份、国家的信息了。

最后我们还有一个地方需要修改,那就是网站的后台中的订单信息页面,这个页面同样需要按照前台的显示方式来修改,那找到admin/order.php,从其中找到

/* 取得区域名 */

这段代码,将下面的

 $sql = "SELECT concat(IFNULL(c.region_name, ''), '  ', IFNULL(p.region_name, ''), " .
                "'  ', IFNULL(t.region_name, ''), '  ', IFNULL(d.region_name, '')) AS region " .
            "FROM " . $ecs->table('order_info') . " AS o " .
                "LEFT JOIN " . $ecs->table('region') . " AS c ON o.country = c.region_id " .
                "LEFT JOIN " . $ecs->table('region') . " AS p ON o.province = p.region_id " .
                "LEFT JOIN " . $ecs->table('region') . " AS t ON o.city = t.region_id " .
                "LEFT JOIN " . $ecs->table('region') . " AS d ON o.district = d.region_id " .
            "WHERE o.order_id = '$order[order_id]'";

改为:

$sql="SELECT concat(city, ' ', province, ' ', district) AS region " . "FROM ". $ecs->table('order_info') ."WHERE order_id = '$order[order_id]'";

这样,就实现了直接显示从order_info表中读取来的地址信息了。

好了,今天就讲到这里,可能说的优点复杂,其实很多朋友也用不到这个功能,也就我那个变态的客户非要这么改了。呵呵,顺便发个牢骚,嘻嘻。。。。