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

Как реализовать запрет на одинаковый SKU или модель при оформление товара Opencart3?


Recommended Posts

Доброго времени суток всем!

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

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

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


В файле admin/controller/catalog/product.php

 

Перед строкой:

if ((utf8_strlen($this->request->post['model']) < 1) || (utf8_strlen($this->request->post['model']) > 64)) {

Добавить это:

if (!empty($this->request->post['model'])) {
    $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "product WHERE model LIKE '" . $this->db->escape($this->request->post['model']) . "'" . (isset($this->request->get['product_id']) ? " AND product_id != '" . (int)$this->request->get['product_id'] . "'" : ""));
    if ($query->row['total'] > 0) $this->error['model'] = 'Данное значение уже используется в другом товаре!';
}

Это для проверки поля - модель.

 

По хорошему надо запрос перенести в отдельную функцию модели товара.

А текст ошибки в языковой файл.

Но тогда дольше все правки описывать.

 

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

13 часов назад, mpn2005 сказал:

В файле admin/controller/catalog/product.php

 

Перед строкой:


if ((utf8_strlen($this->request->post['model']) < 1) || (utf8_strlen($this->request->post['model']) > 64)) {

Добавить это:


if (!empty($this->request->post['model'])) {
    $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "product WHERE model LIKE '" . $this->db->escape($this->request->post['model']) . "'" . (isset($this->request->get['product_id']) ? " AND product_id != '" . (int)$this->request->get['product_id'] . "'" : ""));
    if ($query->row['total'] > 0) $this->error['model'] = 'Данное значение уже используется в другом товаре!';
}

Это для проверки поля - модель.

 

По хорошему надо запрос перенести в отдельную функцию модели товара.

А текст ошибки в языковой файл.

Но тогда дольше все правки описывать.

 

 

Это действительно работает! огромное спасибо! С переносом запроса и языковым файлом я разберусь!

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


2 минуты назад, chukcha сказал:

Еще можно unique model

Если сохраняем товар и поле модель не меняем, то она уже не уникальна.

Т.к. встречается уже в этом же товаре. Но это не дубль, т.к. сохранение пойдёт поверх.

 

 

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

10 минут назад, chukcha сказал:

unique model
на update не влияет

На уровне сохранения не очень вариант.

Тогда надо ещё обработку ошибок на уровне модели делать. А это идёт вразрез с архитектурой OC.

Прощё штатно на уровне контроллера проверить в validate.

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

9 минут назад, chukcha сказал:

Но это спасет от сторониих апдейтов

Этим надо очень грамотно пользоваться.

Т.к. без обработки ошибок часть запросов не пройдёт, и будут записи в других таблицах, а в product не будет.

 

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

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

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

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

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

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

Вхід

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

Вхід зараз

×
×
  • Створити...

Important Information

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