कैसे Magento के विन्यास योग्य उत्पाद संबंधित उत्पादों की सबसे कम कीमत मिल रही है?


11

संबंधित उत्पादों की सबसे कम कीमत प्रदर्शित करने वाले डिफ़ॉल्ट मैगनेटो द्वारा दृश्य पृष्ठ में।

मुझे संबंधित उत्पादों की उच्चतम कीमत प्रदर्शित करने की आवश्यकता है। किसी के पास यह विचार है कि इस व्यवहार को अनुकूलित करने के लिए तर्क कहाँ रहता है।

अपडेट करें:

Magento \ ConfigurableProduct \ मूल्य निर्धारण \ मूल्य \ 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;
        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;
    }

मैं इस मूल फ़ाइल को ओवरराइड करने की कोशिश कर रहा हूं, लेकिन यह काम नहीं कर रहा है।

<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;
    }
}

क्या आप विवरण पृष्ठ में अधिकतम मूल्य दिखाना चाहते हैं?
राकेश जेसादिया

हां विस्तार और लिस्टिंग में भी।जब वे हमेशा की तरह उस समय विकल्प बदलते हैं।
शिवकुमार १३'१६ को

लिस्टिंग मूल्य में कोई बदलाव नहीं किया गया है, क्या आपने जाँच की है, केवल एक मूल्य प्रदर्शित है
राकेश जेसादिया

यह ठीक है। कस्टमर को कॉन्फ़िगर करने योग्य उत्पाद की अधिकतम कीमत देखनी चाहिए।
शिवकुमार १३'१६ को

क्या यह आपके लिए काम कर रहा है? मैंने आपके
अनुरोधों के

जवाबों:


15

आपको विस्तार पृष्ठ के अंदर अधिकतम मूल्य प्रदर्शित करने के लिए प्लगइन बनाना होगा, नीचे अपनी आवश्यकता के लिए कदम से कदम मॉड्यूल है,

Filepath, एप्लिकेशन / कोड / विक्रेता / मोडुलनेम /

पंजीकरण फ़ाइल, ऐप / कोड / वेंडर / मोडुलनेम / पंजीकरण। एफपी

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

एप्लिकेशन / कोड / विक्रेता / 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>

एप्लिकेशन / कोड / विक्रेता / Modulename / etc / दृश्यपटल / 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>

एप्लिकेशन / कोड / विक्रेता / Modulename / मूल्य निर्धारण / ConfigurablePrice.php

इस फ़ाइल के अंदर, आपको समाधान () फ़ंक्शन को प्लगइन करना होगा

<?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;
    }

}

चलाने के आदेश

php बिन / Magento सेटअप: उन्नयन

var फ़ोल्डर निकालें और फ्रंटएंड में जांचें


मेरे लिए यह इनाम कैसे मिलेगा?
राकेश जेसादिया

पहले से ही मैंने एक सही उत्तर के रूप में चिह्नित किया है। मुझे नहीं पता कि कुछ बार बाउंटी कार्यक्षमता ठीक से पुरस्कार नहीं दे रही है। क्या 100 अंक नहीं मिलते हैं?
शिवकुमार

नहीं, मैं नहीं मिला, लेकिन इनाम की अवधि समाप्त होने के बाद हो सकता है, वे प्राप्त कर सकते हैं, आपके पास इसके लिए कोई विकल्प नहीं है?
राकेश जेसादिया

no.i को एक सही उत्तर के रूप में चिह्नित किया गया है, इसलिए आपको तुरंत मिल जाना चाहिए।
शिवकुमार

@ शिवकुमार आपको इनाम देने के लिए "+100" पर क्लिक करना चाहिए, आप अधिक जानकारी के लिए यहां देख सकते हैं: meta.stackexchange.com/questions/16065/…
बच्चा Magento में

4

देखते हैं \Magento\ConfigurableProduct\Pricing\Price\ConfigurablePriceResolver::resolvePrice। यह बाल मूल्य के आधार पर विन्यास योग्य उत्पाद की कीमत की गणना के लिए प्रतिक्रियाशील है।

आप इसे प्लगइन कर सकते हैं और अपने एल्गोरिथ्म को लागू कर सकते हैं।


मिनट के बजाय मैं अधिकतम उपयोग कर सकते हैं? यह प्रयाप्त है?
शिवकुमार

मैंने जाँच की है कि, यदि आप इसका अधिकतम उपयोग नहीं कर सकते हैं, तो इसकी अधिकतम कीमत प्रदर्शित करें, इसका हमेशा न्यूनतम मूल्य देखें,
राकेश जेसादिया

@ राकेश क्या आप एक बार अपडेट किए गए प्रश्न को देख सकते हैं?
शिवकुमार

@ और मैं प्लग-इन करने की कोशिश कर रहा हूं, लेकिन बाल मूल्य सरणी कैसे प्राप्त करें। मुझे लगता है कि मुझे पूरी configurablePriceResolver वर्ग को फिर से लिखना होगा?
शिवकुमार

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.