Prestashop Dynamic Pricing 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 времени или после заказа, но это не кажется правильным ...

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

Все, что мне действительно нужно сделать, это иметь возможность изменить цену при добавлении в корзину, а затем подтвердить заказ и оставить все как есть. Любой совет?


person adKB    schedule 12.06.2020    source источник
comment
вы можете переопределить Product :: getPriceStatic в классе Product.php   -  person tarek fellah    schedule 15.06.2020


Ответы (1)


На мой взгляд, у вас все хорошо с SpecificPrice, и это может быть лучший и самый надежный подход без модификации ядра. Но я не могу понять, почему вы используете классы SpecificPriceRule и SpecificPrice. Думаю, для достижения цели достаточно использовать SpecificPrice. И чтобы отобразить SpecificPrice в корзине, попробуйте создать некоторый вызов ajax, чтобы создать новую цену, прежде чем продукт будет добавлен в корзину. Так работают индивидуальные продукты, и вы можете это проверить.

person Alexander Grosul    schedule 15.06.2020