Cách hiển thị giảm giá sản phẩm có thể định cấu hình theo phần trăm trong danh sách sản phẩm trong Magento 2


10

Trong trang chi tiết sản phẩm, nó hiển thị phần trăm chiết khấu. Khi tôi mở trang danh sách, nó không thể hiển thị tỷ lệ phần trăm cho sản phẩm có thể định cấu hình.

Xin vui lòng cho tôi giải pháp cho điều đó.

Tôi đã sử dụng mã dưới đây cho điều đó, nhưng nó không hoạt động cho sản phẩm có thể định cấu hình.

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

Xin chào, bạn đã có được giải pháp?
Hỏi Byte

@Ask Bytes vẫn không
Meera

@AskBytes Hãy cho tôi biết nếu vẫn không hoạt động. Tôi đã kiểm tra mã của mình và nó hoạt động đúng như vậy.
Rohan Hapani

Câu trả lời:


2

Bạn có thể thêm tệp giá tạo mẫu cho sản phẩm và mã có thể định cấu hình trong đó.

catalog_product_prices.xml

thêm mã

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

vì nó là sản phẩm cấu hình không thể kiểm tra nó bằng getFinalPrice()getSpecialPrice().

thêm mã dưới đây cho sản phẩm cấu hình.

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

Lưu ý: bạn có thể lấy điều này trực tiếp bằng cách thay đổi tệp app\design\frontend\Vendor\theme\Magento_Catalog\templates\product\price\final_price.phtml, bạn chỉ cần đặt điều kiện cho sản phẩm có thể định cấu hình

tỷ lệ phần trăm sẽ hiển thị trong trang danh sách nhập mô tả hình ảnh ở đây


1

Tôi sẽ làm một cái gì đó như thế này

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

và gọi nó trong mẫu

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

Giải pháp của bạn giúp tôi .. Nó chỉ hiển thị giảm giá swatch sản phẩm ít nhất. nhưng giá chiết khấu không thay đổi khi chọn các tùy chọn swatch khác nhau.
Hỏi Byte

1

Bạn có thể kiểm tra nó bằng cách không ghi đè bất kỳ tập tin. Bạn cần sử dụng afterPlugin cho điều đó.

1) Tạo tệp di.xml tại 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) Tạo ProductList.php file plugin tại app / code / VendorName / môđun / 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;
        }
    }
}

Đầu ra (Trong sản phẩm có thể định cấu hình):

nhập mô tả hình ảnh ở đây

Hy vọng, nó có thể hữu ích cho bạn.


Bạn nên sử dụng khác nếu ($ sản phẩm-> getTypeId () == "có thể định cấu hình") {} vì trang bị hỏng trong đó gói hoặc sản phẩm nhóm. Phương thức getUsed Products không được sử dụng cho gói và sản phẩm nhóm
HaFiz Umer

1
Câu hỏi này cho sản phẩm cấu hình. Vì vậy, tôi chỉ cần thêm câu trả lời cho điều đó.
Rohan Hapani

0

Vui lòng thử với mã dưới đây:

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

Tôi hy vọng nó làm việc cho bạn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.