ম্যাজেন্টো 2 তে ভার্চুয়াল টাইপ শ্রেণিকে কীভাবে ওভাররাইড করা যায়


14

ম্যাজেন্টো 2-তে ভার্চুয়াল টাইপ ব্লককে কীভাবে ওভাররাইড করা যায়, আমি নিজের ব্লক সহ নিম্নলিখিত ভার্চুয়াল টাইপ ব্লককে ওভাররাইড করতে চাই,

<virtualType name="Magento\CatalogSearch\Block\SearchResult\ListProduct" type="Magento\Catalog\Block\Product\ListProduct">
   <arguments>
       <argument name="catalogLayer" xsi:type="object">Magento\Catalog\Model\Layer\Search</argument>
   </arguments>
</virtualType>

সুতরাং আমি এটিকে আমার কাস্টম মডিউল থেকে ওভাররাইড করার চেষ্টা করেছি di.xml,

<preference for="Magento\Catalog\Block\Product\ListProduct" type="My\Vendor\Block\Product\ListProductSearch" />

কিন্তু এটা কাজ করে না।

সুতরাং, ম্যাজেন্টো 2-তে ভার্চুয়াল টাইপ শ্রেণিকে ওভাররাইড করার সঠিক উপায় কী?

উত্তর:


14

আপনাকে ব্যবহার করতে হবে:

<preference for="Magento\CatalogSearch\Block\SearchResult\ListProduct" type="Vendor\Module\Block\Product\ListProductSearch" />

রাফেল যেমন উল্লেখ করেছেন।

এই একক ব্লকটি সঠিকভাবে কাজ করার জন্য আপনাকে view/frontend/layout/catalogsearch_result_index.xmlনীচের সামগ্রী সহ ফাইল যুক্ত করতে হবে :

<?xml version="1.0"?>

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
    <referenceBlock name="search_result_list">
        <action method="setTemplate">
            <argument name="template" xsi:type="string">Magento_Catalog::product/list.phtml</argument>
        </action>
    </referenceBlock>
</body>


1
একটি যাদুমন্ত্র মত কাজ করে!
ভলভক্স

আপনি কেন বলছেন আপনার setTemplateঅ্যাকশন দরকার ? আমি বিশ্বাস করি না যে সত্য। ভার্চুয়াল টাইপের জন্য একটি অগ্রাধিকার নির্ধারণ করা টেমপ্লেট সেটিংসকে প্রভাবিত করবে না যা ইতিমধ্যে মূল লেআউট XML- এ সংজ্ঞায়িত হয়েছে।
স্কট বুচানন

1
@ স্কটবুকানান যতক্ষণ না প্রদত্ত টেমপ্লেটগুলিতে মডিউল রয়েছে। এই প্রশ্নের উত্তর দেওয়ার সময় এই ব্লকটিতে টেমপ্লেট রয়েছে product/list.phtmlযাতে পছন্দটি ব্যবহার করে টেমপ্লেট এতে পরিবর্তন করা হয়Vendor_Module::product/list.phtml
বার্তোমিজেজ স্যুবার্ট

আহ, বোধগম্য।
স্কট বুচানান

8

আপনি যদি উদাহরণস্বরূপ ভার্চুয়াল টাইপটিকে ওভাররাইড করতে চান তবে আপনার ব্যবহার করা দরকার:

<preference for="Magento\CatalogSearch\Block\SearchResult\ListProduct" type="My\Vendor\Block\Product\ListProductSearch" />

পরিবর্তে:

<preference for="Magento\Catalog\Block\Product\ListProduct" type="My\Vendor\Block\Product\ListProductSearch" />

আপনার উদাহরণস্বরূপ, আপনি ভার্চুয়াল টাইপ নয়, মূল প্রকারটিকে ওভাররাইড করেন, এটি কারণ না কারণ এটি কাজ করে না।


আপনার উত্তরের জন্য আপনাকে ধন্যবাদ, এখন আপনি যেভাবে উল্লেখ করেছেন সেভাবে চেষ্টা করেছি, তবে এটি এখনও কার্যকর হয় না।
nuwaus

@ নোয়াওয়াস আকর্ষণীয়, আপনার অবস্থানটি কোথায় di.xml?
রাফেল ডিজিটাল পিয়ানিজমে

আমার-প্লাগ-ইন-ডির / ইত্যাদি / ডি.এক্সএমএল
নিউজ

@ নোয়াউস আপনি এটিকে সরানো হলে কী হবে etc/frontend/di.xml?
রাফেল ডিজিটাল পিয়ানিজমে

এটি এখনও কাজ করে না :(
nuwaus

4

আমি নিশ্চিত না যে কীভাবে এক্সএমএল কনফিগারেশনগুলি মার্জ করা এবং সাজানো হয়েছে, তবে এই ধরণের সমস্যাটি সাধারণত মডিউলগুলি লোড হওয়ার ক্রমটিতে চলে আসে।

আমি আপনার সাথে ক্রম যোগ করার চেষ্টা করব module.xml:

<sequence>
        <module name="Magento_CatalogSearch"/>
</sequence>

উপরে রাফেল দ্বারা বর্ণিত পছন্দটি আমার পক্ষে ভাল কাজ করছে।

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