Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

[Поддержка] Обновление цены при выборе опции, без AJAX - HYPER Dynamic price of options OC 2


Recommended Posts

На всякий случай уточняю, ОС1.5.6.Х версия модуля v2.0.17

 

Надо просто в модуле это:

    <operation error="skip">
      <search position="replace"><![CDATA[(<?php echo $option_value['price_prefix']; ?><?php echo $option_value['price']; ?>)]]></search>
      <add><![CDATA[
        <?php
          if ($option_value['price_prefix'] == '*') {
            if ($option_value['price_value'] != 1.0)
              printf("(%+d%%)", round(($option_value['price_value'] * 100) - 100) );
          } else {
            echo "(".$option_value['price_prefix'].$option_value['price'].")"; 
          }
        ?>
      ]]></add>
    </operation>

Заменить на это:

    <operation error="skip">
      <search position="replace"><![CDATA[(<?php echo $option_value['price_prefix']; ?><?php echo $option_value['price']; ?>)]]></search>
      <add><![CDATA[]]></add>
    </operation>

Это может показаться странным, но в модуле этот кусок называется чуть-чуть по другому:

 <operation>
      <search position="replace"><![CDATA[(<?php echo $option_value['price_prefix']; ?><?php echo $option_value['price']; ?>)]]></search>
	  <add>
        <![CDATA[
          <?php
          if ($option_value['price_prefix'] == '*') {
            if ($option_value['price_value'] != 1.0)
              printf("(%+d%%)", round(($option_value['price_value'] * 100) - 100) );
          } else {
            echo "(".$option_value['price_prefix'].$option_value['price'].")"; 
          }
          ?>
        ]]>
      </add>
    </operation>

И если убрать

<add>
        <![CDATA[
          <?php
          if ($option_value['price_prefix'] == '*') {
            if ($option_value['price_value'] != 1.0)
              printf("(%+d%%)", round(($option_value['price_value'] * 100) - 100) );
          } else {
            echo "(".$option_value['price_prefix'].$option_value['price'].")"; 
          }
          ?>
        ]]>
      </add>

То выдает ошибку

Catchable fatal error: Argument 1 passed to VQNode::__construct() must be an instance of DOMNode, null given, called in /home/u887193419/public_html/vqmod/vqmod.php on line 731 and defined in /home/u887193419/public_html/vqmod/vqmod.php on line 781
Надіслати
Поділитися на інших сайтах


Все оказалось проще некуда, если не нужен плюсик или минусик, удаляйте это

<?php echo $option_value['price_prefix']; ?>

в ваша тема/template/product/product.tpl вот в этой строке

(<?php echo $option_value['price_prefix']; ?><?php echo $option_value['price']; ?>)

а если вообще в скобках ничего не надо, то у удалите эти строки у каждой опции

Змінено користувачем MFX
Надіслати
Поділитися на інших сайтах


Это удалять целиком нельзя:

<add>
        <![CDATA[
          <?php
          if ($option_value['price_prefix'] == '*') {
            if ($option_value['price_value'] != 1.0)
              printf("(%+d%%)", round(($option_value['price_value'] * 100) - 100) );
          } else {
            echo "(".$option_value['price_prefix'].$option_value['price'].")"; 
          }
          ?>
        ]]>
      </add>

Надо заменить на:

<add><![CDATA[]]></add>

Тэги add должны быть сохранены. Это синтаксис vqmod.

Надіслати
Поділитися на інших сайтах

Добрый день.
Та же проблема, как и у многих - не прибавляет цену при увеличении кол-ва товара.
Перелопатил весь форум, понял, что где-то конфликт (ни один из методов решения не помог). А где хз... )

http://fitness-baby.com/index.php?route=product/product&path=72_105&product_id=628 

 

В логе ошибок нету. 
 

Буду благодарен, если носом ткнете ) 

Надіслати
Поділитися на інших сайтах


Добрый день.

Та же проблема, как и у многих - не прибавляет цену при увеличении кол-ва товара.

Перелопатил весь форум, понял, что где-то конфликт (ни один из методов решения не помог). А где хз... )

В модуле найдите строки:

    // Раскомментировать, если нужен вывод цены с умножением на количество
    //main_price *= input_quantity;
    //special *= input_quantity;
    //tax *= input_quantity;

И замените на:

    // Раскомментировать, если нужен вывод цены с умножением на количество
    main_price *= input_quantity;
    special *= input_quantity;
    tax *= input_quantity;
Змінено користувачем mpn2005
  • +1 1
Надіслати
Поділитися на інших сайтах

ocStore 1.5.5.1.2

 

У меня цена формируется за счет опций, то есть основная цена установлена 0,00, а опция (radio) с префиксом =.

Подскажите, как сделать, чтобы при первом посещении страницы товара, отображаемая цена была не 0,00, а подтягивалась минимальная цена опции radio, при этом radio не должен быть активирован по-умолчанию?

После того, как пользователь выберет нужный вариант, главная цена изменяется на значение выбранной опции.

 

post-689172-0-85972500-1466065444_thumb.jpg

 

Спасибо.

 

 

Змінено користувачем LuckyPerson
Надіслати
Поділитися на інших сайтах


ocStore 1.5.5.1.2

 

У меня цена формируется за счет опций, то есть основная цена установлена 0,00, а опция (radio) с префиксом =.

Подскажите, как сделать, чтобы при первом посещении страницы товара, отображаемая цена была не 0,00, а подтягивалась минимальная цена опции radio, при этом radio не должен быть активирован по-умолчанию?

После того, как пользователь выберет нужный вариант, главная цена изменяется на значение выбранной опции.

 

 

Спасибо.

Самым правильным способом будет в цену товара вбить минимальнуое значение цены.

При выборе опции эта цена будет заменена опцией. И визуально будет всё как описано.

Надіслати
Поділитися на інших сайтах

У меня на 2.1.0.2 (тема дефолтная) почему-то связка autocalc 3.0.2 + options_price_oc2 работает не корректно, проценты просто прибавляет/отнимает (+10% = +10р), деление вообще не считает, умножение работает корректно, но показывает разницу в процентах.  А в корзину при этом падает правильная цена.

Пример.

Змінено користувачем vadim165
Надіслати
Поділитися на інших сайтах


У меня на 2.1.0.2 (тема дефолтная) почему-то связка autocalc 3.0.2 + options_price_oc2 работает не корректно, проценты просто прибавляет/отнимает (+10% = +10р), деление вообще не считает, умножение работает корректно, но показывает разницу в процентах.  А в корзину при этом падает правильная цена.

Пример.

До вас ещё никто не использовал эти модификаторы на ОС2. :-)

 

Обновление:

  • v3.0.4 (16.06.2016) - Добавлена поддержка модификатора '/'. (Обновлён модуль options_price_v1.0.10_OC2.ocmod.xml)
Обновите модули:

autocalc_price_option_OC2_v3.0.4.ocmod.xml

options_price_v1.0.10_OC2.ocmod.xml

 

 

Проверьте пожалуйста, и сообщите результат.

Надіслати
Поділитися на інших сайтах

Поставил туда же, первое впечатление, что все ок. Большое спасибо за столь оперативную реакцию, не часто встретишь. :)

Змінено користувачем vadim165
Надіслати
Поділитися на інших сайтах


Самым правильным способом будет в цену товара вбить минимальное значение цены.

При выборе опции эта цена будет заменена опцией. И визуально будет всё как описано.

Да, так и делаю сейчас.

Но столкнулся с неудобством, когда цена меняется часто. Приходится не только в опциях менять, но и основную цену править.

Надіслати
Поділитися на інших сайтах


ocStore 1.5.5.1.2

 

Тоже столкнулся, что проценты неправильно пересчитываются. В корзину добавляется корректное значение, а автообновление неправильно выводит.

Всему виной атрибут price_prefix, который указан + или - (вместо u или d). - см. прикрепленное изображение.

post-689172-0-86669300-1466174223_thumb.jpg

Соответственно выполняется первое или второе условие, вместо третьего:

    $('.option input:checked,option:selected').each(function() {
      if ($(this).attr('price_prefix') == '+') {
        option_price += Number($(this).attr('price'));
      }
      if ($(this).attr('price_prefix') == '-') {
        option_price -= Number($(this).attr('price'));
      }
      if ($(this).attr('price_prefix') == 'u') {
        pcnt = 1.0 + (Number($(this).attr('price')) / 100.0);
        option_price *= pcnt;
        main_price *= pcnt;
        special *= pcnt;
      }
      if ($(this).attr('price_prefix') == '*') {
        option_price *= Number($(this).attr('price'));
        main_price *= Number($(this).attr('price'));
        special *= Number($(this).attr('price'));
      }
    });


Змінено користувачем LuckyPerson
Надіслати
Поділитися на інших сайтах


Решение:

 

1. в файле autocalc_price_option_v2.0.19.xml найти код:

<?php
if ($option_value['price_prefix'] == '*') {
if ($option_value['price_value'] != 1.0)
printf("(%+d%%)", round(($option_value['price_value'] * 100) - 100) );
} else {
echo "(".$option_value['price_prefix'].$option_value['price'].")";
}
?>

и заменить на:

<?php
if ($option_value['price_prefix'] == '*') {
if ($option_value['price_value'] != 1.0)
printf("(%+d%%)", round(($option_value['price_value'] * 100) - 100) );
} else if ($option_value['price_prefix'] == 'u') {
     echo "(+".$option_value['price'].")";
} else if ($option_value['price_prefix'] == 'd') {
     echo "(-".$option_value['price'].")";
} else {
     echo "(".$option_value['price_prefix'].$option_value['price'].")";
}
?>

2. в файле options_price_1_5_3_1-2_0_1_fixed.xml найти код:

if ($option_value['price_prefix']=="u") {
   $price = $this->tax->calculate($option_value['price'], $product_info['tax_class_id'], $this->config->get('config_tax')) .'%';
   $option_value['price_prefix'] = '+';
}
elseif ($option_value['price_prefix']=="d") {
   $price = $this->tax->calculate($option_value['price'], $product_info['tax_class_id'], $this->config->get('config_tax')) .'%';
   $option_value['price_prefix'] = '-';
}

и заменить на:

if ($option_value['price_prefix']=="u") {
   $price = $this->tax->calculate($option_value['price'], $product_info['tax_class_id'], $this->config->get('config_tax')) .'%';
   /*если нужно оставить только 2 символа после точки, то предыдущую строку меняем на
   $price = substr(($this->tax->calculate($option_value['price'], $product_info['tax_class_id'], $this->config->get('config_tax'))),0,-2) .'%';
   */
}
elseif ($option_value['price_prefix']=="d") {
   $price = $this->tax->calculate($option_value['price'], $product_info['tax_class_id'], $this->config->get('config_tax')) .'%';
   /*если нужно оставить только 2 символа после точки, то предыдущую строку меняем на
   $price = substr(($this->tax->calculate($option_value['price'], $product_info['tax_class_id'], $this->config->get('config_tax'))),0,-2) .'%';
   */
}

post-689172-0-25803100-1466207657_thumb.jpg

Змінено користувачем LuckyPerson
Надіслати
Поділитися на інших сайтах


До вас ещё никто не использовал эти модификаторы на ОС2. :-)

 

Добрый день.

Нужна помощь в настройке вашего модуля. Как сделать, чтобы он работал в обратном режиме? Т.е. при изменении одной опции (в нашем случае Литер), чтобы менялись остальные 5 опций.

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

 

Помогите разобраться.

Надіслати
Поділитися на інших сайтах


Добрый день.

Нужна помощь в настройке вашего модуля. Как сделать, чтобы он работал в обратном режиме? Т.е. при изменении одной опции (в нашем случае Литер), чтобы менялись остальные 5 опций.

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

 

Помогите разобраться.

Добрый день.

 

Скиньте в личку ссылку на текущую реализацию товара.

Пока по описанию не совсем понятно, что требуется.

Надіслати
Поділитися на інших сайтах

я  что-то совсем запутался. на одном сайте работает, на втором нет. версия 2.1 и тема одинаковая (не дефолт). ставил autocalc_price_option_OC2_v3.0.4.ocmod

После установки в модификаторах нажали кнопку обновить?

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

Надіслати
Поділитися на інших сайтах

Модуль отлично работает на ocStore 2.1 

Возникла надобность в выводе одновременно обновленной цены и цены без учета опций. Есть ли такая возможность в модуле или как это можно реализовать?

Надіслати
Поділитися на інших сайтах


Модуль отлично работает на ocStore 2.1 

Возникла надобность в выводе одновременно обновленной цены и цены без учета опций. Есть ли такая возможность в модуле или как это можно реализовать?

Это можно сделать приблизительно так.

В модуле строку:

$('.autocalc-product-price').html( price_format(main_price_start) );

Заменить на:

$('.autocalc-product-price').html( '<?php echo $price; ?> (Итого: ' + price_format(main_price_start) + ')' );

Для акционной цены строку:

$('.autocalc-product-special').html( price_format(special_price_start) );

Заменить на:

$('.autocalc-product-special').html( '<?php echo $special; ?> (Итого: ' + price_format(special_price_start) + ')' );
Змінено користувачем mpn2005
Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.