Перейти к содержанию
wishuser

Изменить поведение Discount (скидки)

Рекомендуемые сообщения

Привет.

 

Для зарегистрированных пользователей определенной группы необходимо выставить свою цену на всю продукцию через discount. Загружаться в базу все будет автоматом. Проблема в том, что размер скидки нужно указывать в процентах, а не новую цену (в валюте) как по дефолту. Я поправил 3 SQL-запроса в файле catalog/model/catalog/product.php (в функциях  getProduct, getProducts и getProductDiscounts). В магазине стало все гуд, но когда добавляем в корзину товар с дискаунтом, то в корзине цена отображается не новая (посчитанная), а число, например 5, т.е. проценты которые указаны в админке в дискаунте.

Вот кусок запроса:

 

162 Query SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT (p.price-(p.price/100*pd2.price)) AS price FROM oc_product_discount AS pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '2' AND (pd2.quantity = '0' OR 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, ...

 

Тут видно, что селект пересчитывает процент скидки. В  pd2.price - указан процент скидки. Но как быть с корзиной. Не могу найти код, который делает запрос о цене товара с таблички oc_product_discount.


162 Query SELECT price FROM oc_product_discount WHERE product_id = '205' AND customer_group_id = '2' AND quantity <= '13' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1

 

Смотрел в код common.js, но что-то ничего не видно. Подскажите, плиз, как ведет себя опенкарт в этом случае.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я делал по-другом, добавил в базу в product_discount поле percent

вывел его во вьюху в админке, поле с ценой закоментил

<!--<td class="right"><input type="text" name="product_discount[<?php echo $discount_row; ?>][price]" value="<?php echo $product_discount['price']; ?>" /></td>-->
                <td class="right"><input type="text" name="product_discount[<?php echo $discount_row; ?>][percent]" value="<?php echo $product_discount['percent']; ?>" /></td>

 

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

foreach ($data['product_discount'] as $product_discount) {

                $price_gen = (float)$data['price'] - ((float)$product_discount['percent']*((float)$data['price']*0.01));

				$this->db->query("INSERT INTO " . DB_PREFIX . "product_discount SET
				product_id = '" . (int)$product_id . "',
				customer_group_id = '" . (int)$product_discount['customer_group_id'] . "',
				quantity = '" . (int)$product_discount['quantity'] . "',
				priority = '" . (int)$product_discount['priority'] . "',
				price = '" . $price_gen . "',
				percent = '" . (float)$product_discount['percent'] . "',
				date_start = '" . $this->db->escape($product_discount['date_start']) . "',
				date_end = '" . $this->db->escape($product_discount['date_end']) . "'");
			}

И в каталоге мне не пришлось вообще искать где выводится discount.  :-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я то же так думал, но не захотел изменять структуру таблиц БД. Как оно будет при обновлении ОС?

И второе. У меня скидка заноситься с пом. шелл-скрипта на все товары (своя категория - своя скидка), а в вашем коде необходимо через админку прощелкать все товары с кнопкой "Save", что не очень подходит. Так что вопрос пока актуален.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что за "вредные советы"? По делу, нужно создать новый extantions с типом total и сценарий расчета скидки написать....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно и так, я не спорю, но я не настолько силен в PHP ООП, что бы это сделать. Мне подскажите лучше, когда нажимаем на кнопку в "Купить", откуда береться цена, которую мы видим в корзине. Просто если товар уже с нужной мне ценой (отминусован дискаунт), то в корзине светится другая цена (DB_PREFIX_product_discount/price)?? Не пойму какой код выполняется в этом случае. Кто знает - подскажите.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что за "вредные советы"? По делу, нужно создать новый extantions с типом total и сценарий расчета скидки написать....

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

pashast, нет. Я как раз и говорю: "... не трогайте цену товара".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

pashast, нет. Я как раз и говорю: "... не трогайте цену товара".

Не трогать цену товара - это как раз и есть "вредные советы".

Для меня общая скидка - проблемы с выгрузкой заказов в систему учета складом.

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для интересующихся. Нашел модификацию - скидки в процентах http://forum.opencart.com/viewtopic.php?t=6375 но это только половинчатое решение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для интересующихся. Нашел модификацию - скидки в процентах http://forum.opencart.com/viewtopic.php?t=6375 но это только половинчатое решение.

 

Это все хорошо, но кто подскажет где код, который выполняется, когда нажимаем на кнопку "купить" и товар попадает в корзину??

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В product.tpl JS сценарий, в контроллере корзины (checkout/cart) все остальное

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А есть ли нативный способ отлавливания цены и замена ее на лету без правки в моделях, а отдельным дополнением?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Vladzimir, в OpenCart - нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Vladzimir, в OpenCart - нет.

Ну почему "нет", есть :)

И сделать очень легко.

Причем выгрузка заказов работает с динамически измененной ценой.

Причем без vqmod и без изменений системных файлов

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Похожий контент

    • От magzhan9292
      500.00 руб
      Скачать/Купить дополнение


      Noticeup Скидка за Лайк в Соц.сетях
      Модуль Noticeup Скидка за "Лайк" в соц сетях
      Модуль предоставляет скидку пользователю на товар за нажатие на кнопку "Мне нравится" или "Рассказать друзьям" социальных сетях. Для Opencart 2.x.
       
      Список поддерживаемых соц сетей:
      Вконтакте Facebook Google Plus Twitter
      Поддерживаются кнопки сервисов AddThis.com и Pluso.ru - скидка засчитывается сразу после клика на кнопку, без подтверждения из социальной сети.
       
      Возможности настройки:
      Скидка считается либо от основной цены, либо от цены по акции. Выбор типа скидки - процент или фиксированная. Скидка задается в целом для всех товаров. Настраивается отдельное значение скидки для каждой соцсети и каждого действия (лайк или пост на стене). Ограничение действия скидки по времени, например в одну неделю. По умолчанию без ограничения.
      Для установки модуля:
      Установщик дополнений Выбрать файл вашей версий. Менеджер дополнений и обновить Зайдите в администраторский интерфейс, перейдите в Дополнение->Учитывать в заказе->Noticeup Скидка за лайк. Нажмите Установить, затем Изменить. Задайте величину скидки за лайк или за шеринг в соответствующем поле. Нажимите сохранить.  
      Реализован на сайте http://shop2.noticeup.kz
      Админка модуля
      demo
      demo
      Noticeup Social Discount Admin
       
      Первым десяти покупателям 50% скидка и Бесплатная Установка модуля + Живая генерация цены на фронте
      Если вашей версий opencart нет в списке, мы переделаем под вас!
      Добавил magzhan9292 Добавлено 06.09.2018 Категория Учет в заказе Системные требования Сайт разработчика noticeup.kz Старая цена 1000 Метод активации Без активации Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1
      2.0
      1.5.6.4
      1.5.6.3
      1.5.6.2
      1.5.6.1
      1.5.6 ocStore 3.0
      2.3
      2.2
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1  
    • От magzhan9292
      Модуль Noticeup Скидка за "Лайк" в соц сетях
      Модуль предоставляет скидку пользователю на товар за нажатие на кнопку "Мне нравится" или "Рассказать друзьям" социальных сетях. Для Opencart 2.x.
       
      Список поддерживаемых соц сетей:
      Вконтакте Facebook Google Plus Twitter
      Поддерживаются кнопки сервисов AddThis.com и Pluso.ru - скидка засчитывается сразу после клика на кнопку, без подтверждения из социальной сети.
       
      Возможности настройки:
      Скидка считается либо от основной цены, либо от цены по акции. Выбор типа скидки - процент или фиксированная. Скидка задается в целом для всех товаров. Настраивается отдельное значение скидки для каждой соцсети и каждого действия (лайк или пост на стене). Ограничение действия скидки по времени, например в одну неделю. По умолчанию без ограничения.
      Для установки модуля:
      Установщик дополнений Выбрать файл вашей версий. Менеджер дополнений и обновить Зайдите в администраторский интерфейс, перейдите в Дополнение->Учитывать в заказе->Noticeup Скидка за лайк. Нажмите Установить, затем Изменить. Задайте величину скидки за лайк или за шеринг в соответствующем поле. Нажимите сохранить.  
      Реализован на сайте http://shop2.noticeup.kz
      Админка модуля
      demo
      demo
      Noticeup Social Discount Admin
       
      Первым десяти покупателям 50% скидка и Бесплатная Установка модуля + Живая генерация цены на фронте
      Если вашей версий opencart нет в списке, мы переделаем под вас!
    • От yurabr
      Здравствуйте.
      Выше мой simplecheckout_cart.tpl
      Там условие для двух цен (зависят от суммы).
      Подскажите, как туда добавить условие для третьей цены (price_3, min_price_order_3), если не очень трудно - напишите, пожалуйста.
      В поддержку Симплы не пишу, не уверен, что это по теме, а сюда все можно .
      ХЗ, что еще писать.
      Спасибо за помощь, хоть какую то.
    • От afwollis
      [ocStore_15x] [WebMe] Last Order Discount
      Скачать/Купить дополнение Обратите внимание: данная версия модуля платная.
      Это связано с тем, что поддержка бесплатных дополнений отнимает довольно много времени, которое хочется хоть как-то компенсировать.
      Скидка X в процентах для следующей покупки в течении Y дней с даты последнего заказа.
      Учитывается статус заказа.
      Отдельные настройки скидок для оформления заказа зарегистрированным клиентом и гостем.
      В случае оформления заказа в гостевом режиме поиск предыдущих заказов ведется по адресу электронной почты.
      Модуль проверялся на следующих версиях движков:
      - ocStore_1531;
      - ocStore_1541.
      Впрочем, должен работать на версиях ocStore_15x.
      Ограничения:
      В данный момент модуль поставляется только с русским языком.
      С версии 0.2.ocs1531 внедрен функционал проверки наличия обновлений (новых версий) дополнений.
      Код, отвечающий за это, отделен в файлах комментариями с пометкой "__DO_NOT_EDIT__"
      Добавил afwollis Добавлено 28.12.2012 Категория Учет в заказе  
    • От louise170
      450.00 руб
      Скачать/Купить дополнение


      Продукты по акции
      Модуль позволяет создавать и проводить акции с товарами идущими в подарок при заказе на определенную сумму денег.
      Подарочные товары автоматически кладутся в корзину с нулевой стоимостью, если была достигнута заданная стоимость заказа.
      Для информирования покупателей о проводимых акциях, можно использовать другие модули, например: статьи, новости, баннеры. Лично мне нравится использовать для этих целей модуль HTML Popup
      Никакие системные файлы не изменяются. Модуль тестировался на OpenCart 1.5.4.1
      Поддерживаемые языки:
      русский
      Пример работы модуля:
      http://ocstore1541.hypnoguru.ru/
      Демо админки:
      http://ocstore1541.hypnoguru.ru/admin/
      доступ
      demo / demo
      Установка
      Разархивируйте Скопируйте файлы на сервер В интерфейсе администратора установите права доступа к модулю Зайдите на страницу "Дополнения -> Учитывать в заказе" и установите модуль Продукты по акции Нажмите кнопку "Изменить" и настройте модуль как вам нужно. Обновление модуля
      Закачать все файлы из архива модуля на сайт. Зайти в админку модуля и нажать кнопку "Сохранить". Прописать настройки, которые появились в новой версии (если они вам нужны). Добавил louise170 Добавлено 09.10.2013 Категория Цены, скидки, акции, подарки Системные требования Сайт разработчика Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 1.5.6.4
      1.5.6.3
      1.5.6.2
      1.5.6.1
      1.5.6
      1.5.4.1 ocStore 1.5.5.1.2
      1.5.5.1.1
      1.5.5.1
      1.5.4.1.2
      1.5.4.1.1
      1.5.4.1 OpenCart.Pro, ocShop OcShop 1.5.6.4.х  
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.