Cara menampilkan diskon produk yang dapat dikonfigurasi dalam persen pada daftar produk di Magento 2

10

Di halaman detail produk, itu menunjukkan persentase diskon. ketika saya membuka halaman daftar itu tidak dapat menunjukkan persentase untuk produk yang dapat dikonfigurasi.

Tolong beri saya solusi untuk itu.

Saya telah menggunakan kode di bawah ini untuk itu, tetapi tidak berfungsi untuk produk yang dapat dikonfigurasi.

<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>
Meera
sumber
Hai, apakah Anda mendapatkan solusinya?
Tanyakan Bytes
@ Tanyakan Bytes masih belum
Meera
@AskBytes Beri tahu saya jika masih tidak berfungsi. Saya menguji kode saya dan berfungsi dengan baik.
Rohan Hapani

Jawaban:

2

Anda dapat menambahkan membuat file harga saperate untuk produk dan kode yang dapat dikonfigurasi di dalamnya

catalog_product_prices.xml

tambahkan kode

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

karena produk yang dapat dikonfigurasi tidak dapat diperiksa oleh getFinalPrice()dan getSpecialPrice().

tambahkan kode di bawah ini untuk produk yang dapat dikonfigurasi.

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

Catatan: Anda bisa mendapatkan ini secara langsung dengan mengubah file app\design\frontend\Vendor\theme\Magento_Catalog\templates\product\price\final_price.phtml, Anda hanya harus meletakkan kondisi untuk produk yang dapat dikonfigurasi

persentase akan ditampilkan di halaman daftar masukkan deskripsi gambar di sini

Ketan Borada
sumber
1

Saya akan melakukan sesuatu seperti ini

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

dan menyebutnya dalam templat

    if ($percentage = $helper->getPercentage($product)) {
        echo $percentage;
    }
Tsita
sumber
Solusi Anda membantu saya .. Ini menunjukkan paling sedikit diskon carikan produk saja. tetapi harga diskon tidak berubah ketika memilih opsi carikan yang berbeda.
Tanyakan Bytes
1

Anda dapat memeriksanya dengan tanpa menimpa file apa pun. Anda perlu menggunakan afterPlugin untuk itu.

1) Buat file di.xml di 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) Buat file plugin ProductList.php di 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;
        }
    }
}

Output (Dalam Produk yang dapat dikonfigurasi):

masukkan deskripsi gambar di sini

Semoga bermanfaat bagi Anda.

Rohan Hapani
sumber
Anda harus menggunakan yang lain jika ($ product-> getTypeId () == "dapat dikonfigurasi") {} karena halaman memecah mana bundel atau grup produk. Metode getUsedProducts tidak digunakan untuk produk bundel dan grup
HaFiz Umer
1
Pertanyaan ini untuk produk yang dapat dikonfigurasi. Jadi, saya hanya menambahkan jawaban untuk itu.
Rohan Hapani
0

Silakan coba dengan kode di bawah ini:

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

Saya harap ini berhasil untuk Anda

Anas Mansuri
sumber