Magento 2'deki ürün listesinde yapılandırılabilir ürün indirimini yüzde olarak görüntüleme


10

Ürün ayrıntıları sayfasında indirim yüzdesi gösteriyor. liste sayfasını açtığımda yapılandırılabilir ürünün yüzdesini gösteremiyor.

Lütfen bana bunun için bir çözüm verin.

Bunun için aşağıdaki kodu kullandım, ancak yapılandırılabilir ürün için çalışmıyor.

<div class="discount-p">
    <?php

    if($_product->getTypeId() == "simple") {
        $simplePrice = $_product->getPrice();
        } else {
            $_children = $_product->getTypeInstance()->getUsedProducts($_product);
            foreach ($_children as $child){
            $simplePrice = $child->getPrice();
            break;
        }
    }

    $_finalPrice =$_product->getFinalPrice();
    $_price = $simplePrice;
    if($_finalPrice < $_price) {
    $_savingPercent = 100 - round(($_finalPrice / $_price)*100);
    echo '('. $_savingPercent . '%off)';

    }
    ?>
</div>

Merhaba, Çözümü aldın mı?
Bayt sor

@Ask Bytes hala değil
Meera

@AskBytes Hala çalışmıyorsa bana bildirin. Kodumu test ettim ve düzgün çalışıyor.
Rohan Hapani

Yanıtlar:


2

İçerisinde yapılandırılabilir ürün ve kod için bağımsız fiyat dosyası oluşturabilirsiniz.

catalog_product_prices.xml

kod ekle

<?xml version="1.0"?>

<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/layout_generic.xsd">
    <referenceBlock name="render.product.prices">
        <arguments>
            <argument name="default" xsi:type="array">
                <item name="prices" xsi:type="array">
                    <item name="final_price" xsi:type="array">
                        <item name="render_class" xsi:type="string">Vendor\Module\Pricing\Render\FinalPriceBox</item>
                        <item name="render_template" xsi:type="string">Vendor_Module::product/price/final_price.phtml</item>
                    </item>
                </item>
            </argument>
            <argument name="configurable" xsi:type="array">
                <item name="prices" xsi:type="array">
                    <item name="final_price" xsi:type="array">
                        <item name="render_class" xsi:type="string">Magento\ConfigurableProduct\Pricing\Render\FinalPriceBox</item>
                        <item name="render_template" xsi:type="string">Vendor_Module::product/price/final_price_configurable.phtml</item>
                    </item>
                </item>
            </argument>
        </arguments>
    </referenceBlock>
</layout>

yapılandırılabilir bir ürün olduğundan getFinalPrice()ve tarafından kontrol edilmesi mümkün değildir getSpecialPrice().

yapılandırılabilir ürün için aşağıdaki kodu ekleyin.

$priceModel = $block->getPriceType('regular_price');
$finalPriceModel = $block->getPriceType('final_price');

<?php if($finalPriceModel->getAmount() < $priceModel->getAmount()) : ?>
        <span class="old-price sly-old-price no-display config-old" style="text-decoration: line-through;">
            <?= $block->renderAmount($priceModel->getAmount(), [
                'price_id'          => $block->getPriceId('old-price-' . $idSuffix),
                'price_type'        => 'oldPrice',
                'include_container' => true,
                'skip_adjustments'  => true
            ]); ?>
        </span>
        <?php 

            $array = (array)$priceModel->getAmount();
            $prefix = chr(0).'*'.chr(0);
            $price = $array[$prefix.'amount'];

            $array = (array)$finalPriceModel->getAmount();
            $prefix = chr(0).'*'.chr(0);
            $finalPrice = $array[$prefix.'amount'];

            $percentage = 100 - round(($finalPrice / $price)*100);

            echo "<span class='percent-amt'>- ".$percentage."%</span>";
        ?>
    <?php endif; ?>

Not: bunu doğrudan değişiklik dosyası ile alabilirsiniz app\design\frontend\Vendor\theme\Magento_Catalog\templates\product\price\final_price.phtml, sadece yapılandırılabilir ürün için koşul koymak zorundasınız

liste sayfasında yüzde gösterilecek resim açıklamasını buraya girin


1

Böyle bir şey yapardım

public function getPercentage(\Magento\Catalog\Model\Product $product)
{
    $baseprice = 0;
    $finalprice = 0;
    $percentage = 0;

    if ($product->getTypeId() == 'configurable') {
        $baseprice = $product->getPriceInfo()
            ->getPrice('regular_price')
            ->getValue();

        $finalprice = $product->getPriceInfo()
            ->getPrice('final_price')
            ->getValue();
    } else {
        $baseprice = $product->getPrice();
        $finalprice = $product->getFinalPrice();
    }

    if ($finalprice < $baseprice) {
        $percentage = round(-100 * (1 - ($finalprice / $baseprice)));
    }

    return $percentage;
}

ve şablonda çağır

    if ($percentage = $helper->getPercentage($product)) {
        echo $percentage;
    }

Çözümünüz bana yardımcı olur .. Yalnızca en az ürün renk örneği indirimini gösterir. ancak farklı renk örneği seçenekleri seçilirken indirimli fiyat değişmez.
Ask Bytes

1

Herhangi bir dosyayı geçersiz kılmadan kontrol edebilirsiniz. Bunun için afterPlugin kullanmanız gerekir .

1) app / code / VendorName / ModuleName / etc / frontend'de di.xml dosyası oluşturun

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
    <type name="Magento\Catalog\Block\Product\ListProduct">
        <plugin name="block-product-list" type="VendorName\ModuleName\Plugin\ProductList"/>
    </type>
</config>

2) app / code / VendorName / ModuleName / Plugin'de ProductList.php eklenti dosyası oluşturun

<?php
namespace VendorName\ModuleName\Plugin;

class ProductList {

    public function afterGetProductDetailsHtml(
        \Magento\Catalog\Block\Product\ListProduct $subject,
        $result,
        \Magento\Catalog\Model\Product $product
    ) {
        if ($product->getTypeId() == "simple") {
            $simplePrice = $product->getPrice();
        } else {
            $_children = $product->getTypeInstance()->getUsedProducts($product);
            foreach ($_children as $child) {
                $simplePrice = $child->getPrice();
                break;
            }
        }

        $finalPrice = $product->getFinalPrice();
        $_price = $simplePrice;
        if ($finalPrice < $_price) {
            $discountPer = 100 - round(($finalPrice / $_price) * 100);
            return $result . 'Your save : ' . $discountPer . '%';
        } else {
            return $result;
        }
    }
}

Çıktı (Konfigüre Edilebilir Üründe):

resim açıklamasını buraya girin

Umut, belki sizin için yararlı.


Sayfa (paketin veya grup ürününün bulunduğu yerde) bozulduğu için ($ product-> getTypeId () == "configurable") {} durumunda başka bir yöntem kullanmalısınız. getUsedProducts yöntemi, paket ve grup ürünleri için kullanılmaz
HaFiz Umer

1
Yapılandırılabilir ürün için bu soru. Bunun için sadece cevap ekliyorum.
Rohan Hapani

0

Lütfen aşağıdaki kodu deneyin:

<?php
    $item = $block->getSaleableItem();
    $_savePercent = 100 - round(((float)$item->getFinalPrice() / (float)$item->getPrice()) * 100);
    echo '<b style="color:#008000">'.$_savePercent . '% off </b>';
    ?>

Umarım senin için çalışır

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.