Дублирование заказов в 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;
...