Дублирование заказов в Simpla

К сожалению, данная CMS не имеет встроенной проверки на дублированние заказа. В одном большом интернет-магазине менеджеры часто жаловались на эту проблему.

Решения

JavaScript

Блокировать кнопку Submit формы, после первого клика.

*Результат:* дублей стало меньше, но не исчезли.

База данных

Создать метод, который будет проверять наличие заказа в БД по набору ФИО, email, адрес, телефон, время (с точностью до минуты).

Поправить файл /api/Orders.php, добавим метод:


private function check_unique_order($order)
{
    $where = $this->db->placehold('WHERE name = ?',                                        $order->name);
    $where .= $this->db->placehold('AND email = ?',                                        $order->email);
    $where .= $this->db->placehold('AND address = ?',                                    $order->address);
    $where .= $this->db->placehold('AND phone = ?',                                        $order->phone);
    $where .= $this->db->placehold('AND DATE_FORMAT(`date`, \'%Y-%m-%d %H:%i\') = ?',    date('Y-m-d H:i'));
    
    $query = $this->db->placehold("SELECT id FROM __orders  $where LIMIT 1");
    $this->db->query($query);
    
    return $this->db->result('id');
}

в этом же файле поправим метод:


public function add_order($order)
{
    $order = (object)$order;
    
    $id = $this->check_unique_order($order);
    
    if(!empty($id)) {
        return $id;
    }
...

Добавим строки в файле /view/CartView.php:


...
// Добавляем заказ в базу
$order_id = $this->orders->add_order($order);

// Побеждаем дубли
if(!empty($_SESSION['order_id']) && $_SESSION['order_id'] == $order_id) {
    header('Location: '.$this->config->root_url.'/order/');
}

$_SESSION['order_id'] = $order_id;
...

26 февраля   simpla
Популярное