Jump to content
Sign in to follow this  
wishuser

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

Recommended Posts

Привет.

 

Для зарегистрированных пользователей определенной группы необходимо выставить свою цену на всю продукцию через 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, но что-то ничего не видно. Подскажите, плиз, как ведет себя опенкарт в этом случае.

Share this post


Link to post
Share on other sites

Я делал по-другом, добавил в базу в 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.  :-)

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

  • +1 1

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Vladzimir, в OpenCart - нет.

Share this post


Link to post
Share on other sites

Vladzimir, в OpenCart - нет.

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

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Similar Content

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


      TS CountDown Timer
      CountDown Timer v1.0 by Tramplin Studio - это очень гибкий в настройке модуль, который выводит таймер обратного отсчета для акционных товаров на всех возможных страницах и во всех стандартных модулях OpenCart. Широкие возможности настройки дизайна позволяют вписать таймер в любой шаблон.
      Таймер обратного отсчета акции позволит привлечь внимание посетителей интернет-магазина к акционным товаром, тем самым значительно повысить конверсию магазина.
       
      Модуль выводит числовой таймер на следующих страницах и модулях:
      страница "Товар" (product/product); страница "Категория" (product/category); страница "Производитель" (product/manufacturer); страница "Акции" (product/special); страница "Поиск" (product/search); модуль "Новинки" (module/latest); модуль "Хиты продаж" (module/bestseller); модуль "Акции" (module/special); модуль "Рекомендуемые" (module/featured); модуль "Рекомендуемые" (product/product) на странице товара.  
      Для каждой страницы и модуля можно отдельно настроить ряд внешних параметров таймера:
      отображать таймер на отдельной странице или в модуле; заголовок таймера: "Акция закончится через"; текстовые разделители (XX : XX : XX : XX); текстовые обозначения величин (XX день, XX час, XX минута, XX секунда); количество дней (также скрывается и текстовое обозначение этой величины); количество дней в часах (Пример: 5 дней * 24 часа = 120 часов + остаток за текущий день. Примечание: работает только если "количество дней" скрыто); количество секунд (также скрывается и текстовое обозначение этой величины).  
      Таймер для каждого отдельного товара включается при добавлении/редактировании товара во вкладке "Акция".
      Необходимо указать новую стоимость и дату окончания акции. Если не указать дату окончания, то числовой таймер не отобразится для этого товара.
       
      Если вы хотите чтобы таймер какого либо товара отсчитывал время до конца дня, то установите дату окончания акции "N дней", отключите опцию "Отображать количество дней", а опцию "Считать количество дней" включите. Например, если акция заканчивается через 5 дней, то ежедневно на протяжении 5-и дней будет отображаться таймер отсчета до конца текущих суток.
      Такой маневр приводит к еще большему повышению конверсии в продажу!

      Инструкция по установке:
      Админское меню -> Модули -> Установка расширений Просто загрузите архив с модулем Обновите кэш модификаторов Файлы не перезаписываются!
      Используется OCMod!

      Смотреть DEMO
      Смотреть DEMO админки (логин: demo, пароль: demo)

      Если у вас возникли вопросы или предложения по улучшению работы модуля, вы можете с нами связаться:
      Сайт: http://tramplin-studio.store/
      E-mail: info@tramplin-studio.store
      Добавил TramplinStudio Добавлено 27.01.2019 Категория Цены, скидки, акции, подарки Системные требования Сайт разработчика Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1
      2.0 ocStore 3.0
      2.3
      2.2
      2.1 OpenCart.Pro, ocShop Обращение к серверу разработчика Нет  
    • By TramplinStudio
      CountDown Timer v1.0 by Tramplin Studio - это очень гибкий в настройке модуль, который выводит таймер обратного отсчета для акционных товаров на всех возможных страницах и во всех стандартных модулях OpenCart. Широкие возможности настройки дизайна позволяют вписать таймер в любой шаблон.
      Таймер обратного отсчета акции позволит привлечь внимание посетителей интернет-магазина к акционным товаром, тем самым значительно повысить конверсию магазина.
       
      Модуль выводит числовой таймер на следующих страницах и модулях:
      страница "Товар" (product/product); страница "Категория" (product/category); страница "Производитель" (product/manufacturer); страница "Акции" (product/special); страница "Поиск" (product/search); модуль "Новинки" (module/latest); модуль "Хиты продаж" (module/bestseller); модуль "Акции" (module/special); модуль "Рекомендуемые" (module/featured); модуль "Рекомендуемые" (product/product) на странице товара.  
      Для каждой страницы и модуля можно отдельно настроить ряд внешних параметров таймера:
      отображать таймер на отдельной странице или в модуле; заголовок таймера: "Акция закончится через"; текстовые разделители (XX : XX : XX : XX); текстовые обозначения величин (XX день, XX час, XX минута, XX секунда); количество дней (также скрывается и текстовое обозначение этой величины); количество дней в часах (Пример: 5 дней * 24 часа = 120 часов + остаток за текущий день. Примечание: работает только если "количество дней" скрыто); количество секунд (также скрывается и текстовое обозначение этой величины).  
      Таймер для каждого отдельного товара включается при добавлении/редактировании товара во вкладке "Акция".
      Необходимо указать новую стоимость и дату окончания акции. Если не указать дату окончания, то числовой таймер не отобразится для этого товара.
       
      Если вы хотите чтобы таймер какого либо товара отсчитывал время до конца дня, то установите дату окончания акции "N дней", отключите опцию "Отображать количество дней", а опцию "Считать количество дней" включите. Например, если акция заканчивается через 5 дней, то ежедневно на протяжении 5-и дней будет отображаться таймер отсчета до конца текущих суток.
      Такой маневр приводит к еще большему повышению конверсии в продажу!

      Инструкция по установке:
      Админское меню -> Модули -> Установка расширений Просто загрузите архив с модулем Обновите кэш модификаторов Файлы не перезаписываются!
      Используется OCMod!

      Смотреть DEMO
      Смотреть DEMO админки (логин: demo, пароль: demo)

      Если у вас возникли вопросы или предложения по улучшению работы модуля, вы можете с нами связаться:
      Сайт: http://tramplin-studio.store/
      E-mail: info@tramplin-studio.store
    • By 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  
    • By 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 нет в списке, мы переделаем под вас!
    • By yurabr
      Здравствуйте.
      Выше мой simplecheckout_cart.tpl
      Там условие для двух цен (зависят от суммы).
      Подскажите, как туда добавить условие для третьей цены (price_3, min_price_order_3), если не очень трудно - напишите, пожалуйста.
      В поддержку Симплы не пишу, не уверен, что это по теме, а сюда все можно .
      ХЗ, что еще писать.
      Спасибо за помощь, хоть какую то.
  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.