ম্যাজেন্টো 2: স্তরিত নেভিগেশন মূল্য ফিল্টার প্রয়োগকৃত কাস্টম পণ্য ছাড়ের পরে কাজ করছে না


13

আমি একটি পণ্য ছাড় মডিউল উপর কাজ। আমি এটি প্লাগইন এবং পর্যবেক্ষকের মাধ্যমে করেছি। এটি পণ্যের পৃষ্ঠা এবং তালিকার পৃষ্ঠায় কাজ করছে। তবে দাম ফিল্টার আপডেট হওয়া পণ্যের দাম অনুযায়ী কাজ করছে না।

আমার কোডটি যা আমি দামটি কাস্টমাইজ করতে ব্যবহার করছি।

VendorName / moduleName জন্য / etc / di.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Catalog\Pricing\Price\FinalPrice">
        <plugin name="custom_discount_catalog_pricing_price_finalprice" type="VendorName\ModuleName\Plugin\FinalPrice" />
    </type>
</config>

VendorName / moduleName জন্য / etc / events.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <event name='catalog_product_get_final_price'>
        <observer name='customdiscount_finalprice' instance='VendorName\ModuleName\Observer\ProcessFinalPrice'/>
    </event>
</config>

VendorName / moduleName / অবজারভার / ProcessFinalPrice.php

<?php

namespace VendorName\ModuleName\Observer;

use Magento\Framework\Event\ObserverInterface;

class ProcessFinalPrice implements ObserverInterface
{
    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        $product = $observer->getEvent()->getProduct();
        $old = $product->getData('final_price');
        $discountedPrice = $old - ($old * 0.20);
        $product->setData('final_price',$discountedPrice);
    }
}

VendorName / moduleName / প্লাগইন / FinalPrice.php

<?php

namespace VendorName\ModuleName\Plugin;

class FinalPrice
{
    public function afterGetValue(\Magento\Catalog\Pricing\Price\FinalPrice $subject, $result)
    {
        $discountedPrice = $result - ($result * 0.20);
        return $discountedPrice;
    }
}

20% ছাড় প্রয়োগ করা হয়েছে

মূল্য ফিল্টার ছাড় দামের সাথে কাজ করছে না

দ্রষ্টব্য: ছাড়মূল্যটি গ্রাহক স্তরে রয়েছে


এইচআই আপনি যদি ছাড় দিতে চান। সুতরাং আমি আপনাকে "ক্যাটালগ দামের নিয়ম"
রবি সনি

@ রবি সোনি আমরা একটি কাস্টম মডিউল তৈরি করেছি। আমরা এটির জন্য ক্যাটালগের মূল্য বিধি ব্যবহার করতে পারি না।
ধৈর্য শাহ

@ রোহান একই সংস্করণ ব্যবহার করছে এবং এটি কাজ করছে না।
প্রিয়ঙ্ক

আমি প্রায় 4 বছর কোনও সমাধান ছাড়াই একটি সমাধান খুঁজছি, আমি আশা করি আপনি
এটির

@ উইসামহাকিম নাহ কোনও সঠিক সমাধান নেই। আশা করি কিছু ম্যাজেন্টো কোর দলের লোক এটিকে সন্ধান করতে পারে এবং কিছু সমাধানের পরামর্শ দিতে পারে :)
প্রিয়ঙ্ক

উত্তর:


5

এটি কোনও সমাধান নয়, তবে দাম ফিল্টারগুলি কীভাবে কাজ করে তার একটি ব্যাখ্যা হতে পারে। এটি কোনও সমাধান সনাক্ত করতে সহায়তা করতে পারে।

পণ্যের তালিকায় প্রদর্শিত দামগুলি catalog_product_index_priceটেবিল থেকে আসে ।
আপনি যদি সেই পণ্যটি তালিকার পুনরুদ্ধার করে এমন নির্বাচনের দিকে একবার নজর দেন তবে আপনি এরকম কিছু দেখতে পাবেন:

SELECT 
  `e`.*, 
  `cat_index`.`position` AS `cat_index_position`, 
  `price_index`.`price`, 
  `price_index`.`tax_class_id`, 
  `price_index`.`final_price`, 
  IF(price_index.tier_price IS NOT NULL, LEAST(price_index.min_price, price_index.tier_price), price_index.min_price) AS `minimal_price`, 
  `price_index`.`min_price`, 
  `price_index`.`max_price`, 
  `price_index`.`tier_price` 
FROM `catalog_product_entity` AS `e` 
INNER JOIN `catalog_category_product_index_store1` AS `cat_index` ON cat_index.product_id=e.entity_id AND ....
INNER JOIN `catalog_product_index_price` AS `price_index` ON price_index.entity_id = e.entity_id AND ...

আপনার ক্ষেত্রে, এটি কাজ করে না কারণ আপনি যখন ফ্লাইতে পণ্যটির চূড়ান্ত মূল্য পরিবর্তন করছেন, যখন পণ্যটি অস্বীকৃত হয়। তবে মূল্য সূচকের টেবিলে আপনার এখনও মূল মূল্য রয়েছে।

আসল ইনডেক্সিং (কমপক্ষে সাধারণ পণ্যগুলির জন্য) হয় Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\DefaultPrice::reindex
সেখানে কী ঘটেছিল তা আমি সম্পূর্ণরূপে ব্যাখ্যা করতে পারি না, তবে আপনার কাছে কিছু একটা আছে।

prepareFinalPriceDataForTypeএকই শ্রেণি থেকে প্রাপ্ত পদ্ধতিটিকে সূচক প্রক্রিয়া শুরু করার সময় বলা হয়।
এই পদ্ধতিটি এর সাথে শেষ হয় $this->modifyPriceIndex($finalPriceTable);
এটি একটি প্রাইস মডিফায়ার ক্লাস তৈরি করে এবং মূল্য সংশোধক তালিকায় সংযুক্ত করে কিনতে পারেন।
আপনি এটির মতো একটি মূল্য সংশোধক তৈরি করতে পারেন:

<?php
namespace Vendor\Module\Indexer\Price;

use Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\PriceModifierInterface;
use Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\IndexTableStructure;

class CustomPriceModifier implements PriceModifierInterface
{
     public function modifyPrice(IndexTableStructure $priceTable, array $entityIds = []) : void
     {
         //code here that modifies your price.
     }
}

আপনি দাম পরিবর্তকের উদাহরণ খুঁজে পেতে পারেন Magento\CatalogInventory\Model\Indexer\ProductPriceIndexFilter। আপনি যদি স্টক পণ্যের বাইরে আড়াল করতে সেট করেন তবে এটি মূল্য সূচক থেকে আউট স্টক পণ্যগুলি সরিয়ে দেয়।

আপনি আপনার মূল্য সংশোধক তৈরি করেছেন, এখন আপনাকে এটিকে দামের সংশোধকগুলির বিদ্যমান তালিকার সাথে সংযুক্ত করতে হবে।

আপনি আপনার di.xML ফাইল দিয়ে এটি করতে পারেন

<type name="Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\PriceInterface">
    <arguments>
        <argument name="priceModifiers" xsi:type="array">
            <item name="customPriceModifier" xsi:type="object">Vendor\Module\Indexer\Price\CustomPriceModifier</item>
        </argument>
    </arguments>
</type>

modifyPriceউপরের ক্লাসে পদ্ধতিটি প্রয়োগ করে আপনি যেমন দেখতে চান ঠিক তেমন সূচকের টেবিলে দামগুলি পরিবর্তন করতে সক্ষম হওয়া উচিত ।

আমি এটাই পেয়েছি।


দুর্দান্ত ব্যাখ্যা। তবে এটি আমার পক্ষে কাজ করছে না কারণ গ্রাহক স্তরে ছাড়ের দাম।
ধৈর্য শাহ

1
হাঁ। ম্যাজেন্টো গ্রাহক স্তরের দামের সাথে ভাল খেলছে না। অন্যদিকে, আপনি গ্রাহক গ্রুপ ব্যবহার করতে পারেন can এর অর্থ হতে পারে যে আপনি প্রচুর গোষ্ঠী পেয়েছেন যা সূচককে ধীরে ধীরে করে দেবে। দুর্ভাগ্যক্রমে আমার আর একটি পরিষ্কার সমাধান নেই। বা এই বিষয়টির জন্য একটি নোংরা।
মারিয়াস

আমি যে সমাধানটি খুঁজছিলাম তা পান না Din তবে যেহেতু প্রবাহের কিছু ব্যাখ্যা দিয়ে আপনি প্রথম উত্তর দিয়েছিলেন তা আপনাকে বরকত পয়েন্টগুলি দিতে চাই।
প্রিয়ঙ্ক

2

আমি যেমন ম্যাজেন্টো 2 ফ্লো স্ট্রাকচার বুঝি, যখন আমরা ক্যাটালগের মূল্য বিধি তৈরি করি এবং সেই নিয়ম সংরক্ষণ এবং প্রয়োগ করি। পরে, আপডেটের দামের জন্য আমাদের অবশ্যই ডেটা রিইন্ডেক্স করতে হবে। সেই সময়, দামটি উপযুক্ত পণ্যের উপর আপডেট করা হবে এবং catalog_product_index_priceসারণীতে সংরক্ষণ করা হবে ।

তবে, আমি যেমন এই মডিউল প্রবাহ কাঠামো বুঝতে পেরেছি তবে এটি সেই পণ্য সংগ্রহের কোনও সংশোধন করে না যা স্তরযুক্ত নেভিগেশন ফিল্টারটির জন্য রেন্ডার করা হয়েছিল। আপনি এখানে vendor/magento/module-catalog/Model/Layer.php getProduct Colલેક્શન () ফাংশনটি চেক করতে পারেন । সুতরাং, প্লাগইন যুক্তি অনুসারে আপনি কেবলমাত্র মানটি আপডেট করুন যা সামনের প্রান্তে প্রদর্শিত হবে। তবে, আপনি সেই পণ্য সংগ্রহের ( getProduct Colલેક્શન () ফাংশন ডেটা ) এ ফাইনাল_প্রাইস এবং মিনি_প্রাইস ক্ষেত্রের মান আপডেট করেননি

আপনি যে মূল্য প্রদর্শন করতে পারেন তা আপনার কাস্টম ছাড়টিও পরীক্ষা করতে পারেন। তবে, পণ্যটি ছাড়ের দামের সাথে কার্টে যুক্ত হয় নি। সুতরাং, আমি মনে করি এটি একটি সম্পূর্ণ সমাধান নয়।

সুতরাং, আপনার সংগ্রহের অবজেক্টের ফাইনাল_প্রাইস এবং মিনি_প্রাইস আপডেট করতে হবে যেমন ক্যাটালগের মূল্য বিধি আপডেট।

আশা করি, এটি আপনার জন্য সহায়ক হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.