0 Пользователей и 1 Гость просматривают эту тему.
  • 22 Ответов
  • 3507 Просмотров
*

cvoboda

  • Осваиваюсь на форуме
  • 20
  • 0 / 0
Всем привет!
Возможно ли в настраиваемых полях (атрибут корзины) помимо сложения добавить умножение, чтобы свойства товара умножались когда ставишь знак * от начальной цены товара?
Я так понимаю за это отвечает calculationh.php В строке 304 можно заменить в $basePriceShopCurrency = $basePriceShopCurrency + doubleval($variant); + на *, но тогда свойства будут просто умножаться, а как сделать, чтобы когда надо складывались, т.е например пишешь +100 либо *100...

Кто нибудь заморачивался?
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Можно попробовать это:
Код
$basePriceShopCurrency = (substr($variant,0,1)=='+')?($basePriceShopCurrency + doubleval($variant)):($basePriceShopCurrency * doubleval($variant));
« Последнее редактирование: 13.05.2013, 21:57:53 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

cvoboda

  • Осваиваюсь на форуме
  • 20
  • 0 / 0
Большое спасибо, но не работает.

Если заменить код $basePriceShopCurrency = $basePriceShopCurrency + doubleval($variant); на Ваш, то значения в настраиваемых полях только умножаются, т.е если поставить просто значение, например "2" или "+2" , то умножается на "2", а если поставить "-2" то умножается на 2 и ставится знак минуса перед значением. Если поставить *2, то ничего не происходит...
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
А к какому типу переменных относятся $variant и $basePriceShopCurrency? Как я понял, они записаны в БД? Если структура поля - numeric, а вы пытаетесь записать туда string (а *2 является string), то вызываете ошибку и ничего не будет происходить.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Код: php-brief
<?php
$a='20';
$b=5;
echo ($a*$b);//100
?>
robert для вас :o
Код: php-brief
<?php
$a=5;
$b='*20';
eval ("\$c =$a$b;");
echo $c;//100
?>
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
robert для вас :o
Спасибо, Федор! Очередной урок от вас  ^-^.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

cvoboda

  • Осваиваюсь на форуме
  • 20
  • 0 / 0
А к какому типу переменных относятся $variant и $basePriceShopCurrency? Как я понял, они записаны в БД? Если структура поля - numeric, а вы пытаетесь записать туда string (а *2 является string), то вызываете ошибку и ничего не будет происходить.
Возможно ли в коде дописать возможность умножения или нет? Ведь работает же функция "+" и "-".
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Fedor Vlasenko же наглядно показал примеры, вы могли бы уже сами найти ответ.
Код
if(substr($variant,0,1)!=='*'){
$basePriceShopCurrency=$basePriceShopCurrency + doubleval($variant);
}else{
eval("\$basePriceShopCurrency=$basePriceShopCurrency$variant;");
}
Имейте в виду: подразумеваем, что $variant - это та переменная, которая будет иметь префикс "*" или "+".
« Последнее редактирование: 15.05.2013, 09:42:41 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
так одной строчки хватит
Код: php-brief
eval("\$basePriceShopCurrency=$basePriceShopCurrency$variant;");
будет обрабатывать строки + - * / и т. д. (Будет выполнять код)
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
так одной строчки хватит
Ну конечно же.
Я думал, что это на случай, когда человек кроме "+ - * /" вдруг что-нибудь еще напишет. Но оказалось, что никакой разницы нет.

P.S. Хотя
Код
<?php
$a=5;
$b='20';
eval ("\$c =$a$b;");
echo $c;//520
?>
« Последнее редактирование: 15.05.2013, 12:09:39 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

cvoboda

  • Осваиваюсь на форуме
  • 20
  • 0 / 0
Большое спасибо, но моих тупых мозгов не хватает понять что менять на что...

у меня в коде след:

               
Код
if (!empty($variant)) {
 
                $basePriceShopCurrency=$basePriceShopCurrency + doubleval($variant);
       
$prices['basePrice'] = $prices['basePriceVariant'] = $basePriceShopCurrency;


Как подключить ваш код, в php мягко говоря слабоват...
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Код: php-brief
if (!empty($variant)) {		  
                eval("\$basePriceShopCurrency=$basePriceShopCurrency$variant;");
$prices['basePrice'] = $prices['basePriceVariant'] = $basePriceShopCurrency;
только везде надо писать +число или -число или *число
*

cvoboda

  • Осваиваюсь на форуме
  • 20
  • 0 / 0
Код: php-brief
if (!empty($variant)) {		  
                eval("\$basePriceShopCurrency=$basePriceShopCurrency$variant;");
$prices['basePrice'] = $prices['basePriceVariant'] = $basePriceShopCurrency;
только везде надо писать +число или -число или *число


К сожалению, не перемножает(((
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
К сожалению, не перемножает(((
Что именно не перемножает? Пошагово объясните, что вы сделали.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

cvoboda

  • Осваиваюсь на форуме
  • 20
  • 0 / 0
Что именно не перемножает? Пошагово объясните, что вы сделали.

Создал два настр поля атрибут корзины для товара

первое, высота: 350мм;500мм;
второе, кол-во секций: 1 секц; 2секц;

Основная стоимость, например 300 руб

первое поле:
500 мм : 0
350 мм : -14

второе:
1секц : 0;
2секц : *2

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

Придется скорее всего объединять эти два значения, например
350мм - 1 секц
350мм - 2 секц
500мм - 1 секц
500мм - 2 секц

Слишком длиный список получается, чего мне не хотелось, думал, что добавить функцию умножение не сложно.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
А если
Код
первое поле:
500 мм : 0
350 мм : *14
? Так работает?
Не будь паразитом, сделай что-нибудь самостоятельно!
*

cvoboda

  • Осваиваюсь на форуме
  • 20
  • 0 / 0
А если
Код
первое поле:
500 мм : 0
350 мм : *14
? Так работает?

Нет, к сожалению...
*

Kumigy

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
Ребята, а как победить то, что при сохранении товара все знаки поля удаляются кроме плюса?
если я пишу *100 или /100 у меня после сохранения там 0,0000
*

Kumigy

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
в общем победил я этот недуг, в базе данных нашёл таблицу j25_virtuemart_product_customfields и сменил тип custom_price на варчар.
добавил небольшое условие:
Код
			if(!empty($matches)){
eval("\$basePriceShopCurrency=$basePriceShopCurrency$variant;");
$this->productPrices['basePrice'] = $this->productPrices['basePriceVariant'] = $basePriceShopCurrency;
}else{
$basePriceShopCurrency = $basePriceShopCurrency + doubleval($variant);
$this->productPrices['basePrice'] = $this->productPrices['basePriceVariant'] = $basePriceShopCurrency;
}

это что бы если знак не указан, сложение выполнялось по умолчанию.
в программировании не силён, так что камнями не закидывайте)))
*

NIKOLY

  • Захожу иногда
  • 81
  • 1 / 0
Здравствуйте! А для VM 3  с вопросом перемножения атрибута корзины никто не сталкивался? Может быть есть у кого решения, тоже давно ищу.
*

NIKOLY

  • Захожу иногда
  • 81
  • 1 / 0
Может кто данный вопрос решить на платной основе? Спасибо!
*

AlexB

  • Завсегдатай
  • 1973
  • 54 / 2
*

NIKOLY

  • Захожу иногда
  • 81
  • 1 / 0
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Отображение полей CF в карточке товара

Автор farmer66

Ответов: 2
Просмотров: 1100
Последний ответ 17.02.2023, 13:39:18
от farmer66
Вывод изображений настраиваемого поля в карточке товара

Автор wasssup

Ответов: 0
Просмотров: 1234
Последний ответ 05.07.2022, 08:51:19
от wasssup
Проблема с отображением атрибута корзины в письме

Автор korets77

Ответов: 0
Просмотров: 1351
Последний ответ 22.09.2020, 22:42:58
от korets77
Как удалить дочерние товары в карточке товара VM 2?

Автор zeus07

Ответов: 0
Просмотров: 826
Последний ответ 12.05.2020, 14:51:39
от zeus07
[Решено] Вывод других товаров тойже категории в карточке товара

Автор x-render

Ответов: 30
Просмотров: 7853
Последний ответ 06.01.2020, 07:39:31
от Igoritaly