Перейти к содержанию
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 и без изменений системных файлов

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


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

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

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

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

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

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

Войти

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

Войти

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

    • От 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.х  
    • От louise170
      1 500.00 руб
      Скачать/Купить дополнение


      Продукты по акции Pro
      Модуль позволяет создавать и проводить акции с товарами идущими в подарок при заказе на определенную сумму денег или
      если с корзине лежит определенный товар или группа товаров. Подарочные товары автоматически попадают в заказ, если были выполнены условия акции.
      Отличия от модуля "Продукты по акции":
      Усовершенствована система добавления товаров в акцию.
      Это дает больше возможностей в управлении акционными товарами, а именно: нет вкладок, информация по акциям хранится в базе данных, это позволяет создавать большое кол-во акций (на вкладках максимум 59) связи между товарами: один к одному, один ко многим, многие к одному, многие ко многим, можно выбирать не конкретные товары, а сразу производителей или категории. создание связей разделено на группы - каждая группа - это отдельная строчка в таблице на странице "Связи". Описания акций отображаются подобно новостям: модуль с анонсами, страница с полным списком и отдельная страница описания акции Страница описания акции также содержит полный список товаров, участвующих в акции. Есть возможность выводить отдельными блоками товары из акции. В списке товаров в категориях видны акционные товары, при нажатии на ссылку открывается краткое описание акции. На странице акционного товара виден блок с подарочным товаром. SEO-урлы для списка и описания акций. Акционные товары можно отображать в корзине вместе с остальными товарами. Акционные товары, кот. отображаются лежащими в корзине, также будут отображаться в счете и в письмах отправляемых покупателю. Учитывается вес акционных товаров, кот. отображаются лежащими в корзине. Акции можно использовать для определенных групп покупателей.  
      С помощью данного модуля также можно делать акции типа "Бесплатная доставка" - описание и список товаров делается здесь, а непосредственная обработка бесплатных товаров в корзине делается с помощью модуля доставки, который может делать бесплатную доставку для определенных групп товаров. Еще в модуле можно делать анонсы для товаров со скидками и специальных предложений, которые делаются через стандартный функционал Опенкарта.
      Никакие системные файлы не затираются, модуль работает на vqmod.
      Модуль тестировался на OpenCart 1.5.4.1, 1.5.6, 1.5.6.4, 2.1.0.2, 2.2.0.0
       
      Поддерживаемые языки
      русский
       
      Пример работы модуля
      http://ocstore156.hypnoguru.ru/
      http://opencart2200.opencartplus.ru/
       
      Демо админки
      http://ocstore156.hypnoguru.ru/admin/
      http://opencart2200.opencartplus.ru/admin/
      доступ
      demo / demo
       
      Лицензия
      При покупке данного модуля, Вы получаете право установки его на один домен. Лицензионный ключ можно получить по запросу на e-mail, который вы увидите на странице модуля, после его установки.
       
      Установка
      Инструкция по установке находится в файле readme.txt в архиве модуля.
       
      Требования к серверу
      На хостинге должен быть PHP 5.3 или выше. На хостинге должен быть установлен ionCube Loader последней версии (минимум версия 5.0). Чтобы проверить его наличие скачайте этот файл, разархивируйте его содержимое и закачайте в корневую директорию Вашего сайта. После этого откройте в браузере http://ваш_сайт/test_ioncube.php Для корректной работе на Опенкарте 1.5.х на вашем сайте должен быть установлен VQMOD не ниже версии 2.4.1,
      если у вас стоит версия ниже - нужно обновиться отсюда: https://github.com/vqmod/vqmod/releases
      FAQ
      FAQ общие вопросы по Опенкарту  
      Добавил louise170 Добавлено 21.12.2014 Категория Цены, скидки, акции, подарки Системные требования PHP 5.3+, IonCube Loader версии 5.0+, для Опенкарт 1.5.х - VQMOD не ниже версии 2.4.1 Сайт разработчика Старая цена Метод активации По емейлу Ioncube Loader Требуется OpenCart 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
      1.5.4.1 ocStore 2.2
      2.1
      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 Opencart.pro 2.1
      OcShop 2.0.3.х
      OcShop 1.5.6.4.х  
    • От MixoFix
      Быстрая скидка клиенту (для Админки)
      Скачать/Купить дополнение Модуль облегчает работу с заказами в магазине.
      Что делает этот модуль: позволяет быстро назначить скидку для заказа.
      Либо % либо фиксированная сумма.
      Скидка распространяеться только на стоимость товара и не распространяется на доставку.
      Если Вы делаете скидку, создается скидочный купон с номером заказа.
      Как это работает:
      1- Функция работает на странице с формой заказа, доступной по клику на ссылку изменить в списке заказов: admin/index.php?route=sale/order/update
      2- Если в поле "купон" ввести число, и нажать кнопку "обновить Итого" - то сумма всех стоимости товаров - уменьшиться на введенную сумму.
      3- Если в поле "купон" ввести число и в конце его поставить знак % например 10%, и нажать кнопку "обновить Итого" - то сумма стоимости всех товаров - уменьшиться на введенный процент.
      Модуль тестировался на версиях 1.5.X
      Ссылка на Демо
      Добавил MixoFix Добавлено 24.10.2014 Категория Цены, скидки, акции, подарки  
    • От kJlukOo
      590.00 руб
      Скачать/Купить дополнение


      DNK Bonus Manager
      DNK Bonus Manager
       
      DEMO
      http://option-mcl-21.taoi.ru/admin/index.php?route=module/dnkbonus&token=tSNtxD1YaYBVUtkGkhc6NrXsvwVWKmCJ
      demo:demo
       
      Описание
       
      Модуль имеет обфусцированные файлы (1 файл)
      Инструмент для удобной генерации товарам бонусов, а так же поощрения клиентов за активность на сайте и заказы
       
      автоматически устанавливать различным группам товаров процентовку в бонусах от основной цены и процентовку получания бонуса от основной цены индивидуально автоматически начислять покупателям или группам покупателей бонусы таблицу топа покупателей по накопленным балам таблицу расходов юзерами бонусов (В ПЛАНАХ) таблица всех начислений баллов с модуля поощрения юзера за регистрацию за кол-во заказов за комментарии за общую сумму заказов  
      Совместимость
      opencart / ocstore - 2.1, 2.2, 2.3
       
      Установка
      через загрузчик расширений
       
       
       
      Добавил kJlukOo Добавлено 30.03.2018 Категория Бонусы, купоны, программы лояльности Системные требования Сайт разработчика cleanphp.ru Старая цена 1000 Метод активации По запросу в ЛС Ioncube Loader Нет OpenCart 2.3
      2.2
      2.1 ocStore 2.3
      2.2
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1  
  • Последние посетители   0 пользователей онлайн

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

×