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

Смена статуса товара в зависимости от количества


Recommended Posts

Добрый день. Подскажите, пожалуйста, можно ли сделать так, чтобы статус товара менялся в зависимости от его количества ?

Сейчас принцип работы статусов товара немного изменен: он работает отдельно от количества и пункт "Статус товара при отсутствии на складе" в админке это просто статус товара, и он не ставится автоматически при нулевом количестве. Нужно, чтобы при количестве 20(к примеру) статус товара менялся на "Много", при 3 на "Мало" и тд. На витрине это сделать просто, но нужно, чтобы статус менялся у самого продукта в базе

 

Спасибо! 

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

Напишите 2 скрипта. Первым замените все статусы в базе в зависимости от количества и вторым во время оформления заказа на сайте или после редактирования менеджером в админке меняйте статус

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


10 часов назад, wbDev сказал:

Напишите 2 скрипта. Первым замените все статусы в базе в зависимости от количества и вторым во время оформления заказа на сайте или после редактирования менеджером в админке меняйте статус

Дело в том, что стоит ежедневное обновление остатков с помощью импорта xls, и после этой операции, нужно, чтобы все статусы обновлялись. В xls, к сожалению, статусов нет.

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

3 минуты назад, wbDev сказал:

2 скрипта же будет, первый запускайте после импорта чтобы обновить статусы

Думал об этом, написать скрипт и закинуть в крон, если нет более легких путей, но видимо нет

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

2 hours ago, mbrogan said:

Думал об этом, написать скрипт и закинуть в крон, если нет более легких путей, но видимо нет

Есть решение на уровне БД. Это триггеры.

 

Если кратко: создается некое событие (собственно триггер), которое отрабатывает моментально после каждого изменения допустим, таблиц oc_order или oc_product. Отрабатывает - выполняет sql-скрипт, который проставляет нужные статусы товары в зависимости от его количества.

 

При минимальной компетенции триггер элементарно создается за 10 минут. Например, у меня так количество бонусных баллов (за которые можно купить товар) при изменении цены товара когда-то автоматически пересчитывалось.

 

Вот "рыба" Вам для примера

Spoiler

--
-- Установка базы данных по умолчанию
--
USE ИМЯ_ВАШЕЙ_БАЗЫ;

DELIMITER $$

--
-- Создать триггер `trigger1`
--
CREATE
    DEFINER = 'root'@'%'
TRIGGER trigger1
    AFTER UPDATE
    ON oc_order
    FOR EACH ROW
BEGIN

-- бла-бла-бла

END
$$

DELIMITER ;

 

 

 

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

45 минут назад, 100napb сказал:

Есть решение на уровне БД. Это триггеры.

 

Если кратко: создается некое событие (собственно триггер), которое отрабатывает моментально после каждого изменения допустим, таблиц oc_order или oc_product. Отрабатывает - выполняет sql-скрипт, который проставляет нужные статусы товары в зависимости от его количества.

 

При минимальной компетенции триггер элементарно создается за 10 минут. Например, у меня так количество бонусных баллов (за которые можно купить товар) при изменении цены товара когда-то автоматически пересчитывалось.

 

 

 

 

 

А вот это уже интересно, попробую сделать. Спасибо)

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

7 часов назад, 100napb сказал:

Есть решение на уровне БД. Это триггеры.

 

Попробовал, при сохранении страницы с продуктом - ошибка 500, даже при самых простейших запросах.

 

BEGIN 
UPDATE oc_product 
SET stock_status_id = 7
WHERE quantity = 20;
END

 

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

3 hours ago, mbrogan said:

Попробовал, при сохранении страницы с продуктом - ошибка 500, даже при самых простейших запросах.

Ну так ошибка ошибке рознь... тем более - 500тая. Гляньте хоть, что Вам веб-сервер в логах пишет. Без этой информации никаких выводов постороннему человеку не сделать.

 

Тем не менее, я не поленился и создал триггер с Вашим кодом. Работает на отличненько и ошибок нет никаких :) Так что Вы молодец, в каком-то смысле ))

 

Единственное, что приходит в голову - триггер создан\запускается из-под некорректного пользоваеля mysql. Из-под рута, например. Пересоздайте триггер для нужного пользователя - для того, что указан у Вас в файлах /config.php (в корне сайта или в папке /admin) в строчка define('DB_USERNAME', 'юзер_нейм');

 

 

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

 

17 часов назад, 100napb сказал:

Ну так ошибка ошибке рознь... тем более - 500тая. Гляньте хоть, что Вам веб-сервер в логах пишет. Без этой информации никаких выводов постороннему человеку не сделать.

 

Тем не менее, я не поленился и создал триггер с Вашим кодом. Работает на отличненько и ошибок нет никаких :) Так что Вы молодец, в каком-то смысле ))

 

Единственное, что приходит в голову - триггер создан\запускается из-под некорректного пользоваеля mysql. Из-под рута, например. Пересоздайте триггер для нужного пользователя - для того, что указан у Вас в файлах /config.php (в корне сайта или в папке /admin) в строчка define('DB_USERNAME', 'юзер_нейм');

 

 

 

Благодарю)  И спасибо, что заинтересованы. 

Триггер создавался из phpmyadmin под нужным пользователем, но что-то не то.

 

Я решил проблему отдельным скриптом. Создал php файл с подключением к базе и обновлением строк, затем добавил выполнение этого файла в крон (в принципе, мне нужно обновлять только тогда, когда обновляются остатки, а эта задача тоже в кроне).

 

Хотя заметил, что при выполнении скрипта, перезаписывалась только первая строчка, как позже выяснилось, из за этого триггера.

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

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

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

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

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

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

Вхід

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

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

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

Important Information

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