Magento 2 में उत्पाद सूची पर प्रतिशत में विन्यास योग्य उत्पाद छूट कैसे प्रदर्शित करें


10

उत्पाद विवरण पृष्ठ में, यह छूट प्रतिशत दिखा रहा है। जब मैं सूची पृष्ठ खोलता हूं तो यह विन्यास योग्य उत्पाद के लिए प्रतिशत नहीं दिखा सकता है।

कृपया इसके लिए मुझे समाधान दें।

मैंने उसके लिए नीचे दिए गए कोड का उपयोग किया है, लेकिन यह कॉन्फ़िगर करने योग्य उत्पाद के लिए काम नहीं कर रहा है।

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

नमस्ते, क्या आपको समाधान मिला?
बाइट्स

@Ask बाइट्स अभी भी नहीं
मीरा

@AskBytes मुझे बताएं कि क्या अभी भी काम नहीं कर रहा है। मैंने अपने कोड का परीक्षण किया और यह ठीक से काम कर रहा है।
रोहन हापानी

जवाबों:


2

आप इसके भीतर कॉन्फ़िगर करने योग्य उत्पाद और कोड के लिए सेपरेट मूल्य फ़ाइल बना सकते हैं।

catalog_product_prices.xml

कोड जोड़ें

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

चूंकि यह विन्यास योग्य उत्पाद है, इसलिए इसे जांचना संभव नहीं है getFinalPrice()और getSpecialPrice()

कॉन्फ़िगर करने योग्य उत्पाद के लिए नीचे कोड जोड़ें।

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

नोट: आप इसे सीधे परिवर्तन फ़ाइल द्वारा प्राप्त कर सकते हैं app\design\frontend\Vendor\theme\Magento_Catalog\templates\product\price\final_price.phtml, आपको बस कॉन्फ़िगर करने योग्य उत्पाद के लिए शर्त रखनी होगी

प्रतिशत लिस्टिंग पृष्ठ में दिखाई देगा यहाँ छवि विवरण दर्ज करें


1

मैं ऐसा कुछ करूंगा

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

और इसे टेम्पलेट में कॉल करें

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

आपका समाधान मेरी मदद करता है .. यह केवल कम से कम उत्पाद स्वाच छूट दिखाता है। लेकिन अलग-अलग स्वैच विकल्पों का चयन करते समय छूट की कीमत नहीं बदल रही है।
बाइट्स

1

आप किसी भी फ़ाइल को ओवरराइड किए बिना इसे चेक कर सकते हैं। उसके लिए आपको onPlugin का उपयोग करना होगा

1) एप्लिकेशन / कोड / VendorName / ModuleName / etc / frontend पर di.xml फ़ाइल बनाएँ

<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 / कोड / VendorName / ModuleName / Plugin पर ProductList.php प्लगइन फाइल बनाएं

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

आउटपुट (विन्यास योग्य उत्पाद में):

यहाँ छवि विवरण दर्ज करें

आशा है, यह शायद आपके लिए उपयोगी हो।


आपको ($ उत्पाद-> getTypeId () == "कॉन्फ़िगर करने योग्य") {} का उपयोग करना चाहिए क्योंकि पेज जहां बंडल या समूह उत्पाद को तोड़ता है। getUsedProducts विधि बंडल और समूह उत्पाद के लिए उपयोग नहीं करती है
Haiziz उमेर

1
विन्यास योग्य उत्पाद के लिए यह प्रश्न। इसलिए, मैं सिर्फ इसके लिए उत्तर जोड़ता हूं।
रोहन हापानी

0

कृपया नीचे दिए गए कोड के साथ प्रयास करें:

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

मुझे उम्मीद है कि यह आपके लिए काम करेगा

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