多版本可使用
Opencart 的前台中,除了登录购买查询还有一个游客非登录购买商品,那么非登录购买商品的话,该如何去查询已下单的内容?
此文以非登录查询,可以游客手机号及订单号查询,但经本人考虑,手机查询这个会涉及信息泄露,所以以订单号查询订单
在此之前,你需要做的是,客户下单后,你需要邮箱发送给客户,让客户获取他下单后的订单号是什么。这个可以百度设置就可以了。
接下来,开始正文
1,数据库保证有订单号的字段
2,下单的数据中 ,订单号必须被填写,opencart 中的订单号默认是id号(可自行新加字段并添加)
3,创建一个新的搜索入口(name与商品的查询不一),后台能获取的,最好是另起一个order命名的控制器,视图与模型的文件(本人没有新建模型,控制器与视图皆新建)。
以下开始贴代码
新建的order文件控制器
<?php
class ControllerOrderSearch extends Controller {
public function __construct($registry)
{
parent::__construct($registry);
$this->load->language('checkout/cart');
$this->load->language('checkout/coupon');
$this->load->language('checkout/checkout');
$this->load->model('account/activity');
$this->load->model('account/custom_field');
$this->load->model('tool/upload');
$this->load->model('account/address');
$this->load->model('account/customer');
$this->load->model('account/customer_group');
$this->load->model('localisation/country');
$this->load->model('localisation/zone');
$this->load->model('checkout/checkout');
$this->load->model('checkout/order');
}
public function index() {
$this->load->language('product/search');
$this->load->model('catalog/category');
$this->load->model('catalog/product');
$this->load->model('tool/image');
if (isset($this->request->get['search_order_number'])) {
$search = $this->request->get['search_order_number'];
} else {
$search = '';
}
if (isset($this->request->get['tag'])) {
$tag = $this->request->get['tag'];
} elseif (isset($this->request->get['search_order_number'])) {
$tag = $this->request->get['search_order_number'];
} else {
$tag = '';
}
//新添加方法
$order = $this->model_checkout_order->getOrderPhone($this->request->get['search_order_number']);
$search_order_number = array();
foreach($order as $key => $value){
$search_order_number[$value['order_id']] = $value['order_id'];
}
//转为in(这个为当初我以手机号搜索写的,可自行修改)
$data['order_id'] = $this->dbCreateIn($search_order_number);
// 获取商品
$data['products'] = array();
//在相应的文件添加方法
$products = $this->model_checkout_order->getOrderDing($data['order_id']);
$data['row_num'] = count($products,0);
foreach ($products as $product) {
$data['products'][] = array(
'order_product_id' => $product['order_product_id'],
'product_id' => $product['product_id'],
'name' => $product['name'],
'model' => $product['model'],
// 'option' => $option_data,
'quantity' => $product['quantity'],
'price' => $this->currency->format($product['price'] + ($this->config->get('config_tax') ? $product['tax'] : 0), $order['currency_code'], $order['currency_value']),
'total' => $this->currency->format($product['total'] + ($this->config->get('config_tax') ? ($product['tax'] * $product['quantity']) : 0), $order['currency_code'], $order['currency_value']),
'href' => $this->url->link('catalog/product/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product['product_id'])
);
}
foreach ($order as $k1 => $v1) {
foreach ($products as $k2 => $v2) {
if ($v1['order_id']==$v2['order_id']) {
$order[$k1]['child'][] = $v2;
}
}
}
// var_dump($data);die;
foreach ($order as $order_data) {
$data['order_search'][] = array(
'name' => $order_data['name'],
'quantity' => $order_data['quantity'],
'price' => $this->currency->format($order_data['price'] + ($this->config->get('config_tax') ? $order_data['tax'] : 0), $order_data['currency_code'], $order_data['currency_value']),
'total' => $this->currency->format($order_data['total'] + ($this->config->get('config_tax') ? ($order_data['tax'] * $order_data['quantity']) : 0), $order_data['currency_code'], $order_data['currency_value']),
'href' => $this->url->link('catalog/product/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $order_data['product_id']),
'payment_address' => address_format($order_data, $order_data['payment_address_format'], 'payment'),
// Shipping Address
'shipping_address' => address_format($order_data, $order_data['shipping_address_format'], 'shipping'),
'shipping_method' => $order_data['shipping_method'] ?: false,
'payment_method' => $order_data['payment_method'],
'href' => $this->url->link('catalog/product/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $order_data['product_id']),
'order_number' => $order_data['order_number'],
'time' => $order_data['date_added'],
'child' => $order_data['child']
);
}
$data['search'] = $search;
$data['column_left'] = $this->load->controller('common/column_left');
$data['column_right'] = $this->load->controller('common/column_right');
$data['content_top'] = $this->load->controller('common/content_top');
$data['content_bottom'] = $this->load->controller('common/content_bottom');
$data['footer'] = $this->load->controller('common/footer');
$data['header'] = $this->load->controller('common/header');
$this->response->setOutput($this->load->view('order/search', $data));
}
function dbCreateIn($itemList)
{
if(empty($itemList )){
return " IN ('') ";
}else{
return " IN ('" . join ("','", $itemList) . "') ";
}
}
}
model里新添加的方法
public function getOrderPhone($order_phone) {
$order_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "order` WHERE order_number = '" . $order_phone . "'");
if ($order_query->num_rows) {
return $order_query->rows;
} else {
return false;
}
}
//查找搜索订单
public function getOrderDing($order_id) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_product WHERE order_id " . $order_id );
return $query->rows;
}
至此就结束了
提交的name要获取到就行,至于view,这个就不贴出来的。