февраля 1, 2013

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 должна появиться возможность вводить количество товара дробным числом. Перед внесением правок обязательно сделайте полный бэкап.


Комментарии

  • Максим Жилов

    Cпасибо, очень полезно!!!!

  • Алексей

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

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

  • Aleksey Bogomolov

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

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

      • Aleksey Bogomolov

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

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

        • Евгений Сломинцев

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

          • Подскажите другой бесплатный движок “где это реализовано” – очень интересно.