Làm thế nào magento nhận được sản phẩm cấu hình giá thấp nhất của các sản phẩm liên quan?


11

Trong trang xem mặc định magento hiển thị giá thấp nhất của các sản phẩm liên quan.

Tôi cần hiển thị giá cao nhất của các sản phẩm liên quan. Bất kỳ ai cũng có ý tưởng nơi logic được cư trú. Làm thế nào để tùy chỉnh hành vi này.

cập nhật:

Magento \ ConfigurableSản phẩm \ Vật giá \ Giá \ Cấu hình Bảng giáResolver

/**
     * @param \Magento\Framework\Pricing\SaleableInterface|\Magento\Catalog\Model\Product $product
     * @return float
     * @throws \Magento\Framework\Exception\LocalizedException
     */
    public function resolvePrice(\Magento\Framework\Pricing\SaleableInterface $product)
    {
        $price = null;
        foreach ($this->configurable->getUsedProducts($product) as $subProduct) {
            $productPrice = $this->priceResolver->resolvePrice($subProduct);
            $price = $price ? min($price, $productPrice) : $productPrice;
        }
        if (!$price) {
            throw new \Magento\Framework\Exception\LocalizedException(
                __('Configurable product "%1" do not have sub-products', $product->getName())
            );
        }
        return (float)$price;
    }

Tôi đang cố gắng ghi đè tập tin cốt lõi này, nhưng nó không hoạt động.

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
     <preference for="Magento\ConfigurableProduct\Pricing\Price\ConfigurablePriceResolver" type="Kensium\Catalog\Pricing\Price\ConfigurablePriceResolver" />

<?php
namespace Kensium\Catalog\Pricing\Price;
class ConfigurablePriceResolver extends \Magento\ConfigurableProduct\Pricing\Price\ConfigurablePriceResolver
{
    /**
     * @param \Magento\Framework\Pricing\SaleableInterface|\Magento\Catalog\Model\Product $product
     * @return float
     * @throws \Magento\Framework\Exception\LocalizedException
     */
    public function resolvePrice(\Magento\Framework\Pricing\SaleableInterface $product)
    {
        $price = null;       
        $assPrice=array();
        foreach ($this->configurable->getUsedProducts($product) as $subProduct) {
            $productPrice = $this->priceResolver->resolvePrice($subProduct);
            $assPrice[]=$productPrice;
            $price = $price ? min($price, $productPrice) : $productPrice;
        }
        if (!$price) {
            throw new \Magento\Framework\Exception\LocalizedException(
                __('Configurable product "%1" do not have sub-products', $product->getName())
            );
        }
        return (float)(max($assPrice));
        //return (float)$price;
    }
}

Bạn có muốn hiển thị giá tối đa trong trang chi tiết?
Rakesh Jesadiya

có chi tiết và liệt kê cũng được. Khi họ thay đổi tùy chọn tại thời điểm đó như bình thường.
sivakumar

trong giá niêm yết không thay đổi, Bạn đã kiểm tra, chỉ có một giá được hiển thị
Rakesh Jesadiya

đó là fine.customer sẽ thấy giá tối đa của sản phẩm cấu hình.
sivakumar

cái này có hiệu quả với bạn không? tôi đã đưa ra ví dụ dưới đây cho các yêu cầu của bạn
Rakesh Jesadiya

Câu trả lời:


13

Bạn phải tạo plugin để hiển thị giá tối đa bên trong trang chi tiết, Dưới đây là mô-đun từng bước cho nhu cầu của bạn,

Filepath, ứng dụng / mã / Nhà cung cấp / Modulename /

Tệp đăng ký, ứng dụng / mã / Nhà cung cấp / Modulename / register.php

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Vendor_Modulename',
    __DIR__
);

ứng dụng / mã / Nhà cung cấp / Modulename / etc / module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Vendor_Modulename" setup_version="2.0.0">
    </module>
</config>

ứng dụng / mã / Nhà cung cấp / Modulename / etc / frontend / di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\ConfigurableProduct\Pricing\Price\ConfigurablePriceResolver">
            <plugin name="pricemaxindetail" type="Vendor\Modulename\Pricing\ConfigurablePrice"/>
    </type>
</config>

ứng dụng / mã / Nhà cung cấp / Modulename / Vật giá / Configurableprice.php

Bên trong tập tin này, bạn phải pluginize ) (resolveprice chức năng

<?php
/**
 * Copyright © 2016 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */

namespace Vendor\Modulename\Pricing;

class ConfigurablePrice
{
    protected $_moduleManager;
    protected $_jsonEncoder;
    protected $_registry;


    public function __construct(
        \Magento\Framework\Module\Manager $moduleManager,
        \Magento\Framework\Json\EncoderInterface $jsonEncoder,
        \Magento\Framework\Registry $registry,           
        \Magento\Catalog\Api\ProductRepositoryInterface $productRepository,         
        \Magento\Catalog\Api\Data\ProductInterfaceFactory $productFactory,    
        \Magento\ConfigurableProduct\Model\Product\Type\Configurable $configurableType,
        \Magento\Framework\Api\DataObjectHelper $dataObjectHelper,
        \Magento\CatalogInventory\Api\StockStateInterface $stockState,
        array $data = [] 
    )
    {
        $this->_moduleManager = $moduleManager;
        $this->_jsonEncoder = $jsonEncoder;
        $this->_registry = $registry;
        $this->productFactory = $productFactory;      
        $this->productRepository = $productRepository;       
        $this->_configurableType = $configurableType;        
        $this->dataObjectHelper = $dataObjectHelper;   
        $this->stockState = $stockState; 
    }

    /**
     * @param \Magento\Framework\Pricing\SaleableInterface|\Magento\Catalog\Model\Product $product
     * @return float
     * @throws \Magento\Framework\Exception\LocalizedException
     */
    public function aroundResolvePrice($subject, \Closure $proceed,\Magento\Framework\Pricing\SaleableInterface $product)
    {
        $price = null; 
        //get parent product id      
        $parentId = $product['entity_id'];
        $childObj = $this->getChildProductObj($parentId);
        foreach($childObj as $childs){
            $productPrice = $childs->getPrice();
            $price = $price ? max($price, $productPrice) : $productPrice;
        }
        return $price;        
        //return (float)$proceed($product['entity_id']);
    }

     public function getProductInfo($id){    
        //get product obj using api repository...          
        if(is_numeric($id)){           
            return $this->productRepository->getById($id); 
        }else{
            return;
        } 
    }

    public function getChildProductObj($id){
        $product = $this->getProductInfo($id);
        //if quote with not proper id then return null and exit;
        if(!isset($product)){
            return;
        }

        if ($product->getTypeId() != \Magento\ConfigurableProduct\Model\Product\Type\Configurable::TYPE_CODE) {
            return [];
        }

        $storeId = 1;//$this->_storeManager->getStore()->getId();
        $productTypeInstance = $product->getTypeInstance();
        $productTypeInstance->setStoreFilter($storeId, $product);
        $childrenList = [];       

        foreach ($productTypeInstance->getUsedProducts($product) as $child) {
            $attributes = [];
            $isSaleable = $child->isSaleable();

            //get only in stock product info
            if($isSaleable){
                foreach ($child->getAttributes() as $attribute) {
                    $attrCode = $attribute->getAttributeCode();
                    $value = $child->getDataUsingMethod($attrCode) ?: $child->getData($attrCode);
                    if (null !== $value && $attrCode != 'entity_id') {
                        $attributes[$attrCode] = $value;
                    }
                }

                $attributes['store_id'] = $child->getStoreId();
                $attributes['id'] = $child->getId();
                /** @var \Magento\Catalog\Api\Data\ProductInterface $productDataObject */
                $productDataObject = $this->productFactory->create();
                $this->dataObjectHelper->populateWithArray(
                    $productDataObject,
                    $attributes,
                    '\Magento\Catalog\Api\Data\ProductInterface'
                );
                $childrenList[] = $productDataObject;
            }
        }

        $childConfigData = array();
        foreach($childrenList as $child){
            $childConfigData[] = $child;
        }

        return $childConfigData;
    }

}

chạy lệnh

Thiết lập php bin / magento: nâng cấp

xóa thư mục var và kiểm tra trong frontend


Làm thế nào để có được tiền thưởng này cho tôi?
Rakesh Jesadiya

Tôi đã đánh dấu là một câu trả lời đúng. Tôi không biết đôi khi chức năng tiền thưởng không được trao giải đúng. Tôi không nhận được 100 điểm?
sivakumar

Không, tôi không nhận được nhưng có thể sau khi hết thời hạn tiền thưởng, họ có thể nhận được, Bạn không có lựa chọn nào cho việc đó?
Rakesh Jesadiya

no.i được đánh dấu là một câu trả lời đúng, vì vậy bạn sẽ nhận được ngay lập tức.
sivakumar

@sivakumar bạn nên nhấp vào "+100" để thưởng tiền thưởng, bạn có thể kiểm tra tại đây để biết thêm thông tin: meta.stackexchange.com/questions/16065/
Em bé ở Magento

3

Xem \Magento\ConfigurableProduct\Pricing\Price\ConfigurablePriceResolver::resolvePrice. Đó là phương pháp đáng tin cậy để tính giá của sản phẩm có thể định cấu hình dựa trên giá con.

Bạn có thể bổ sung nó và thực hiện thuật toán của bạn.


thay vì tối thiểu tôi có thể sử dụng tối đa? Đủ chưa?
sivakumar

Tôi đã kiểm tra rằng, nếu bạn có thể sử dụng giá tối đa không hiển thị của nó, giá luôn hiển thị giá tối thiểu,
Rakesh Jesadiya

@Rakesh bạn có thể xem câu hỏi cập nhật một lần không?
sivakumar

@KAndy Tôi đang cố gắng để cắm, nhưng làm thế nào để có được mảng giá con. tôi nghĩ rằng tôi cần phải viết lại toàn bộ lớp ConfigurablepriceResolver?
sivakumar

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.