Magento 2 捆绑价格

问题描述 投票:0回答:1

我想请您提供一些帮助,甚至只是进行比较。

在我的网站上,我有一些捆绑产品,这些捆绑产品的价格与精选产品相同,有些带有收音机,有些带有默认产品。

Magento 2 然而在列表和产品页面之间显示两种不同的价格。我已经在代码级别进行了检查,并且在产品页面上有通过 js 进行的操作来更改价格。事实上,当页面加载时,您会看到更新前的价格。您是否曾经实施过某种解决方案来使价格相同?这是我试图实现的代码段,但没有成功,因为它返回相同的价格,因为即使未在产品页面上选择产品,它们也被设置为默认值。


     $product = $this->productRepository->get($product_sku);
        $selectionCollection = $product->getTypeInstance(true)
            ->getSelectionsCollection(
                $product->getTypeInstance(true)->getOptionsIds($product),
                $product
            );
        $children_ids = $this->bundleType->getChildrenIds($product->getId(), true);
        $bundle_items = [];
        $optionsCollection = $product->getTypeInstance(true)
            ->getOptionsCollection($product);
        foreach ($optionsCollection as $options) {
            $optionArray[$options->getOptionId()]['option_title'] = $options->getDefaultTitle();
            $optionArray[$options->getOptionId()]['option_type'] = $options->getType();
            if ($options->getType() !== 'checkbox' && $options->getRequired() === "1") {
                foreach ($selectionCollection as $selection) {
                    foreach ($children_ids as $bundle_id) {
                        if ((array_values($bundle_id)[0] === $selection->getEntityId())
                            && $options->getId() === $selection->getOptionId()) {
                            $price = $selection->getPrice();
                            $qty = $selection->getSelectionQty();
                            $bundle_items[] = $price * $qty;
                        }
                    }

                }
            }
        }
        $finale_price = array_sum($bundle_items);

php magento magento2
1个回答
0
投票

我最终通过创建一个返回等级价格的函数解决了这个问题。我的产品更加定制化,因为根据客户群体的不同,我的价格也有所不同。我会留下代码。

public function getBundlePrice($product_sku, $product_sal)
    {
        $product = $this->productRepository->get($product_sku);
        $selectionCollection = $product->getTypeInstance(true)
            ->getSelectionsCollection(
                $product->getTypeInstance(true)->getOptionsIds($product),
                $product
            );
        $children_ids = $this->bundleType->getChildrenIds($product->getId(), true);
        $bundle_items = [];
        $optionsCollection = $product->getTypeInstance(true)
            ->getOptionsCollection($product);
        foreach ($optionsCollection as $options) {
            $optionArray[$options->getOptionId()]['option_title'] = $options->getDefaultTitle();
            $optionArray[$options->getOptionId()]['option_type'] = $options->getType();
            if ($options->getType() !== 'checkbox' && $options->getRequired() === "1") {
                foreach ($selectionCollection as $selection) {
                    foreach ($children_ids as $bundle_id) {
                        if ((array_values($bundle_id)[0] === $selection->getEntityId())
                            && $options->getId() === $selection->getOptionId()) {
                            $price = $selection->getPrice();
                            $qty = $selection->getSelectionQty();
                            if ($qty > 1 || $selection->getTierPrice()) {
                                $price = $this->getCustomPrice($selection);
                            } else if ($this->customerSession->getCustomer()->getGroupId() === "2") {
                                $price = $selection->getPartnerPrice();
                            }
                            $bundle_items[] = $price * $qty;
                        }
                    }
                }
            }
        }
        return $this->calculator->getAmount(array_sum($bundle_items), $product_sal);
    }
© www.soinside.com 2019 - 2024. All rights reserved.