Рубрики
PrestaShop

Prestashop: количество товара дробным числом

Необходимость использовать дробное значение возникает довольно часто, например, если вы продаёте весовой товар. Публикую инструкцию для разработчиков Prestashop (версии 1.4 и 1.3) по выводу количества товара дробным числом. Хочу сразу заметить, если у Вас нет соответствующих навыков в веб разработке, то лучше доверить эту работу специалистам.
1. Меняем в БД тип поля quantity на decimal(17,2) в следующих таблицах Prestashop:
— ps_cart_product
— ps_discount
— ps_orders -проверить значения total_products и total_products_wt, они обычно уже в decimal
— ps_order_detail — кроме discount_quantity_applied, product_quantity_discount тоже уже в decimal должно быть
— ps_order_return_detail
— ps_order_slip_detail
— ps_pack
— ps_product
— ps_product_attribute
— ps_product_sale

для 1.4 ещё
— ps_specific_price
— ps_stock_mvt

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

2. Редактируем файлы (для Prestashop 1.4 используем override) — заменяем «intval» на «floatval» для всех значений «quantity» или «qty»
— /classes/Attribute.php — если используете атрибуты и комбинации
— /classes/Cart.php — больше всего правок, придётся набраться терпения )
— /classes/Product.php — не забудьте про правило валидации isUnsignedInt для количества
— /controllers/CartController.php — для 1.4
— /cart.php — для 1.3
— /themes/prestashop/product.tpl
— /themes/prestashop/js/cart-summary.js

Внимание формат цифр с точкой — XXX.XX, поэтому если в магазине нужно использовать запятую — преобразуем значение.
в CartController.php примерно 29 строка:
$qty = (float)(abs(str_replace(«,»,».»,Tools::getValue(‘qty’, 1))));

Проверяем на нераспрадажном товаре добавление в корзину, если количество товара записывается в БД дробным числом — правим дальше (не забываем про isFloat в фильтре в начале файла).

3. Реактируем оставшиеся файлы
— prestashop/classes/Customization.php
— prestashop/classes/Discount.php
— prestashop/classes/Order.php
— prestashop/classes/OrderDetail.php
— prestashop/classes/OrderReturn.php
— prestashop/classes/PaymentModule.php
— prestashop/classes/ProductSale.php
— prestashop/classes/QuantityDiscount.php
— prestashop/classes/StockMvt.php
— prestashop/controllers/OrderController.php — для 1.4
— prestashop/order.php — для 1.3

4. Для корректного отображения и добавления товара в админке правим файлы: AdminOrders.php и AdminProducts.php

После проделанных действий с файлами Prestashop должна появиться возможность вводить количество товара дробным числом. Перед внесением правок обязательно сделайте полный бэкап.

11 ответов к “Prestashop: количество товара дробным числом”

а если часть товаров нужно продавать дробным числом, а часть — целым?

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

А для версии 1,6 есть какие либо нюансы?

Данная инструкция не подходит для 1.6, т.к там немного изменена система классов и таблиц в БД

Ок. Спасибо за статью.

Жаль для меня не подходит. 🙁

Это решается модулем, но он стоит около 200 евро. Я тоже этим обеспокоен, продаем товар на метры, граммы, штуки — нет возможности выбора единиц измерения нету возможности продавать дробный товар.
Если бы сразу знал — возможно выбрал бы другой движок где это реализовано. Честно говоря ина анг и на рус форумах к этому много претензий, но как видим в версии 1,6 ничего не поменялось….

Спасибо. А ваша инструкция подходит для 1.7 ?

Обсуждение закрыто.