Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Фильтр товаров по наличию акции


Recommended Posts

Добрый день. Есть задача фильтровать товары в категории в зависимости от наличия акции. Я нашел подходящий модуль - "фильтр товаров по наличию" и пытаюсь его адаптировать под текущую задачу.

В модели вместо:

$sql .= " AND (p.stock_status_id = '6' OR p.quantity > 0)";

пишу:

$sql .= " AND (ps.product_id = '*')";

Но возникает ошибка, что в рез-тах запроса такой таблицы нет(

Значит, в модели добавляю:

"LEFT JOIN " . DB_PREFIX . "product_special ps ON (p.product_id = ps.product_id)"

Т. е. вместо

$sql .= " LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'";

Получается

  $sql .= " LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "product_special ps ON (p.product_id = ps.product_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'";

Но я всеравно получаю ошибку:

Fatal error: Uncaught Exception: Error: Unknown column 'ps.product_id' in 'where clause'<br />Error No: 1054<br />SELECT p.product_id, (SELECT AVG(rating) AS total FROM oc_review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT price FROM oc_product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '1' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM oc_product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '1' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special FROM oc_product_to_category p2c LEFT JOIN oc_product p ON (p2c.product_id = p.product_id) LEFT JOIN oc_product_description pd ON (p.product_id = pd.product_id) LE in /opt/lampp/htdocs/oc3_tst/system/library/db/mysqli.php on line 40

Но в этом случае в тексте ошибки таблица "oc_product_special" уже присутствует...

 

Извращался уже даже так:

        if (!empty($data['filter_instock'])) {
        $results = $this->model_catalog_product->getProductSpecials();
        if ($results) {
             foreach ($results as $result) {
             $sql .= " AND (p.product_id = '" . $result['product_id'] . "')";
          }
        }
       }

Отображает акционный товар только, если он там один))

 

Подскажите, пожалуйста, что я делаю не так? Может, не в то место вставляю JOIN? Или вообще это проще сделать контроллером?

 

В файле приложил модуль, мною адаптированный под opencart 3 (изначально был под 2-ю версию)

module.ocmod.zip

Надіслати
Поділитися на інших сайтах


Таки решение было:

        if (!empty($data['filter_instock'])) {
            $results = $this->model_catalog_product->getProductSpecials();
 
            $id_products = array();
 
            if ($results) {
                foreach ($results as $result) {
                    $id_products[] = $result['product_id'];
                }
            }
 
            if (!empty($id_products)) {
                $sql .= " AND p.product_id IN (" . implode(',', $id_products) . ")";
            }
        }

Спасибо
fanatikus, cyberforum

Змінено користувачем relative
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.