В Opencart с 2.x сортировка товаров в корзине не соответствует порядку их добавления. Например мы добавили домофон, кабель к нему и монитор. Так вот в корзине может быть нарушен порядок, то есть сначала будет идти кабель, потом монитор а уже после них первый добавленный домофон. Согласитесь, это не совсем логично.
Виной всему будет выборка из базы данных в таблице cart. Дело в том что при запросе в базу нет условия сортировки и данные идут как им захочется. Что бы структурировать их необходимо в файле system/library/cart/cart.php строку
$cart_query = $this->db->query('SELECT * FROM ' . DB_PREFIX . 'cart WHERE api_id = '' . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . '' AND customer_id = '' . (int)$this->customer->getId() . '' AND session_id = '' . $this->db->escape($this->session->getId()) . ''');
Заменить на:
$cart_query = $this->db->query('SELECT * FROM ' . DB_PREFIX . 'cart WHERE api_id = '' . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . '' AND customer_id = '' . (int)$this->customer->getId() . '' AND session_id = '' . $this->db->escape($this->session->getId()) . '' ORDER BY date_added ASC');
Таким образом в конец запроса мы добавили условия сортировки - сортировать по дате добавления по возрастания. После чего в корзине будут идти товары в той последовательности в которой их добавили туда.