Настраиваемые поля VirtueMart 2.0, не работает атрибут "равно" сумма (цена)

Настраиваемые поля VirtueMart 2.0, не работает атрибут "равно" сумма (цена)

Задача: в Виртумарте 2.0 в настраиваемых полях для корзины было выявлено, что знак = (равно), указывающий, что необходимо применить новую цену, не срабатывает, а вот знаки +\- (плюс\минус) работают, как и прежде, прибавляя или отнимая от базовой стоимости товара соответствующую сумму. Необходимо исправить этот недочет.


Решение:

1) Открыть скрипт: \administrator\components\com_virtuemart\helpers\calculationh.php

2) Перейти к: function getProductPrices
найти: $basePriceShopCurrency = $basePriceShopCurrency + doubleval($variant);

заменить на этот код:
$x=(!is_int($variant[0])) ? doubleval(substr($variant, 1)) : doubleval($variant);
if($variant[0]=='=') $basePriceShopCurrency = $x;
elseif($variant[0]=='-') $basePriceShopCurrency = $basePriceShopCurrency - $x;
elseif($variant[0]=='*') $basePriceShopCurrency = $basePriceShopCurrency * $x;
else $basePriceShopCurrency = $basePriceShopCurrency + $x;if($variant[0]!='=') $basePriceShopCurrency = $basePriceShopCurrency + doubleval($variant);
else $basePriceShopCurrency= doubleval(substr($variant, 1));

3) Перейти к: function calculateModificators
найти: $modificatorSum = $modificatorSum + $productCustomsPrice->custom_price;

заменить на:
if($productCustomsPrice->custom_price[0]=='=' || $productCustomsPrice->custom_price[0]=='*')
   $modificatorSum = $productCustomsPrice->custom_price[0].($modificatorSum + substr($productCustomsPrice->custom_price, 1)); 
else $modificatorSum = $modificatorSum + $productCustomsPrice->custom_price;

4) Открыть /administrator/components/com_virtuemart/models/customfields.php

найти строку $price = ($customPrice === '') ? '' : JText::_ ('COM_VIRTUEMART_CART_PRICE_FREE'); 

заменить на
$price = ($customPrice === '' || preg_match('#^[\+\-\*=]#', $customPrice)) ? '' : JText::_ ('COM_VIRTUEMART_CART_PRICE_FREE');

5) Выполнить SQL-запрос:
 ALTER TABLE `ПРЕФИКС-ДЖУМЛЫ_virtuemart_product_customfields` CHANGE `custom_price` `custom_price` VARCHAR( 20 ) NULL DEFAULT NULL COMMENT 'price'
;

 

И заоднем, исправим недочет при обновлении суммы, с учетом количества товара, передаваемую по AJAX.

1) Открыть скрипт: \components\com_virtuemart\controllers\productdetails.php
2) Перейти к: function recalculate(){
3) После строки: $prices = $product_model->getPrice($virtuemart_product_id,$customPrices,$quantity);
вставить это: $prices['salesPrice']*=$quantity; 

Изменения: 2013-08 -21

Комментарии

#1 Константин 2012-09-13 07:59:46
У меня рядом с ценой пишет Без доплаты. Поле "атрибут корзины" значение- вписано 116 (это рост) цена- вписано = 50. Основная сумма меняется, но в строке роста, рядом с 116 появляется фраза Без доплаты. Joomla 2.5; VM 2.0.10
#2 Отдел разработки сайтов 2012-09-13 10:12:51
Цитата Константин
У меня рядом с ценой пишет Без доплаты. Поле "атрибут корзины" значение- вписано 116 (это рост) цена- вписано = 50. Основная сумма меняется, но в строке роста, рядом с 116 появляется фраза Без доплаты. Joomla 2.5; VM 2.0.10


1) проверить, точно ли внесены все изменения, которые указаны в статье
2) = 50 нужно вписывать без пробела =50
3) это не тестировал, но попробуйте:
Открыть скрипт: \administrator\components\com_virtuemart\models\customfields.php
везде где найдете следующий код
} else {
$price = ($productCustom->custom_price === '') ? '' : $free;
}
перед ним добавить
} elseif($productCustom->custom_price[0]=="=") {
$price=strip_tags ($currency->priceDisplay( substr($productCustom->custom_price, 1) ));
#3 Артем 2012-12-06 10:10:24
Здравствуйте! К сожалению на версии Virtuemart 2.0.14 это не сработало. Возможно в прошлых версиях было по другому, но сейчас значения цены со знаком = вообще не сохраняются в базу. Тип этого поля в MySQL базе decimal(15,5) поэтому значению могут приниматься только стандартные или с минусом. Как вы обошли эту проблему? Спасибо!
#4 Артем 2012-12-06 10:28:05
Однако если вообще не интересуют правила прибавления или вычитания, а нужна постоянная цена из настраиваемых полей, то достаточно убрать только $basePriceShopCurrency из второго пункта и все будет работать.
#5 Артем 2012-12-06 10:34:15
Вот буду еще очень благодарен если подскажете как убрать + при выводе цены настраиваемого поля. Спасибо!
#6 Артем 2012-12-06 11:22:38
Разобрался с плюсом. В файле /administrator/components/com_virtuemart/models/customfields.php убираем строчку $price ="+".$price; на 969 строке.
#7 Отдел разработки сайтов 2012-12-06 11:30:23
Цитата Артем
но сейчас значения цены со знаком = вообще не сохраняются в базу. Тип этого поля в MySQL базе decimal(15,5) поэтому значению могут приниматься только стандартные или с минусом

В базу = (равно) не сохраняется, оно учитывается только на уровне кода, при расчете в функции getProductPrices.

Цитата Артем
то достаточно убрать только $basePriceShopCurrency из второго пункта и все будет работать.

Способ решения, конечно же, не один, главное чтоб работал.
#8 Артем 2012-12-06 11:52:47
Цитата Отдел разработки сайтов

В базу = (равно) не сохраняется, оно учитывается только на уровне кода, при расчете в функции getProductPrices.

Хм.. не совсем понимаю. Чтобы там не учитывалось при обработке кода, но в базу в результате записываются нули и значения не сохраняются и, соответственно впоследствии, выводится надпись "без наценки" (или что-то в этом роде, точно не помню текст) при выводе настраиваемых полей.
#9 Отдел разработки сайтов 2012-12-06 12:19:28
Цитата Артем
но в базу в результате записываются нули и значения не сохраняются

только сейчас глянул новую таблицу виртумарта virtuemart_product_customfields, поле custom_price decimal(15,5) - можно ведь обратно на char сменить..
#10 Артем 2012-12-06 12:30:26
Цитата Отдел разработки сайтов

только сейчас глянул новую таблицу виртумарта virtuemart_product_customfields, поле custom_price decimal(15,5) - можно ведь обратно на char сменить..

Да, я тоже думал об этом, но ничем это не чревато? В общем меня нынешняя ситуация устраивает, когда цена полностью заменяется, но если кому-то нужно, чтобы учитывались + - =, то этого тоже можно добиться покопавшись в коде. Тем более, что я встречал там обработчик знака %, который тоже в этих ячейках не может храниться, а значит и со знаком = решение есть. Спасибо вам за указанный путь!
#11 Отдел разработки сайтов 2012-12-06 15:05:12
Цитата Артем
Да, я тоже думал об этом, но ничем это не чревато?

В принципе, нет, но нужно все тестировать, поскольку в коде могут быть места, которые при запросе ожидают цифру, а вернется строка с доп. символом в начале.
#12 Лена 2012-12-20 21:33:26
Привет, спасибо за статью и комменты, но вот только я так и не поняла - существует рабочее решение проблемы с виртумартов 2.0.14, чтобы показывалась общая цена при оформлении заказа и считалась общая стоимость при увеличении количества товара?
#13 Отдел разработки сайтов 2012-12-20 22:55:29
Цитата Лена
существует рабочее решение проблемы с виртумартов 2.0.14, чтобы показывалась общая цена при оформлении заказа и считалась общая стоимость при увеличении количества товара?

Обновите виртумарт. Тут речь шла о другом недочете.
#14 Лена 2012-12-21 07:17:39
Цитата Отдел разработки сайтов

Обновите виртумарт. Тут речь шла о другом недочете.

Как я его обновлю, если это последняя версия? ;)
#15 Отдел разработки сайтов 2012-12-21 07:25:34
Цитата Лена
Как я его обновлю, если это последняя версия? ;)

Обновите до VM 2.0.16. Или мы можем исправить конкретную ошибку за плату, на данный момент, с подобной ошибкой ВМ, я не сталкивался, иначе бы ответил по решению.
#16 Сергей 2013-03-11 20:54:15
Спасибо за решение. Все сработало отлично после этих поправок. Но остался еще один маленький недочет. Не поможете? Допустим у меня 2 настраиваемых поля в одном товаре (Основная цена товара 10000 руб). Один с наценкой (указано как +500) другое фиксированная цена (указано как =12700) Если я выставляю второе поле, цена меняется правильно, но при установке первого (+500) эти 500 прибавляются к основной цене, а не к выбранной фиксированной цене. т.е. При выборе 2-х полей сразу цена должна быть 13200, а не 10500. Это можно как то исправить?
#17 Отдел разработки сайтов 2013-03-12 00:39:49
Цитата Сергей
При выборе 2-х полей сразу цена должна быть 13200, а не 10500. Это можно как то исправить?

Тут вам просто нужно определиться с вариантом написания цены в дополнительных полях, или вы применяете только фиксированную сумму (знак равно), либо относительную (знак плюс). Иначе на ровном месте возникает объем работ, смысл которого пока не пойму, и почему нельзя обойтись стандартным расчетом.
#18 Сергей 2013-03-12 17:18:18
Цитата Отдел разработки сайтов

и почему нельзя обойтись стандартным расчетом.

Поясню по-понятнее на примере. Карточка товара - Кровать. Одна и та же модель есть разных размеров по ширине, и с ящиком или нет. Первое настраиваемое поле - Ширина с фиксированной ценой. А второе настраиваемое поле - Ящик, если он есть, плюс какаято сумма к стоимости кровати. А стоимость будет зависить от выбранной ширины. А теперь в цифрах. Стоимость стандартной кровати шириной 80 стоит 5000руб - это основная цена в карточке товара. Внутри покупатель выбирает другую ширину через настраиваемое поле, допустим Ширина 120 - цена становится 7500 - это фиксированное значение настраиваемого поля. Затем покупатель может выбрать опцию брать ящик или нет, это уже +1500руб к выбранной ширине кровати. И таких примеров много, по крайней мере в моем магазине. Если поможете, буду признателен. В качестве алгоритма могу предложить следующее. Если поле установленно как '=сумма', то чтобы не менять алгоритм расчета всего виртумарта, эту сумму надо преобразовать как в 'разницу' между фикс. суммой и основной ценой. И дальше будет идти внутренний расчет как с наценкой.
#19 Отдел разработки сайтов 2013-03-12 18:22:02
Цитата Сергей
Поясню по-понятнее на примере. Карточка товара - Кровать.

Я предполагал примерную ситуацию, потому и написал, определитесь с одним из вариантов расчета.
Допустим, основная цена кровати: 5000
Ширина 100 = 6500: +1500
Ширина 120 = 7500: +2500
Ящик: +1500
Проблема возникает, если цена на ящик зависит от ширины кровати, но если разница не велика, то цену можно сделать фиксированной, 1500.
#20 Сергей 2013-03-12 21:25:37
Цитата Отдел разработки сайтов

Допустим, основная цена кровати: 5000
Ширина 100 = 6500: +1500
Ширина 120 = 7500: +2500
Ящик: +1500

При таком варианте:
Основная цена 5000
Ширина 100 = +1500
Ширина 120 = +2500
Ящик: +1500
все работает замечательно
А при таком варианте:
Основная цена 5000
Ширина 100 = 6500
Ширина 120 = 7500
Ящик: +1500
Наценка ящика добавляется только к основной цене, даже когда выбрана Ширина 120.
Хотелось бы чтобы при выборе Ширина 120 и ящик
было бы так: =7500+1500
А сейчас работает так: 5000+1500 игнорируя выбранное выше настраиваемое поле Ширина
#21 Отдел разработки сайтов 2013-03-12 22:51:10
Цитата Сергей
[quote name="Отдел разработки сайтов"]А сейчас работает так: 5000+1500 игнорируя выбранное выше настраиваемое поле Ширина

Тогда сделать все через равно (разные варианты цен в доп. полях, с ящиком и без):
Ширина 100: =6500
Ширина 100 + ящик: =8000
Ширина 120: =7500
Ширина 120 + ящик: =9000

дешево и стандартно все.
#22 cvoboda 2013-05-14 12:55:15
Всем привет, а возможно ли помимо сложения и вычитания добавить еще и умножение: т.е если поставить значения +100, -100, *100 цена бы менялась в зависимости от выбранного знака.?
#23 Отдел разработки сайтов 2013-05-15 08:11:22
Цитата cvoboda
а возможно ли помимо сложения и вычитания добавить еще и умножение: т.е если поставить значения +100, -100, *100 цена бы менялась в зависимости от выбранного знака.?


Попробуйте сделать это:

1) Открыть скрипт: \administrator\components\com_virtuemart\helpers\calculationh.php

2) Перейти к: function getProductPrices
найти: $basePriceShopCurrency = $basePriceShopCurrency + doubleval($variant);

заменить на этот код:

$x=(!is_int($variant[0])) ? doubleval(substr($variant, 1)) : doubleval($variant);

if($variant[0]=='=') $basePriceShopCurrency = $x;

elseif($variant[0]=='-') $basePriceShopCurrency = $basePriceShopCurrency - $x;

elseif($variant[0]=='*') $basePriceShopCurrency = $basePriceShopCurrency * $x;

else $basePriceShopCurrency = $basePriceShopCurrency + $x;

3) Перейти к: function calculateModificators
найти: $modificatorSum = $modificatorSum + $productCustomsPrice->custom_price;

заменить на:

if($productCustomsPrice->custom_price[0]=='=' || $productCustomsPrice->custom_price[0]=='*')
$modificatorSum = $productCustomsPrice->custom_price[0].($modificatorSum + substr($productCustomsPrice->custom_price, 1));

else $modificatorSum = $modificatorSum + $productCustomsPrice->custom_price;
#24 cvoboda 2013-05-15 12:25:18
Цитата Отдел разработки сайтов
Цитата cvoboda
а возможно ли помимо сложения и вычитания добавить еще и умножение: т.е если поставить значения +100, -100, *100 цена бы менялась в зависимости от выбранного знака.?


Попробуйте сделать это:

1) Открыть скрипт: \administrator\components\com_virtuemart\helpers\calculationh.php

2) Перейти к: function getProductPrices
найти: $basePriceShopCurrency = $basePriceShopCurrency + doubleval($variant);

заменить на этот код:

$x=(!is_int($variant[0])) ? doubleval(substr($variant, 1)) : doubleval($variant);

if($variant[0]=='=') $basePriceShopCurrency = $x;

elseif($variant[0]=='-') $basePriceShopCurrency = $basePriceShopCurrency - $x;

elseif($variant[0]=='*') $basePriceShopCurrency = $basePriceShopCurrency * $x;

else $basePriceShopCurrency = $basePriceShopCurrency + $x;

3) Перейти к: function calculateModificators
найти: $modificatorSum = $modificatorSum + $productCustomsPrice->custom_price;

заменить на:

if($productCustomsPrice->custom_price[0]=='=' || $productCustomsPrice->custom_price[0]=='*')
$modificatorSum = $productCustomsPrice->custom_price[0].($modificatorSum + substr($productCustomsPrice->custom_price, 1));

else $modificatorSum = $modificatorSum + $productCustomsPrice->custom_price;



Большое спасибо за помощь. Но почему то считает не совсем корректно:
Базовая цена, например 100 руб, если:
*25 = считает все правильно = 2500;
-25 = считает его как будто плюс = 125;
+25 = считает непонятно, прибавляет 5 = 105;
#25 cvoboda 2013-05-15 12:51:01
Путем экспериментов было обнаружено:
*умножение работает как надо;
- вычитание, работает как сложение;
+ сложение, складывает только те числа, которые идут с 2 цифры, т.е например

+5 - считать не будет
+59 - прибавит только 9
+596 - прибавит только 96, причем вместо первой цифры может быть любая цифра, кроме нуля, ноль не видит.
#26 Отдел разработки сайтов 2013-05-15 13:44:51
Цитата cvoboda
Путем экспериментов было обнаружено:
*умножение работает как надо;
- вычитание, работает как сложение;
+ сложение, складывает только те числа, которые идут с 2 цифры, т.е например


сделайте так:

$sign=substr($variant, 0, 1);
$x=(!is_numeric($sign)) ? doubleval(substr($variant, 1)) : doubleval($variant);

if($sign=='=') $basePriceShopCurrency = $x;

elseif($sign=='-') $basePriceShopCurrency = $basePriceShopCurrency - $x;

elseif($sign=='*') $basePriceShopCurrency = $basePriceShopCurrency * $x;

else $basePriceShopCurrency = $basePriceShopCurrency + $x;
#27 cvoboda 2013-05-15 14:07:55
Цитата Отдел разработки сайтов
Цитата cvoboda
Путем экспериментов было обнаружено:
*умножение работает как надо;
- вычитание, работает как сложение;
+ сложение, складывает только те числа, которые идут с 2 цифры, т.е например


сделайте так:

$sign=substr($variant, 0, 1);
$x=(!is_numeric($sign)) ? doubleval(substr($variant, 1)) : doubleval($variant);

if($sign=='=') $basePriceShopCurrency = $x;

elseif($sign=='-') $basePriceShopCurrency = $basePriceShopCurrency - $x;

elseif($sign=='*') $basePriceShopCurrency = $basePriceShopCurrency * $x;

else $basePriceShopCurrency = $basePriceShopCurrency + $x;


ОГРОМНОЕ СПАСИБО!! Все работает!!!!
Вы очень помогли!!!!
#28 cvoboda 2013-05-15 14:57:00
Но моя проблема все равно не решилась..

Ваш код считает правильно, но если к товару добавить два настраиваемого поля: атрибут корзины

первое - высота
350мм;
500мм;

второе - секции
1 секц
2секц
3секц
4секц

И настроить след образом:
Основная цена: 314 руб

500 мм: 0
350 мм : -14

1 секц : 0
2 секц :*2
3 секц: *3
4 секц: *4

Перемножает секции только если выбрать высоту 500мм, при выборе 300 мм - не перемножает...
#29 cvoboda 2013-05-15 14:58:24
*350 (опечатка)
#30 cvoboda 2013-05-15 15:00:58
http://ingenertepla.ru/radiators/aluminum-radiators/radiator-nami-classic-detail
#31 Отдел разработки сайтов 2013-05-15 15:27:04
Цитата cvoboda
http://ingenertepla.ru/radiators/aluminum-radiators/radiator-nami-classic-detail


я пишу не тестируя, тестируете вы, так что можете сами менять варианты кода и смотреть результат.

Перейти к: function calculateModificators
найти: $modificatorSum = $modificatorSum + $productCustomsPrice->custom_price;

заменить

$sign=substr($productCustomsPrice->custom_price[0], 0, 1);

if($sign=='=') $modificatorSum = $sign.($modificatorSum + substr($productCustomsPrice->custom_price, 1));

elseif($sign=='*') $modificatorSum = $sign.($modificatorSum * substr($productCustomsPrice->custom_price, 1));

else $modificatorSum = $modificatorSum + $productCustomsPrice->custom_price;
#32 cvoboda 2013-05-15 15:59:56
не умножает вообще(((
#33 Отдел разработки сайтов 2013-05-15 16:03:01
Цитата cvoboda
не умножает вообще(((

Ошибся в строке, исправьте
$sign=substr($productCustomsPrice->custom_price, 0, 1);

и эту можно заменить

elseif($sign=='*') $modificatorSum = $sign.(($modificatorSum>0) ? ($modificatorSum * substr($productCustomsPrice->custom_price, 1)) : substr($productCustomsPrice->custom_price, 1));
#34 cvoboda 2013-05-16 01:50:44
Не помогло, перемножает только одно из настраиваемых полей 500 мм, 350 не хочет...
#35 Отдел разработки сайтов 2013-05-16 08:14:27
Тут в живую нужно делать на вашем сайте, так сложно тестировать. Я всегда подсказываю, что знаю, но все работы, требующие индивидуального внимания и времени, у нас платные.
#36 cvoboda 2013-05-16 08:21:00
Цитата Отдел разработки сайтов
Тут в живую нужно делать на вашем сайте, так сложно тестировать. Я всегда подсказываю, что знаю, но все работы, требующие индивидуального внимания и времени, у нас платные.


Спасибо большое!! Вы и так очень помогли.
#37 Дмитрий 2013-06-04 18:53:37
Добрый день!
Не могли бы Вы подсказать, как исправить ошибку сортировки настраиваемых полей в админке (virtuemart 2.0.4). Созданные поля совсем не сортируются, ни по порядку, ни по ID?
#38 Отдел разработки сайтов 2013-06-05 12:19:42
Цитата Дмитрий
Не могли бы Вы подсказать, как исправить ошибку сортировки настраиваемых полей в админке (virtuemart 2.0.4). Созданные поля совсем не сортируются, ни по порядку, ни по ID?

Можно глянуть в виртумарте, Настройки - Настройки сортировки, стоят ли там галочки на доступных методах сортировки. А лучше, обновить виртумарт.
#39 Александр 2013-07-03 06:49:50
Добрый день!

Не могли бы помочь за умеренную плату с умножением в настраив. полях. Доступ к ftp предоставлю и оплату гарантирую.
#40 Александр 2013-07-03 06:51:32
Очень нужно!!!
#41 Отдел разработки сайтов 2013-07-03 07:40:19
Цитата Александр
Очень нужно!!!

Написал вам на почту, уточнить задачу.
#42 smesharic 2013-07-23 15:29:38
Сделал все как Вы написали, но не помогло.
Ооочень нужно это сделать.
Прошу Вашей помощи...
Отблагодарю материально, только помогите!!!!!!!!!!
#43 Отдел разработки сайтов 2013-07-23 15:45:56
Цитата smesharic
Сделал все как Вы написали, но не помогло.
Ооочень нужно это сделать.
Прошу Вашей помощи...
Отблагодарю материально, только помогите!!!!!!!!!!

Написал вам на почту.
#44 Ната 2013-08-06 04:38:56
Большое спасибо за статью. А не подскажите, почему у меня при изменении параметра настраиваемого поля (объема), не меняется отображение цены? http://edinorog.com.ua/zhirnie-volosi/terapevticheskiy-shampun-4.html заранее спасибо
#45 Энжел 2013-08-20 09:44:47
Помогите, пожалуйста, разобраться.
Когда у товара есть скидка и к размеру добавляется сума в настраиваемых полях (например +10$), то в корзине и в карточке товара эти 10$ плюсуються к скидке почему-то, а не к цене товара

Например: Цена: $20.00, скидка -2.50$, Размер 50 +10$

А выдает:

Цена: $20.00
Цена без скидки: $32.50
Скидка: $12.50
Размер 50 +10$

если скидку убираешь, то все нормально +10$ плюсуются к цене.
Заранее спасибо.
#46 Отдел разработки сайтов 2013-08-21 12:05:24
Цитата Энжел
Когда у товара есть скидка и к размеру добавляется сума в настраиваемых полях (например +10$), то в корзине и в карточке товара эти 10$ плюсуються к скидке почему-то, а не к цене товара

Сделайте скриншот страницы (в админке), где вы ставите скидку. И укажите версию виртумарта.
#47 Андрей 2013-08-21 13:07:37
Цитата Артем
Однако если вообще не интересуют правила прибавления или вычитания, а нужна постоянная цена из настраиваемых полей, то достаточно убрать только $basePriceShopCurrency из второго пункта и все будет работать.


Работать начинает только почему то первый символ он убирает. Например хочется цену 2630, а на сайте выводит 630
#48 Отдел разработки сайтов 2013-08-21 14:00:29
Цитата Андрей
Работать начинает только почему то первый символ он убирает. Например хочется цену 2630, а на сайте выводит 630

Посмотрите текст статьи, внес корректировки.
#49 Энжел 2013-08-21 16:49:41
Цитата Отдел разработки сайтов

Сделайте скриншот страницы (в админке), где вы ставите скидку. И укажите версию виртумарта.

вот скриншоты скаидки, настраев.полей, карточка товара
http://s019.radikal.ru/i643/1308/2d/17a17927c0f2.jpg
http://s002.radikal.ru/i197/1308/cf/b8667449639e.jpg
http://s005.radikal.ru/i212/1308/9f/2cfc592a1764.jpg

Установленная версия 2.0.18a
#50 Отдел разработки сайтов 2013-08-21 17:34:35
Цитата Энжел
Когда у товара есть скидка и к размеру добавляется сума в настраиваемых полях (например +10$), то в корзине и в карточке товара эти 10$ плюсуються к скидке почему-то, а не к цене товара


Цитата Энжел

http://s019.radikal.ru/i643/1308/2d/17a17927c0f2.jpg
http://s002.radikal.ru/i197/1308/cf/b8667449639e.jpg
http://s005.radikal.ru/i212/1308/9f/2cfc592a1764.jpg


Виртумарт рассчитывает верно, скидка, в данном случае, это новая цена на товар.
#51 Энжел 2013-08-21 18:47:33
Цитата Отдел разработки сайтов


Виртумарт рассчитывает верно, скидка, в данном случае, это новая цена на товар.


нет, вы не правы. Если цена 160, скидка 10 и наценка 10, то окончательная цена должна быть 160. А тут http://s005.radikal.ru/i212/1308/9f/2cfc592a1764.jpg , сами посмотрите- одна цена 150, другая 170, а скидка 10+10, вообще не понятно с какого перепугу
Даже если предположить, что перепутан перевод, то все-равно ни че не стыкуется.
Вот если без наценки за размер, то все верно получается
http://s001.radikal.ru/i194/1308/a8/92123da3ca74.jpg
#52 Энжел 2013-08-21 19:02:42
я первый раз ошиблась со скриншотом админки
вот этот товар
http://s018.radikal.ru/i521/1308/a5/4e5cbee310d6.jpg
#53 Отдел разработки сайтов 2013-08-21 19:14:06
Цитата Энжел
нет, вы не правы. Если цена 160, скидка 10 и наценка 10, то окончательная цена должна быть 160. А тут http://s005.radikal.ru/i212/1308/9f/2cfc592a1764.jpg , сами посмотрите- одна цена 150, другая 170, а скидка 10+10, вообще не понятно с какого перепугу

Такова логика виртумарта, обратите внимание на скрин http://s019.radikal.ru/i643/1308/2d/17a17927c0f2.jpg и надпись "Переписать окончательно", это и есть конечная (новая) цена товара. Скидка высчитывается как разница между "новой" ценой и суммой основной и дополнительной.

Например, если:
Основная цена: 160
Новая цена: 150
Дополнительная цена: 10
Тогда: 150-(160+10)=-20 (это и есть скидка)

Почему именно так, наверное, лучше узнать у разработчиков виртумарта.
#54 Энжел 2013-08-21 20:19:33
так подскажите как правильно настроить, ну ведь это ж ерунда какая-то, работают же магазины на виртуимарте как-то. Да, эта логика работает, все правильно. если наценки нет. Как же наценку настроить? я уже и с минусом пробовала и так и сяк..и наценку полной суммой, ни че не выходит. Где выход? Применить = как в этой статье описано? поможет?
#55 Отдел разработки сайтов 2013-08-21 20:42:41
Цитата Энжел
так подскажите как правильно настроить, ну ведь это ж ерунда какая-то, работают же магазины на виртуимарте как-то. Да, эта логика работает, все правильно. если наценки нет. Как же наценку настроить? я уже и с минусом пробовала и так и сяк..и наценку полной суммой, ни че не выходит. Где выход? Применить = как в этой статье описано? поможет?

Для этого есть специальный функционал:
Виртумарт > Товары > Налоги и правила расчета > Создать. Вид расчета: Наценка. Выбрать нужную операцию и выставить значение. Выбрать категорию. Опубликовать. Затем в карточке товара, напротив основной цены, выбрать только что созданную скидку\наценку.
#56 Энжел 2013-08-21 21:12:24
Это все понятно, но ведь там нужно указывать конкретное число наценки, в магазине 1200 товаров и у каждого может быть скидка от 1 до 500$. Не могу же я 500 наценок создать. Я уже и это пробовала, но тут тоже проблема вылезает. При наценке 10$ и за размер 10, в админ панели так и есть, а на сайте http://s019.radikal.ru/i642/1308/f4/5978975e6ad5.jpg
хотя сумма добавляется
#57 Энжел 2013-08-21 21:25:33
Цитата Энжел
http://s019.radikal.ru/i642/1308/f4/5978975e6ad5.jpg
хотя сумма добавляется

разобралась с этим, убирается галочка с Показать цены комбинации с налогом в Формирование цен. может кому пригодиться.
Спасибо за помощь, хоть поняла, что других вариантов нет кроме как наценку создавать, ни на одном форуме ни кто не ответил
#58 Игорь 2013-08-22 14:54:01
Добрый день. Подскажите пожалуйста, как можно реализовать перемножение между настраиваемыми полями?
Например, есть два поля А и Б. Есть базовая цена Х. Когда я выбираю значение поля А, оно умножает это значение на Х. Далее я выбираю значение поля Б, оно его тоже умножает на Х и в итоге выводит сумму перемноженных значений: (А*Х+Б*Х)
Так вот, можно ли, чтобы оно выводило не сумму, а произведение перемноженных значений: (А*Х*Б*Х) ?
#59 Отдел разработки сайтов 2013-08-23 12:53:14
Цитата Игорь
Подскажите пожалуйста, как можно реализовать перемножение между настраиваемыми полями?

Нет, с такой задачей не сталкивался, а значит, тут только платно возьмусь, и то чуть позже, поскольку, сейчас занят.
#60 niggatub 2014-03-20 15:36:15
Добрый вечер, сделал все по "чертежу", не отображает цену. Версия ВМ 2.0.22b. Достаточно варианта с "=". http://dc-pizza.ru/pizza/salyami.html - пример. Считает в корзине все верно. Впринципе и достаточно было бы, если бы цена динамически обновлялась, но слишком много всего наворочено и разбираться нет ни времени ни сил. Подскажите где копать? Достаточно чтобы отображалось "Целая 000р.", "Половина 111р."
#61 Отдел разработки сайтов 2014-03-20 16:13:59
Цитата niggatub
Считает в корзине все верно. Впринципе и достаточно было бы, если бы цена динамически обновлялась, но слишком много всего наворочено и разбираться нет ни времени ни сил. Подскажите где копать? Достаточно чтобы отображалось "Целая 000р.", "Половина 111р."

Желательно исправить ошибки в JavaScript, в Опере нажмите Ctrl+Shift+O (консоль ошибок). Возможно, из-за них не обновляется сумма.
#62 niggatub 2014-03-21 06:33:07
Цитата Отдел разработки сайтов
Цитата niggatub
Считает в корзине все верно. Впринципе и достаточно было бы, если бы цена динамически обновлялась, но слишком много всего наворочено и разбираться нет ни времени ни сил. Подскажите где копать? Достаточно чтобы отображалось "Целая 000р.", "Половина 111р."

Желательно исправить ошибки в JavaScript, в Опере нажмите Ctrl+Shift+O (консоль ошибок). Возможно, из-за них не обновляется сумма.

Хм.. а фаербаг ничего не показывает.. ща поставлю оперу гляну. Отпишусь.
#63 Polad 2014-03-24 19:50:34
У меня все работает.
Единственное, что при увеличении количества товара, не увеличивается сумма скидки.
К примеру,
товар = 2000 руб.
Скидка 10% = 200.
Цена со скидкой = 1800 руб.
Так вот, если я увеличиваю кол-во товаров до 2-х, то все значения обновляются корректно, кроме скидки. Она не увеличивается до 400.
Помогите решить багу..
#64 Отдел разработки сайтов 2014-03-24 20:25:52
Цитата Polad
Так вот, если я увеличиваю кол-во товаров до 2-х, то все значения обновляются корректно, кроме скидки. Она не увеличивается до 400.

После $prices['salesPrice']*=$quantity;
вставьте $prices['taxAmount']*=$quantity;
#65 Polad 2014-03-25 18:33:59
Цитата Отдел разработки сайтов
Цитата Polad
Так вот, если я увеличиваю кол-во товаров до 2-х, то все значения обновляются корректно, кроме скидки. Она не увеличивается до 400.

После $prices['salesPrice']*=$quantity;
вставьте $prices['taxAmount']*=$quantity;

Все равно скидка не увеличивается. Может, я не правильно описал то, что мне нужно.
Товар: = 1000 руб., скидка 10%. В итоге в карточке товара получаю:
Старая цена = 1000 руб.
Цена со скидкой = 800 руб.
Скидка = 200 руб.

Так вот при увеличении кол-ва товара, к примеру до двух:
Старая цена = 2000 руб.
Цена со скидкой = 1600 рцб.
Скидка = 200 руб. - а должно быть 400 руб.
#66 Polad 2014-03-25 18:35:03
Цитата Polad
Цитата Отдел разработки сайтов
Цитата Polad
Так вот, если я увеличиваю кол-во товаров до 2-х, то все значения обновляются корректно, кроме скидки. Она не увеличивается до 400.

После $prices['salesPrice']*=$quantity;
вставьте $prices['taxAmount']*=$quantity;

Все равно скидка не увеличивается. Может, я не правильно описал то, что мне нужно.
Товар: = 1000 руб., скидка 10%. В итоге в карточке товара получаю:
Старая цена = 1000 руб.
Цена со скидкой = 800 руб.
Скидка = 200 руб.

Так вот при увеличении кол-ва товара, к примеру до двух:
Старая цена = 2000 руб.
Цена со скидкой = 1600 рцб.
Скидка = 200 руб. - а должно быть 400 руб.


Ошибся, скидка 20%!
#67 Отдел разработки сайтов 2014-03-25 18:59:20
Цитата Polad
Все равно скидка не увеличивается. Может, я не правильно описал то, что мне нужно.
Товар: = 1000 руб., скидка 10%. В итоге в карточке товара получаю:
Старая цена = 1000 руб.
Цена со скидкой = 800 руб.
Скидка = 200 руб.

Так вот при увеличении кол-ва товара, к примеру до двух:
Старая цена = 2000 руб.
Цена со скидкой = 1600 рцб.
Скидка = 200 руб. - а должно быть 400 руб.


Попробуйте так: $prices['discountAmount']*=$quantity;
#68 Polad 2014-03-25 19:05:38
Цитата Отдел разработки сайтов
Цитата Polad
Все равно скидка не увеличивается. Может, я не правильно описал то, что мне нужно.
Товар: = 1000 руб., скидка 10%. В итоге в карточке товара получаю:
Старая цена = 1000 руб.
Цена со скидкой = 800 руб.
Скидка = 200 руб.

Так вот при увеличении кол-ва товара, к примеру до двух:
Старая цена = 2000 руб.
Цена со скидкой = 1600 рцб.
Скидка = 200 руб. - а должно быть 400 руб.


Попробуйте так: $prices['discountAmount']*=$quantity;


Спасибо! Работает!
Вот только старая цена правда не обновляется.
#69 Отдел разработки сайтов 2014-03-25 19:24:58
Цитата Polad
Вот только старая цена правда не обновляется.

Попробуйте это:
$prices['priceWithoutTax']*=$quantity;
#70 Polad 2014-03-25 19:57:40
Цитата Отдел разработки сайтов
Цитата Polad
Вот только старая цена правда не обновляется.

Попробуйте это:
$prices['priceWithoutTax']*=$quantity;

Все равно старая цена не изменяется.
Старая цена у меня выводится через "Цена с НДС, но без скидки", я просто переименовал.
#71 Отдел разработки сайтов 2014-03-25 20:17:52
Цитата Polad
Все равно старая цена не изменяется. Старая цена у меня выводится через "Цена с НДС, но без скидки", я просто переименовал.


Вот ключи с которыми можно поэкспериментировать.
$prices['ключ']*=$quantity;

array (
'costPrice' => '2000.00000',
'basePrice' => 2000,
'basePriceVariant' => 2000,
'basePriceWithTax' => 0,
'discountedPriceWithoutTax' => 0,
'priceBeforeTax' => 2000,
'salesPrice' => 3600,
'taxAmount' => 0,
'salesPriceWithDiscount' => 0,
'salesPriceTemp' => 2000,
'unitPrice' => 0,
'discountAmount' => 400,
'priceWithoutTax' => 2000,
'variantModification' => 0,
);
#72 Polad 2014-03-25 20:17:56
Цитата Polad
Цитата Отдел разработки сайтов
Цитата Polad
Вот только старая цена правда не обновляется.

Попробуйте это:
$prices['priceWithoutTax']*=$quantity;

Все равно старая цена не изменяется.
Старая цена у меня выводится через "Цена с НДС, но без скидки", я просто переименовал.


Все работает, нужно указать:
$prices['basePriceWithTax']*=$quantity;

Спасибо, за помощь!!!!
#73 Дмитрий 2014-04-07 07:26:53
Здравствуйте!

Все работает отлично! Спасибо!

Но есть одна проблема, теперь он не пересчитывает курс валют на дополнительные цены

Пожалуйста, подскажите как это исправить?

Спасибо!
#74 Дмитрий 2014-04-07 07:42:23
И еще, virtuemart думает что цена в дополнительном поле - 0 если перед ценой стоит знак =
#75 Отдел разработки сайтов 2014-04-08 13:09:19
Цитата Дмитрий
Но есть одна проблема, теперь он не пересчитывает курс валют на дополнительные цены!

Цитата Дмитрий
И еще, virtuemart думает что цена в дополнительном поле - 0 если перед ценой стоит знак =


К сожалению, про курс валют ничего подсказать не могу, нужно наживую смотреть. Тоже самое со знаком равно, возможно, в новой версии что-то изменилось, добавился промежуточный этап расчета. В силу загруженности, всегда подсказываю то, что уже знаю, остальное платно.
#76 Екатерина 2014-04-21 10:17:42
Здравствуйте. Помогите с умножением разобраться. За деньги конечно.
#77 Отдел разработки сайтов 2014-04-21 18:23:02
Цитата Екатерина
Помогите с умножением разобраться. За деньги конечно.

Уточните в чем загвоздка у вас, там уже посмотрю, может что-то подскажу.
#78 Саша 2014-05-25 18:23:16
Спасибо большое!
Уже собирался писать о своем решении, как наткнулся на ваше.
Если сделать все правильно - отлично работает!
#79 Евгений 2014-06-24 12:39:22
Всем добрый день! Ребят помогите! Всю голову сломал. У меня такая ситуация: после обновления до версии 2.6.6 при переходе в карточку товара цена отображается неверно, она увеличивается на 50% почему-то! Хотя на странице категории все отображается верно. В чем может быть проблема? Вот страница http://mini.co.ua/philipp-plein.html Нажмите на любой товар и увидите изменение цены. У меня установлен jqery easy но чего-то он не помогает! Капец!
#80 Отдел разработки сайтов 2014-06-25 11:59:08
Цитата Евгений
Нажмите на любой товар и увидите изменение цены.

Возможно, вы уже исправили, но сейчас все нормально. И без необходимости не обновляйте виртумарт, что-нибудь да слетает.
#81 zoom 2014-10-08 09:05:29
#82 Дмитрий 2014-11-18 12:13:03
Добрый день. Спасибо вам за отличное решение. Подскажите пожалуйста. Я все сделал по описанным выше пунктам. На данный момент в карте товара показывает Значение Настраиваемого поля, а цену соответствующую ему не показывает. Что необходимо сделать что бы отображалась цена? Заранее спасибо.
#83 Отдел разработки сайтов 2014-11-19 11:58:56
Цитата Дмитрий
На данный момент в карте товара показывает Значение Настраиваемого поля, а цену соответствующую ему не показывает. Что необходимо сделать что бы отображалась цена?

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

Специалист по видео

8 (929) 264 1523 (Константин)

cashara@bk.ru

Специалист по фото

8 (929) 261 3062 (Дмитрий)

Мультимедиа-студия «Два в кубе» © 2011 - 2015