Добро пожаловать, Гость
Логин: Пароль: Запомнить меня

Наборы товаров в Virtuemart

Наборы товаров в Virtuemart 2 года 1 день назад #7409

  • Сережа
  • Сережа аватар
  • Не в сети
  • Прохожий
  • Сообщений: 4
  • Репутация: 0
Добрый день,
Каким образом можно реализовать в virtuemart скидку на набор товаров?
Существует расширение ProductBundle, однако оно работает не совсем корректно.
Подскажите, возможно вы сталкивались с решением подобной задачи.
Чтобы оставлять сообщения нужно зарегистрироваться.

Наборы товаров в Virtuemart 2 года 22 ч. назад #7410

  • Wedal
  • Wedal аватар
  • Не в сети
  • Администратор
  • Сообщений: 2552
  • Спасибо получено: 600
  • Репутация: 217
Сережа, что такое "набор товаров"? Опишите задачу подробнее.
Чтобы оставлять сообщения нужно зарегистрироваться.

Наборы товаров в Virtuemart 2 года 17 ч. назад #7411

  • Сережа
  • Сережа аватар
  • Не в сети
  • Прохожий
  • Сообщений: 4
  • Репутация: 0
Извиняюсь, что сразу не пояснил. Под набором товаров я понимаю группу товаров с общей ценой.
Например на сайте продаются товары A, B, C, D.
Необходимо реализовать скидку при покупке двух товаров A и двух товаров B. То есть у этой группы товаров будет своя цена. И она ниже, чем сумма цен товаров, входящих в эту группу.

Нужен код, который бы мониторил содержимое корзины и при обнаружении там определенного сочетания товаров менял бы значение переменной, содержащей общую сумму заказа.
Логика и архитектура кода в общем проста и понятна. Мне видится такое решение:
1) редактирование файла, где происходит пересчет корзины. Можно вставить цикл на проверку наличия определенных товаров в корзине. Тогда, обнаружив "набор" в корзине, можно менять значение переменной, содержащей общую сумму заказа.
Не могу понять только, в каких файлах редактируется логика корзины? Как по вашему, можно ли осуществить задуманное предложенным способом?
Чтобы оставлять сообщения нужно зарегистрироваться.

Наборы товаров в Virtuemart 2 года 29 мин. назад #7412

  • Wedal
  • Wedal аватар
  • Не в сети
  • Администратор
  • Сообщений: 2552
  • Спасибо получено: 600
  • Репутация: 217
Сережа, в целом все верно написали, только я бы использовал еще 2 настраиваемых поля, являющееся атрибутами корзины, в товарах. Смотрите: вы один раз создаете 2 поля. В одном из них будет храниться метка группы товаров, а в другом стоимость группы или скидка для нее. Далее вы сможете добавить эти поля для отдельных товаров, определив для них группы и стоимость группы. В настройках полей важно активировать опцию "Атрибут корзины". Тогда эти данные будут передаваться в корзину вместе с товаром, когда пользователь добавит его туда.
По корзине. Там уже довольно простой PHP-код:
1) Проверяем у товаров в корзине наличие заданных полей(по id этих полей).
2) Если поля найдены, получаем их значения. Определяем, добавлены ли все товары группы. Делаем скидку.
Все макеты корзины, в которые нужно вносить изменения, находятся в папке: components/com_virtuemart/views/cart. Перед внесением изменений их нужно скопировать по адресу templates/ВАШ_ШАБЛОН/html/com_virtuemart/cart и править уже там.
Чтобы оставлять сообщения нужно зарегистрироваться.

Наборы товаров в Virtuemart 1 год 11 мес. назад #7413

  • Сережа
  • Сережа аватар
  • Не в сети
  • Прохожий
  • Сообщений: 4
  • Репутация: 0
Большое спасибо, интересное решение с полями.
Не очень разобрался, в каком именно файле происходит подсчет значений переменных заказа.
Если редактировать код в default_pricelist.php, при этом изменяя значение итоговой суммы заказа, то это повлияет только на вывод, и при оформлении заказа посчитается цена без скидки. Как повлиять на значение итоговой суммы заказа, которое используется virtuemartом для записи в базу, отправки сообщений пользователю и тд?
Буду очень благодарен за подсказку.
Чтобы оставлять сообщения нужно зарегистрироваться.

Наборы товаров в Virtuemart 1 год 11 мес. назад #7414

  • Wedal
  • Wedal аватар
  • Не в сети
  • Администратор
  • Сообщений: 2552
  • Спасибо получено: 600
  • Репутация: 217
Сережа, как вариант, можно исхитриться добавлять скидку на общую сумму. Но точного кода я вам не выдам. Нужно смотреть код корзины и пробовать.
Чтобы оставлять сообщения нужно зарегистрироваться.

Наборы товаров в Virtuemart 1 год 11 мес. назад #7415

  • Сережа
  • Сережа аватар
  • Не в сети
  • Прохожий
  • Сообщений: 4
  • Репутация: 0
В общем разобрался, оказалось все просто ;)
Есть в папке
/administrator/components/com_virtuemart/helpers
файлик calculationh.php, в котором есть функция getCheckoutPrices.
Там то и происходит обсчет корзины. Каждый раз когда пользователь в корзине меняет количество товара, например.
В этой же функции происходит подсчет всевозможных скидок и тп.
Код у функции читается легко и состоит в основном из циклов на перебор товаров в корзине и проверке условий всяческих скидок.
Поэтому управлять ценой там можно как душе угодно.
Итоговая стоимость всех товаров, находящихся в корзине, с примененными скидками хранятся в $this->_cartPrices.
Допустим, необходимо уменьшать итоговую стоимость всех товаров в случае, если в корзине присутствует товар с id = 99.
В цикл перебора товаров корзины, который начинается со строки
foreach ($cart->products as $name => $product) {
можно вставить простой код на проверку условия.
if ($product->virtuemart_product_id==12)
$inCart=1;
А потом перед заключительной строкой функции
return $this->_cartPrices;
можно написать что-то типо
if ($inCart==1)
$this->_cartPrices['billTotal'] = $this->_cartPrices['billTotal'] -100;

Таким образом в случае обнаружения в корзине нужного товара можно уменьшать итоговую сумму товаров.
Точно так-же можно проверить наличие нескольких товаров в корзине и уменьшить итоговую сумму.
Минус этого подхода в том, что это хак ядра и при обновлении затрется, посему имеет смысл написать человеческий плагин.
Последнее редактирование: 1 год 11 мес. назад от Сережа.
Чтобы оставлять сообщения нужно зарегистрироваться.
Время создания страницы: 0.260 секунд

Вверх