首页 > 解决方案 > Prestashop 动态定价 PHP

问题描述

我正在尝试制作一个完全可定制的产品页面,然后将产品添加到购物车中。但是,我很难为用户为该购物车/会话制定临时价格。

我查看了购物车,似乎无法在其中找到解决方案,我查看了产品并尝试设置新产品,然后设置价格,但是一旦将其添加到购物车,它就会返回默认价格。我已经阅读了有关 SpecificPrice 的信息,但在任何地方都找不到它的用例,而且似乎无法让它发挥作用。

我现在唯一能想到的就是每次为可定制的产品制作一个新产品,然后在购买后或 X 时间后删除它,但是我只是不喜欢这个想法,因为我认为它不能很好地扩展,并且可能会在管理面板中造成很多混乱。

如果您能指出我正确的方向,那将非常棒!谢谢!

编辑:

在做了更多研究之后,我发现我可以通过价格规则和特定价格来做到这一点。我使用了以下代码。

            $product_id = 1;
            $product = new Product($product_id);

            $cart = $this->context->cart;
            $cart->updateQty(1, $product_id, $product->getDefaultAttribute($product->id));
            $specific_price_rule = new SpecificPriceRule();
            $specific_price_rule->name = time();
            $specific_price_rule->id_shop = (int)$context->shop->id;
            $specific_price_rule->id_currency = 0;
            $specific_price_rule->id_country = 0;
            $specific_price_rule->id_group = 0;
            $specific_price_rule->from_quantity = 1;
            $specific_price_rule->price = 1;
            $specific_price_rule->reduction = 0;
            $specific_price_rule->reduction_tax = 0;
            $specific_price_rule->reduction_type = 'amount';
            $specific_price_rule->from = date("Y-m-d H:i:s");
            $specific_price_rule->to = date("Y-m-d").' 23:59:59';
            $specific_price_rule->add();
            $specific_price = new SpecificPrice();
            $specific_price->id_product = (int)$product_id; // choosen product id
            $specific_price->id_product_attribute = $product->getDefaultAttribute($product->id);
            $specific_price->id_cart = (int)$cart->id;
            $specific_price->id_shop = (int)$context->shop->id;
            $specific_price->id_currency = 0;
            $specific_price->id_country = 0; 
            $specific_price->id_group = 0;
            $specific_price->id_customer = 0;
            $specific_price->from_quantity = 1;
            $specific_price->price = 1;
            $specific_price->reduction_type = 'amount';
            $specific_price->reduction_tax = 1;
            $specific_price->reduction = 0;
            $specific_price->from = date("Y-m-d H:i:s");
            $specific_price->to = date("Y-m-d").' 23:59:59'; // or set date x days from now
            $specific_price->id_specific_price_rule = $specific_price_rule->id;
            $specific_price->add();

但是,这样做时,它会为此在表格中添加一个特定的价格。所以我基本上会为我得到的每一位客户制定一个新的价格。我想我可以设置它,以便在 X 时间或订单后清除,但这似乎不正确......

我使用这种方法遇到的第二个问题是它很慢。当我将产品添加到购物车时,如果我直接进入购物车,它会显示初始价格,然后当我再次刷新时,它会转到特定价格......

我真正需要做的就是能够在添加到购物车时更改价格,然后在订单上验证并将其保留。有什么建议吗?

标签: phpprestashopprestashop-1.7prestashop-modules

解决方案


在我看来,你做得很好,SpecificPrice它可能是最好和最可靠的方法,没有核心修改。但我不明白你为什么同时使用SpecificPriceRuleSpecificPrice类。我认为使用SpecificPrice就足以实现目标。并SpecificPrice在购物车中显示尝试创建一些 ajax 调用来创建您的新价格,然后再将产品添加到购物车。定制产品以这种方式工作,因此您可以检查它


推荐阅读