কীভাবে ম্যাজেন্টো সম্পর্কিত পণ্যগুলির সবচেয়ে কম দামের কনফিগারযোগ্য পণ্য পাচ্ছেন?


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

বিস্তারিত পৃষ্ঠার সর্বাধিক মূল্য প্রদর্শন করতে আপনাকে তার জন্য প্লাগইন তৈরি করতে হবে, নীচে আপনার প্রয়োজনের জন্য ধাপে ধাপে মডিউলটি রয়েছে,

ফাইলপথ, অ্যাপ / কোড / বিক্রেতা / মডিউল নাম /

নিবন্ধকরণ ফাইল, অ্যাপ / কোড / বিক্রেতা / মডিউলনাম / নিবন্ধন.এফপি

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

}

আপনার আদেশ প্রদান করুন

পিএইচপি বিন / ম্যাজেন্টো সেটআপ: আপগ্রেড

var ফোল্ডারটি সরান এবং সম্মুখভাগে চেক করুন


আমার জন্য এই অনুগ্রহ পেতে কিভাবে?
রাকেশ জেসাদিয়া

ইতিমধ্যে আমি একটি সঠিক উত্তর হিসাবে চিহ্নিত করেছি i
শিবকুমার

না, আমি পাই নি তবে অনুগ্রহের মেয়াদ শেষ হওয়ার পরেও হতে পারে, তারা পেতে পারে, তার জন্য আপনার কোনও বিকল্প নেই?
রাকেশ জেসাদিয়া

no.i একটি সঠিক উত্তর হিসাবে চিহ্নিত হয়েছে, তাই আপনার অবিলম্বে পাওয়া উচিত।
শিবকুমার

: @sivakumar আপনি পুরস্কার খয়রাত করতে "+100" এ ক্লিক করা উচিত, আপনি আরও তথ্যের জন্য এখানে পরীক্ষা করতে পারবেন meta.stackexchange.com/questions/16065/...
Magento মধ্যে Baby

4

দেখুন \Magento\ConfigurableProduct\Pricing\Price\ConfigurablePriceResolver::resolvePrice। সন্তানের দামের উপর ভিত্তি করে কনফিগারযোগ্য পণ্যের দাম গণনা করার জন্য এটি পদ্ধতি অবননযোগ্য।

আপনি এটি প্লাগিনাইজ করতে পারেন এবং আপনার অ্যালগরিদম প্রয়োগ করে।


মিনিটের পরিবর্তে আমি কি সর্বোচ্চ ব্যবহার করতে পারি? এটা কি যথেষ্ট?
শিবকুমার

আমি পরীক্ষা করে দেখেছি, আপনি যদি সর্বোচ্চটি এটির প্রদর্শন না করা সর্বাধিক মূল্য ব্যবহার করতে পারেন তবে সর্বদা এটির ন্যূনতম মূল্য প্রদর্শন করুন
রাকেশ জেসাদিয়া

@ রাকেশ আপনি কি একবার আপডেট হওয়া প্রশ্নটি দেখতে পারবেন?
শিবকুমার

@ কেডি আমি প্লাগনেজ করার চেষ্টা করছি, তবে কীভাবে সন্তানের দামগুলি অ্যারে পাবেন। আমি মনে করি আমার পুরো কনফিগারযোগ্যপ্রাইসেসলভার ক্লাসটি আবার লিখতে হবে?
শিবকুমার

হাই @ কেডি
296960
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.