wishuser

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

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

wishuser    1

Привет.

 

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

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


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

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

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


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

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

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

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


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

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

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


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

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

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


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

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

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

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


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

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

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


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

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

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

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

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


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

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

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


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

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

 

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

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


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

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

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


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

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

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


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

Vladzimir, в OpenCart - нет.

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


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

Vladzimir, в OpenCart - нет.

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

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

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

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

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


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

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

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

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

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

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

Войти

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

Войти


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

    • От 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.х  
    • От louise170
      Модуль позволяет создавать и проводить акции с товарами идущими в подарок при заказе на определенную сумму денег или
      если с корзине лежит определенный товар или группа товаров. Подарочные товары автоматически попадают в заказ, если были выполнены условия акции.
      Отличия от модуля "Продукты по акции":
      Усовершенствована система добавления товаров в акцию.
      Это дает больше возможностей в управлении акционными товарами, а именно: нет вкладок, информация по акциям хранится в базе данных, это позволяет создавать большое кол-во акций (на вкладках максимум 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


      Просмотреть файл Продукты по акции
      Модуль позволяет создавать и проводить акции с товарами идущими в подарок при заказе на определенную сумму денег.
      Подарочные товары автоматически кладутся в корзину с нулевой стоимостью, если была достигнута заданная стоимость заказа.
      Для информирования покупателей о проводимых акциях, можно использовать другие модули, например: статьи, новости, баннеры. Лично мне нравится использовать для этих целей модуль 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 ocStore OpenCart.Pro, ocShop  
    • От louise170
      Модуль позволяет создавать и проводить акции с товарами идущими в подарок при заказе на определенную сумму денег.
      Подарочные товары автоматически кладутся в корзину с нулевой стоимостью, если была достигнута заданная стоимость заказа.
      Для информирования покупателей о проводимых акциях, можно использовать другие модули, например: статьи, новости, баннеры. Лично мне нравится использовать для этих целей модуль HTML Popup
      Никакие системные файлы не изменяются. Модуль тестировался на OpenCart 1.5.4.1
      Поддерживаемые языки:
      русский
      Пример работы модуля:
      http://ocstore1541.hypnoguru.ru/
      Демо админки:
      http://ocstore1541.hypnoguru.ru/admin/
      доступ
      demo / demo
      Установка
      Разархивируйте Скопируйте файлы на сервер В интерфейсе администратора установите права доступа к модулю Зайдите на страницу "Дополнения -> Учитывать в заказе" и установите модуль Продукты по акции Нажмите кнопку "Изменить" и настройте модуль как вам нужно. Обновление модуля
      Закачать все файлы из архива модуля на сайт. Зайти в админку модуля и нажать кнопку "Сохранить". Прописать настройки, которые появились в новой версии (если они вам нужны).
    • От perke
      Что такое опенкарт узнала на прошлой неделе. Сейчас заказчик просит выводить в админке в детальном просмотре заказа помимо суммы скидки по дисконту еще и номер использованного дисконта. Насколько я поняла используется отдельный (собственный?) модуль Discount, а не стандартные купоны и ваучеры.
      Захожу в ControllerSaleOrder функция info() и смотрю что есть в $this->request->get['order_id']) или this->model_sale_order->getOrder($order_id) . По дисконту там нет ничего.Зато есть в $this->data['totals'] , который получает из модуля неясную выборку по таблице order_total , где имеется сумма доставки, заказа, размер и сумма скидки по дисконту, но не номер.
      В письме об успешном заказе есть номер дисконта. Не могу найти только сам его контроллер.

      Помогите как-то связать эту инфу воедино и вывести номер использованного дисконта в админку
  • Последние посетители   0 пользователей онлайн

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