magento ilişkili ürünlerin yapılandırılabilir ürün düşük fiyat almak nasıl?


11

Görünüm sayfasında varsayılan olarak magento ilişkili ürünlerin en düşük fiyatını görüntüler.

İlişkili ürünlerin en yüksek fiyatını göstermem gerekiyor. Herhangi birinin mantığın nerede olduğu hakkında fikri vardır. Bu davranışı nasıl özelleştirebilirsiniz.

Güncelleme:

Magento \ ConfigurableProduct \ Fiyatlandırma \ Fiyatı \ 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;
    }

Bu çekirdek dosyayı geçersiz kılmaya çalışıyorum, ama çalışmıyor.

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

ayrıntılar sayfasında maksimum fiyatı göstermek ister misiniz?
Rakesh Jesadiya

evet detaylı ve liste de. onlar her zamanki gibi seçenekleri değiştirmek zaman.
sivakumar

liste fiyatı değişmedi, Kontrol ettiniz mi, sadece bir fiyat gösteriliyor
Rakesh Jesadiya

Müşteri yapılandırılabilir ürünün maksimum fiyatını görmelidir.
sivakumar

bu senin için çalışıyor mu Aşağıda sizin ihtiyaçlarınız için örnek
verdim

Yanıtlar:


15

Ayrıntı sayfasında maksimum fiyatı görüntülemek için eklenti yapmanız gerekiyor, İhtiyacınız için adım adım modül aşağıdadır,

Dosyayolu, uygulama / kod / Tedarikçi / Modulename /

Kayıt dosyası, uygulama / kod / Tedarikçi / Modulename / registration.php

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

Uygulamanın / kod / Satıcı / 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>

Uygulamanın / kod / Satıcı / modulename / etc / kullanıcı arayüzü / 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>

Uygulamanın / kod / Satıcı / modulename / Fiyatlandırma / ConfigurablePrice.php

Bu dosyanın içinde, fixprice () işlevini tıklamanız gerekiyor

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

}

komutu çalıştır

php bin / magento kurulumu: yükseltme

var klasörünü kaldır ve ön uçta kontrol et


benim için bu ödül nasıl alınır?
Rakesh Jesadiya

zaten doğru bir cevap olarak işaretlenmiş. kimi zaman ödül işlevsellik düzgün vermiyor bilmiyorum. 100 puan alamadım?
sivakumar

Hayır, alamadım ama ödül süreleri dolduktan sonra olabilir, alabilirler, bunun için herhangi bir seçeneğiniz yok mu?
Rakesh Jesadiya

Hayır. doğru cevap olarak işaretlendiğim için hemen almalısınız.
sivakumar

@sivakumar ödül vermek için "+100" tıklamanız gerekir, daha fazla bilgi için buraya bakabilirsiniz
Magento'da Bebek

4

Bkz \Magento\ConfigurableProduct\Pricing\Price\ConfigurablePriceResolver::resolvePrice. Çocuk fiyatına göre yapılandırılabilir ürünün fiyatının hesaplanması için yöntemdir.

Bunu ekleyebilir ve algoritmanızı uygulayabilirsiniz.


min yerine max kullanabilir miyim? yeterli mi?
sivakumar

Ben max, ekran max fiyat değil, kullanabilirsiniz her zaman min fiyat göstermek, kontrol
ettim

@Rakesh güncellenmiş soruya bir kez bakabilir misiniz?
sivakumar

@Konyak eklemeye çalışıyorum, ama çocuk fiyatları dizisi nasıl alınır. tüm ConfigurablePriceResolver sınıfını yeniden yazmak gerektiğini düşünüyorum?
sivakumar

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.