[spoiler]
Необходимость использовать дробное значение возникает довольно часто, например, если вы продаёте весовой товар. Публикую инструкцию для разработчиков 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 строка:
PHP:
$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 должна появиться возможность вводить количество товара дробным числом. Перед внесением правок обязательно сделайте полный бэкап.
[/spoiler]
Делал все по мануалу, но с шагом, где разделитель дроби менять с точки на запятую не получается, нету
[spoiler]
Внимание формат цифр с точкой – XXX.XX, поэтому если в магазине нужно использовать запятую – преобразуем значение.
в CartController.php примерно 29 строка:
PHP:
$qty = (float)(abs(str_replace(“,”,”.”,Tools::getValue(‘qty’, 1))));
Проверяем на нераспрадажном товаре добавление в корзину, если количество товара записывается в БД дробным числом – правим дальше (не забываем про isFloat в фильтре в начале файла).
[/spoiler]
нету такой строки и при добавлении крашится страница, помогите сделать так, что бы указывать дробное число через запятую, например 1,5, а то только определяется и можно написать 1.5
За исправления некоторых мелких косяков заплачу, пишите в скайп Sturmfuhrer4
Сообщение отредактировано Sturmann 26-05-2013 16:12 ...