Наборы товаров в Virtuemart
- Сережа
- Автор темы
- Не в сети
- Новый участник
Less
Больше
- Сообщений: 4
- Спасибо получено: 0
9 года 4 нед. назад #7409
от Сережа
Сережа создал тему: Наборы товаров в Virtuemart
Добрый день,
Каким образом можно реализовать в virtuemart скидку на набор товаров?
Существует расширение ProductBundle, однако оно работает не совсем корректно.
Подскажите, возможно вы сталкивались с решением подобной задачи.
Каким образом можно реализовать в virtuemart скидку на набор товаров?
Существует расширение ProductBundle, однако оно работает не совсем корректно.
Подскажите, возможно вы сталкивались с решением подобной задачи.
Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.
- Wedal
- Не в сети
- Администратор
Less
Больше
- Сообщений: 2868
- Спасибо получено: 659
9 года 4 нед. назад #7410
от Wedal
Wedal ответил в теме Наборы товаров в Virtuemart
Сережа, что такое "набор товаров"? Опишите задачу подробнее.
Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.
- Сережа
- Автор темы
- Не в сети
- Новый участник
Less
Больше
- Сообщений: 4
- Спасибо получено: 0
9 года 4 нед. назад #7411
от Сережа
Сережа ответил в теме Наборы товаров в Virtuemart
Извиняюсь, что сразу не пояснил. Под набором товаров я понимаю группу товаров с общей ценой.
Например на сайте продаются товары A, B, C, D.
Необходимо реализовать скидку при покупке двух товаров A и двух товаров B. То есть у этой группы товаров будет своя цена. И она ниже, чем сумма цен товаров, входящих в эту группу.
Нужен код, который бы мониторил содержимое корзины и при обнаружении там определенного сочетания товаров менял бы значение переменной, содержащей общую сумму заказа.
Логика и архитектура кода в общем проста и понятна. Мне видится такое решение:
1) редактирование файла, где происходит пересчет корзины. Можно вставить цикл на проверку наличия определенных товаров в корзине. Тогда, обнаружив "набор" в корзине, можно менять значение переменной, содержащей общую сумму заказа.
Не могу понять только, в каких файлах редактируется логика корзины? Как по вашему, можно ли осуществить задуманное предложенным способом?
Например на сайте продаются товары A, B, C, D.
Необходимо реализовать скидку при покупке двух товаров A и двух товаров B. То есть у этой группы товаров будет своя цена. И она ниже, чем сумма цен товаров, входящих в эту группу.
Нужен код, который бы мониторил содержимое корзины и при обнаружении там определенного сочетания товаров менял бы значение переменной, содержащей общую сумму заказа.
Логика и архитектура кода в общем проста и понятна. Мне видится такое решение:
1) редактирование файла, где происходит пересчет корзины. Можно вставить цикл на проверку наличия определенных товаров в корзине. Тогда, обнаружив "набор" в корзине, можно менять значение переменной, содержащей общую сумму заказа.
Не могу понять только, в каких файлах редактируется логика корзины? Как по вашему, можно ли осуществить задуманное предложенным способом?
Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.
- Wedal
- Не в сети
- Администратор
Less
Больше
- Сообщений: 2868
- Спасибо получено: 659
9 года 4 нед. назад #7412
от Wedal
Wedal ответил в теме Наборы товаров в Virtuemart
Сережа, в целом все верно написали, только я бы использовал еще 2 настраиваемых поля, являющееся атрибутами корзины, в товарах. Смотрите: вы один раз создаете 2 поля. В одном из них будет храниться метка группы товаров, а в другом стоимость группы или скидка для нее. Далее вы сможете добавить эти поля для отдельных товаров, определив для них группы и стоимость группы. В настройках полей важно активировать опцию "Атрибут корзины". Тогда эти данные будут передаваться в корзину вместе с товаром, когда пользователь добавит его туда.
По корзине. Там уже довольно простой PHP-код:
1) Проверяем у товаров в корзине наличие заданных полей(по id этих полей).
2) Если поля найдены, получаем их значения. Определяем, добавлены ли все товары группы. Делаем скидку.
Все макеты корзины, в которые нужно вносить изменения, находятся в папке: components/com_virtuemart/views/cart. Перед внесением изменений их нужно скопировать по адресу templates/ВАШ_ШАБЛОН/html/com_virtuemart/cart и править уже там.
По корзине. Там уже довольно простой PHP-код:
1) Проверяем у товаров в корзине наличие заданных полей(по id этих полей).
2) Если поля найдены, получаем их значения. Определяем, добавлены ли все товары группы. Делаем скидку.
Все макеты корзины, в которые нужно вносить изменения, находятся в папке: components/com_virtuemart/views/cart. Перед внесением изменений их нужно скопировать по адресу templates/ВАШ_ШАБЛОН/html/com_virtuemart/cart и править уже там.
Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.
- Сережа
- Автор темы
- Не в сети
- Новый участник
Less
Больше
- Сообщений: 4
- Спасибо получено: 0
9 года 4 нед. назад #7413
от Сережа
Сережа ответил в теме Наборы товаров в Virtuemart
Большое спасибо, интересное решение с полями.
Не очень разобрался, в каком именно файле происходит подсчет значений переменных заказа.
Если редактировать код в default_pricelist.php, при этом изменяя значение итоговой суммы заказа, то это повлияет только на вывод, и при оформлении заказа посчитается цена без скидки. Как повлиять на значение итоговой суммы заказа, которое используется virtuemartом для записи в базу, отправки сообщений пользователю и тд?
Буду очень благодарен за подсказку.
Не очень разобрался, в каком именно файле происходит подсчет значений переменных заказа.
Если редактировать код в default_pricelist.php, при этом изменяя значение итоговой суммы заказа, то это повлияет только на вывод, и при оформлении заказа посчитается цена без скидки. Как повлиять на значение итоговой суммы заказа, которое используется virtuemartом для записи в базу, отправки сообщений пользователю и тд?
Буду очень благодарен за подсказку.
Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.
- Wedal
- Не в сети
- Администратор
Less
Больше
- Сообщений: 2868
- Спасибо получено: 659
9 года 3 нед. назад #7414
от Wedal
Wedal ответил в теме Наборы товаров в Virtuemart
Сережа, как вариант, можно исхитриться добавлять скидку на общую сумму. Но точного кода я вам не выдам. Нужно смотреть код корзины и пробовать.
Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.
- Сережа
- Автор темы
- Не в сети
- Новый участник
Less
Больше
- Сообщений: 4
- Спасибо получено: 0
9 года 3 нед. назад - 9 года 3 нед. назад #7415
от Сережа
Сережа ответил в теме Наборы товаров в Virtuemart
В общем разобрался, оказалось все просто
Есть в папке
/administrator/components/com_virtuemart/helpers
файлик calculationh.php, в котором есть функция getCheckoutPrices.
Там то и происходит обсчет корзины. Каждый раз когда пользователь в корзине меняет количество товара, например.
В этой же функции происходит подсчет всевозможных скидок и тп.
Код у функции читается легко и состоит в основном из циклов на перебор товаров в корзине и проверке условий всяческих скидок.
Поэтому управлять ценой там можно как душе угодно.
Итоговая стоимость всех товаров, находящихся в корзине, с примененными скидками хранятся в $this->_cartPrices.
Допустим, необходимо уменьшать итоговую стоимость всех товаров в случае, если в корзине присутствует товар с id = 99.
В цикл перебора товаров корзины, который начинается со строки
можно вставить простой код на проверку условия.
А потом перед заключительной строкой функции
можно написать что-то типо
Таким образом в случае обнаружения в корзине нужного товара можно уменьшать итоговую сумму товаров.
Точно так-же можно проверить наличие нескольких товаров в корзине и уменьшить итоговую сумму.
Минус этого подхода в том, что это хак ядра и при обновлении затрется, посему имеет смысл написать человеческий плагин.
Есть в папке
/administrator/components/com_virtuemart/helpers
файлик calculationh.php, в котором есть функция getCheckoutPrices.
Там то и происходит обсчет корзины. Каждый раз когда пользователь в корзине меняет количество товара, например.
В этой же функции происходит подсчет всевозможных скидок и тп.
Код у функции читается легко и состоит в основном из циклов на перебор товаров в корзине и проверке условий всяческих скидок.
Поэтому управлять ценой там можно как душе угодно.
Итоговая стоимость всех товаров, находящихся в корзине, с примененными скидками хранятся в $this->_cartPrices.
Допустим, необходимо уменьшать итоговую стоимость всех товаров в случае, если в корзине присутствует товар с id = 99.
В цикл перебора товаров корзины, который начинается со строки
Code:
foreach ($cart->products as $name => $product) {
Code:
if ($product->virtuemart_product_id==12)
$inCart=1;
Code:
return $this->_cartPrices;
Code:
if ($inCart==1)
$this->_cartPrices['billTotal'] = $this->_cartPrices['billTotal'] -100;
Таким образом в случае обнаружения в корзине нужного товара можно уменьшать итоговую сумму товаров.
Точно так-же можно проверить наличие нескольких товаров в корзине и уменьшить итоговую сумму.
Минус этого подхода в том, что это хак ядра и при обновлении затрется, посему имеет смысл написать человеческий плагин.
Последнее редактирование: 9 года 3 нед. назад пользователем Сережа.
Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.