So zeigen Sie den konfigurierbaren Produktrabatt in Prozent auf der Produktliste in Magento 2 an


10

Auf der Produktdetailseite wird ein Rabattprozentsatz angezeigt. Wenn ich die Listenseite öffne, kann der Prozentsatz für das konfigurierbare Produkt nicht angezeigt werden.

Bitte geben Sie mir die Lösung dafür.

Ich habe den folgenden Code dafür verwendet, aber er funktioniert nicht für das konfigurierbare Produkt.

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

Hallo, hast du die Lösung bekommen?
Fragen Sie Bytes

@ Fragen Bytes immer noch nicht
Meera

@AskBytes Lass es mich wissen, wenn es immer noch nicht funktioniert. Ich habe meinen Code getestet und er funktioniert einwandfrei.
Rohan Hapani

Antworten:


2

Sie können eine Saperate-Preisdatei für das konfigurierbare Produkt und den darin enthaltenen Code hinzufügen.

catalog_product_prices.xml

Code hinzufügen

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

da es sich um ein konfigurierbares Produkt handelt, ist es nicht möglich, es durch getFinalPrice()und zu überprüfen getSpecialPrice().

Fügen Sie den folgenden Code für das konfigurierbare Produkt hinzu.

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

Hinweis: Sie können dies direkt durch Ändern der Datei erhalten app\design\frontend\Vendor\theme\Magento_Catalog\templates\product\price\final_price.phtml. Sie müssen lediglich die Bedingung für das konfigurierbare Produkt festlegen

Der Prozentsatz wird auf der Listenseite angezeigt Geben Sie hier die Bildbeschreibung ein


1

Ich würde so etwas tun

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

und nenne es in Vorlage

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

Ihre Lösung hilft mir. Sie zeigt nur den geringsten Rabatt für Produktmuster. Der Rabattpreis ändert sich jedoch nicht, wenn verschiedene Farbfeldoptionen ausgewählt werden.
Fragen Sie Bytes

1

Sie können es überprüfen, ohne eine Datei zu überschreiben. Sie müssen dafür afterPlugin verwenden .

1) Erstellen Sie die Datei di.xml unter app / code / VendorName / ModuleName / etc / frontend

<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) Erstellen Sie die Plugin-Datei ProductList.php unter app / code / VendorName / ModuleName / Plugin

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

Ausgabe (im konfigurierbaren Produkt):

Geben Sie hier die Bildbeschreibung ein

Hoffe, es ist vielleicht hilfreich für dich.


Sie sollten else if ($ product-> getTypeId () == "konfigurierbar") {} verwenden, da die Seite dort zusammenbricht, wo das Produkt gebündelt oder gruppiert wird. getUsedProducts Methode nicht für Bundle und Gruppenprodukt verwendet
HaFiz Umer

1
Diese Frage für konfigurierbares Produkt. Also füge ich einfach eine Antwort darauf hinzu.
Rohan Hapani

0

Bitte versuchen Sie es mit dem folgenden Code:

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

Ich hoffe, es funktioniert für Sie

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.