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

2 года 2 мес. назад #7409 от Сережа
Добрый день,
Каким образом можно реализовать в virtuemart скидку на набор товаров?
Существует расширение ProductBundle, однако оно работает не совсем корректно.
Подскажите, возможно вы сталкивались с решением подобной задачи.

Пожалуйста Войдите или Зарегистрируйтесь, чтобы присоединиться к беседе.

2 года 2 мес. назад #7410 от Wedal
Сережа, что такое "набор товаров"? Опишите задачу подробнее.

Пожалуйста Войдите или Зарегистрируйтесь, чтобы присоединиться к беседе.

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

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

Пожалуйста Войдите или Зарегистрируйтесь, чтобы присоединиться к беседе.

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

Пожалуйста Войдите или Зарегистрируйтесь, чтобы присоединиться к беседе.

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

Пожалуйста Войдите или Зарегистрируйтесь, чтобы присоединиться к беседе.

2 года 2 мес. назад #7414 от Wedal
Сережа, как вариант, можно исхитриться добавлять скидку на общую сумму. Но точного кода я вам не выдам. Нужно смотреть код корзины и пробовать.

Пожалуйста Войдите или Зарегистрируйтесь, чтобы присоединиться к беседе.

2 года 2 мес. назад - 2 года 2 мес. назад #7415 от Сережа
В общем разобрался, оказалось все просто ;)
Есть в папке
/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;

Таким образом в случае обнаружения в корзине нужного товара можно уменьшать итоговую сумму товаров.
Точно так-же можно проверить наличие нескольких товаров в корзине и уменьшить итоговую сумму.
Минус этого подхода в том, что это хак ядра и при обновлении затрется, посему имеет смысл написать человеческий плагин.

Пожалуйста Войдите или Зарегистрируйтесь, чтобы присоединиться к беседе.

Время создания страницы: 0.168 секунд

Вверх