Задать вопрос
  • Как сделать сортировку по размеру скидки в opencart?

    @harlamov_di
    Самый простой способ по акциям по крайней мере который показался мне при решении данной задачи адекватным и помог мне:

    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'
    		);


    вот и все в принципе
    Ответ написан
    Комментировать