Самый простой способ по акциям по крайней мере который показался мне при решении данной задачи адекватным и помог мне:
1. В таблице oc_product создать столбец и назвать его например - product_special, тип INT(10)
2. В файле admin/model/catalog/product находим две функции addProduct и editProduct
3. В каждой из них в теле функции находим проверку на существование акции в товаре и пишем такой запрос к таблице oc_product:
$this->db->query("UPDATE " . DB_PREFIX . "product SET product_special = '" . (float)$product_special['price'] . "' WHERE product_id = '" . (int)$product_id . "'");
Вот как выглядит само условие и уже запрос который надо туда вставить:
if (isset($data['product_special'])) {
foreach ($data['product_special'] as $product_special) {
$this->db->query("INSERT INTO " . DB_PREFIX . "product_special SET product_id = '" . (int)$product_id . "', customer_group_id = '" . (int)$product_special['customer_group_id'] . "', priority = '" . (int)$product_special['priority'] . "', price = '" . (float)$product_special['price'] . "', date_start = '" . $this->db->escape($product_special['date_start']) . "', date_end = '" . $this->db->escape($product_special['date_end']) . "'");
}
$this->db->query("UPDATE " . DB_PREFIX . "product SET product_special = '" . (float)$product_special['price'] . "' WHERE product_id = '" . (int)$product_id . "'");
}
Теперь при добавлении товара или редактировании в таблицу oc_product в столбец - product_special будет заноситься цена акционного товара.
4. В файле /catalog/controller/category/category.php добавляет новую сортировку в $this->language->get('пишем что угодно это текст самой сортировки'), ASC ставим если нам надо по возрастанию, DESC если по убыванию:
$data['sorts'][] = array(
'text' => $this->language->get('text_special_asc'),
'value' => 'p.product_special-asc',
'href' => $this->url->link($route, $path . '&sort=p.product_special&order=asc' . $url)
);
5. В файле /catalog/model/product.php
В функции getProducts находим строку:
$sort_data = array(
'pd.name',
'p.model',
'p.quantity',
'p.price',
и тд...
);
и туда добавляем новую строку p.product_special-asc и получится:
$sort_data = array(
'pd.name',
'p.model',
'p.quantity',
'p.price',
'rating',
'p.sort_order',
'p.date_added',
'p.product_special-asc'
);
вот и все в принципе