Дробные числа товара VirtueMart 2.6.16 (Решено)

8 года 8 мес. назад - 8 года 8 мес. назад #7209 от Роман
Итак, в Virtuemart 2.6 как я сразу понял нельзя покупать товар в таких величинах как 0.1 или 2.5
Но у меня интернет магазин продуктов питания... и там очень нужна такая вещь.

Я нашел как это исправить но вот только в корзине при заказе нельзя заказать если товара меньше 1 выскакивает ошибка

"info
Пожалуйста, введите количество этого товара."

стоит компонент OnePage Checkout, но думаю дело в cart.php

Я его весь уже изнасиловал.... а решения не найти :(

Прошу помощи добрые форумчане

И еще если кто знает как задать шаг для таких весовых товаров в 0.1 например!?

З.Ы. Может кому пригодится.

В базе данных меняем типы полей с int на float

_virtuemart_products поле product_in_stock
_virtuemart_order_items поле product_quantity

Для того, чтобы при обновлении количества в самой корзине не отбрасывалась дробная часть, в файле \components\com_virtuemart\helpers\cart.php
строку
$quantity = JRequest::getInt('quantity');

меняем на
$quantity = JRequest::getFloat('quantity');

Для того чтобы товар меньше 1 добавлялся в корзину меняем LIMIT с 1 на 0.1 в cart.php
public function getCardCategoryId($virtuemart_product_id) {
      $db = JFactory::getDBO();
      $q = 'SELECT `virtuemart_category_id` FROM `#__virtuemart_product_categories` WHERE `virtuemart_product_id` = ' . (int) $virtuemart_product_id . ' LIMIT 0,1';
      $db->setQuery($q);
      return $db->loadResult();
   }

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

8 года 8 мес. назад #7211 от Wedal
Роман, действуйте так:
1) Найдите через переопределение констант Joomla или поиском по файлам, в какой языковой переменной хранится текст ошибки "Пожалуйста, введите количество этого товара".
2) Поиском по файлам найдите все файлы, в которых встречается эта языковая переменная.
3) Определите, какой из найденных файлов напрямую относится к корзине.
4) Найдите в этом файле условия, которые приводят к появлению ошибки, сопоставьте их с вашей задачей и исправьте.
Спасибо сказали: Роман

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

8 года 8 мес. назад #7212 от Роман
Вот получается так...

Переменная в яз файле ./ru-RU/ru-RU.com_virtuemart.ini
COM_VIRTUEMART_CART_ERROR_NO_VALID_QUANTITY="Пожалуйста, введите количество этого товара."

./components/com_virtuemart/helpers/cart.php
private function checkForQuantities($product, &$quantity=0,&$errorMsg ='') {
 
		$stockhandle = VmConfig::get('stockhandle','none');
		// Check for a valid quantity
		if (!is_numeric( $quantity)) {
			$errorMsg = JText::_('COM_VIRTUEMART_CART_ERROR_NO_VALID_QUANTITY', false);
			//			$this->_error[] = 'Quantity was not a number';
			$this->setError($errorMsg);
			vmInfo($errorMsg,$product->product_name);
			return false;
		}
		// Check for negative quantity
		if ($quantity < 0.1) {
			//			$this->_error[] = 'Quantity under zero';
			$errorMsg = JText::_('COM_VIRTUEMART_CART_ERROR_NO_VALID_QUANTITY', false);
			$this->setError($errorMsg);
			vmInfo($errorMsg,$product->product_name);
			return false;
		}


и тут я застрял.. )

Блин размусолить бы эту тему... в поиске не найти ничего толкового на дробные числа в virtuemart

З.Ы. вчера уже фрилансеров начал искать... пока без результатно (

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

8 года 8 мес. назад - 8 года 8 мес. назад #7213 от Роман
так.... корзину с заказом победил.. )) (утро, вечера мудренее)

итак у меня ж стоит OnePage Checkout (ну прост он в 1 клик и красив)

так там я нашел такой же кусок кода... ./components/com_onepage/overrides/cart_override.php

и поставил значение
if ($quantity < 0.1) {

Теперь осталось допилить шаг при заказе +0.1 и -0.1
Но не на весь товар а на отдельные весовые...
Я и так там настолько все донаправлял что только что заметил что если товар стоит от 1000р то в корзине показывается 1р )) а если например 2690 то 2р ))), а вот с цены ниже 1000р отображаются норм...

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

8 года 8 мес. назад - 8 года 8 мес. назад #7216 от Роман
B) меня осинило... опять же утром...

Кнопка +- ведь использует JavaScript итак.... для того чтоб можно было + 0.1 или -0.1 надо всего то изменить в файле /components/com_virtuemart/assets/js/vmprices.js меняем как в коде на parseFloat вместо parseInt и теперь в админке можно ставить шаг товара в 0.1
plus.click(function() {
						var Qtt = parseFloat(quantity.val());
						if (!isNaN(Qtt)) {
							quantity.val(Qtt + Ste);
						Virtuemart.setproducttype(cart,virtuemart_product_id);
						}
 
					});
					minus.click(function() {
						var Qtt = parseFloat(quantity.val());
						if (!isNaN(Qtt) && Qtt>Ste) {
							quantity.val(Qtt - Ste);
						} else quantity.val(Ste);
						Virtuemart.setproducttype(cart,virtuemart_product_id);
					});

надеюсь кому нибудь поможет... а то я тут сам с собой разговариваю ;) мой сайт Gastronomik.ru

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

8 года 2 мес. назад #7437 от Анастасия
помогите мне пожалуйста (((
вроде бы сделала все что описано, но не выходит (((

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