ম্যাজেন্টো 2: একটি ব্লকের টেমপ্লেট পরিবর্তন করা


52

ম্যাজেন্টো 1-এ, মডিউল বিকাশকারী হিসাবে লেআউট এক্সএমএল কোড ব্যবহার করে কোনও ব্লকের টেমপ্লেট পরিবর্তন করা সম্ভব

<reference name="block_to_change">
    <action method="setTemplate">
        <param>/path/to/template.phtml</param>
    </action>
</reference>

এবং তারপরে বেস থিমটিতে আপনার টেম্পলেট যুক্ত করুন।

app/design/frontend/base/default/template/path/to/template.phtml

একটি মডিউল বিকাশকারী হিসাবে, ম্যাজেন্টো 2 তে একই জাতীয় কিছু করা কি সম্ভব? বা আমার আগ্রহী ব্লকটি সরাতে আমার লেআউট এক্সএমএল বা পিএইচপি কোড ব্যবহার করতে হবে এবং একটি ভিন্ন টেম্পলেট (যার শ্রেণিটি মূল ব্লক শ্রেণীর প্রসারিত) সহ একটি নতুন ব্লক প্রবেশ করানো দরকার?

আমি জানি যে আমি একটি কাস্টম থিম তৈরি করতে পারি যা কোনও টেম্পলেটকে প্রতিস্থাপন করে, তবে আমি একটি মডিউল তৈরি করতে আগ্রহী যা ডিফল্ট টেম্পলেটটি পরিবর্তন করে, তবে এখনও একটি কাস্টম থিমটিকে সেই টেমপ্লেটটি প্রতিস্থাপনের অনুমতি দেয়।

উত্তর:


59

অবশ্যই এটি সম্ভব:

<referenceBlock name="copyright">
    <action method="setTemplate">
        <argument name="template" xsi:type="string">Dfr_Backend::page/copyright.phtml</argument>
    </action>
</referenceBlock>

আমি কীভাবে পদক্ষেপগুলি ব্যাখ্যা করতে পারি কীভাবে আমি বিন্যাসটি পরিবর্তন করতে পারি, আসলে আমি সিস্টেম কনফিগারেশন অনুসারে অ্যাডটকার্ট.এফটিএমএল ফাইলটিতে অ্যাডটি আপডেট করতে এবং কাস্টম মডিউলটি ব্যবহার করে এটি আপডেট করতে চাই
দীপক মানকোটিয়া

5
কেডি সলিউশনটি আমার পক্ষে কার্যকর হয়নি তবে এটি হ্যাঁ
csmarvz

আমি ব্লকটির নাম "গ্রাহক_কাউন্ট_ড্যাশবোর্ড_টপ" <body> <संदर्भব্লক নাম = "গ্রাহক_কাউন্ট_ড্যাশবোর্ড_টপ"> <অ্যাকশন পদ্ধতি = "সেটটেম্পলেট"> <যুক্তি নাম = "টেমপ্লেট" এক্সসি: টাইপ = "স্ট্রিং"> নেমস্পেস_মডিউলনেম :: অর্ডার টেমপ্লেট পরিবর্তন করেছি /recentorder.phtml </argument> </action> </referencesBlock> </body> "তবে এটির কাজ হচ্ছে না, দয়া করে চেক করুন এবং আমাকে আপনার মন্তব্যগুলি জানান
সেন্টথিল

43

অ্যাকশন নোড হ্রাস করা হয়েছে, তবে আপনি ব্লক আর্গুমেন্ট ব্যবহার করতে পারেন

<referenceBlock name="block_to_change">
    <arguments>
        <argument name="template" xsi:type="string">[Vendor]_[Module]::/path/to/template.phtml</argument>
    </arguments>
</referenceBlock>

আমি কীভাবে পদক্ষেপগুলি ব্যাখ্যা করতে পারি কীভাবে আমি বিন্যাসটি পরিবর্তন করতে পারি, আসলে আমি addtocart.phtmlসিস্টেম কনফিগারেশন অনুযায়ী ফাইলটিতে অ্যাড আপডেট করতে চাই এবং কাস্টম মডিউলটি ব্যবহার করে এটি আপডেট করতে চাই
দীপক মানকোটিয়া


4
ধন্যবাদ - আমি এখানে একটি বাগ রিপোর্টের রেফারেন্সটি কেবল এখানেই ছেড়ে দেব github.com/magento/magento2/issues/3356 - এই উত্তরে পোস্ট করা পদ্ধতি, সম্ভবত ভবিষ্যতে কাজ করার পদ্ধতিটি এখনও বিজ্ঞাপন হিসাবে কাজ করে না
ক্রিস্টফ ফুমান

2
@ কেডি আপনার কোড উদাহরণটি কি 100% সঠিক? আমি চেষ্টা করেছিলাম এবং এটি কোনওভাবেই কাজ করতে পারি না। @ Mage2.PRO- এর অন্যান্য উত্তর (যা ব্যবহার করে <action method='setTemplate'>) সমস্যা ছাড়াই কাজ করে।
ম্যাজিনফোর্টস

1
এটি কাজ করে না। স্বীকৃত উত্তর যদিও।
মিলান সিমেক 22

29

মধ্যে পার্থক্য বুঝতে পারা <arguments>এবং <action>আপনি বুঝতে হবে কিভাবে Magento 2 বস্তুর কনস্ট্রাকটর কাজ করি। আপনি যদি ম্যাজেন্টোতে কোনও কনস্ট্রাক্টরকে ওভাররাইড করেন তবে আপনি সর্বদা $data-parameterএকটি অ্যারে পাবেন। এই ডেটা অভ্যন্তরীণ করার XML ফাইল দেওয়া এবং বিভিন্ন ভাষায় অনূদিত হয় $_data-arrayএর \Magento\Framework\DataObject:

<referenceBlock name="catalog.topnav">
    <arguments>
        <argument name="template" xsi:type="string">Foo_Bar::buzz.phtml</argument>
    </arguments>
</referenceBlock>    

...

public function __construct(array $data = [])
{
    // $_data is populated with the arguments from XML:
    // so $_data['template'] is now 'Foo_Bar::buzz.phtml'
    $this->_data = $data;
}

তবে, টেমপ্লেটের ক্ষেত্রে, যদি setTemplate()সিউডো কনস্ট্রাক্টর ( _construct(), একক আন্ডারস্কোর) ব্যবহার করা হয়, এর অর্থ $dataএটি XML এ সেট করা আছে কিনা তা বিবেচ্য নয় over

public function _construct()
{
    $this->setTemplate('foo/bar.phtml');
}

এই <action>দৃশ্যে, অগ্রাধিকার দেওয়া হয়, যেহেতু এটি নির্বাহক এবং সিউডো কনস্ট্রাক্টরের পরে কার্যকর করা হয়।

<referenceBlock name="catalog.topnav">
    <action method="setTemplate">
        <argument name="template" xsi:type="string">Foo_Bar::buzz.phtml</argument>
    </action>
</referenceBlock> 

10

নিম্নলিখিতটি Magento EE 2.2.3 এ আমার জন্য কাজ করেছে

<?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="core.module.block.name" template="[Vendor]_[Module]::path/to/your/template.phtml" />
    </body>
</page>

দ্রষ্টব্য: আপনি যদি কোনও কোরের টেমপ্লেট পরিবর্তন করতে একটি কাস্টম মডিউল ব্যবহার করেন এবং আপনি উন্মাদ হয়ে যাচ্ছেন কারণ পূর্ববর্তী কোডটি স্নিপড কাজ করে না, আপনি যে মডিউলটি পরিবর্তন করার চেষ্টা করছেন (মডিউল.এক্সএমএল) পরে আপনার মডিউলটি লোড হয়েছে তা নিশ্চিত করুন এবং আপনি মৃত্যুদণ্ড কার্যকর bin/magento setup:upgrade:)


এটি আমার মতে সবচেয়ে পরিষ্কার উপায়।
বেন ক্রুক

2

কেন জানি না, তবে আমি এই উপায়টিকে সেরা বলে মনে করি:

<referenceBlock name="sales.order.items.renderers.default" template="Foo_Bar::sales/order/items/renderer/default.phtml"/>

1
<referenceBlock name="sales.order.items.renderers.default" template="Foo_Bar::sales/order/items/renderer/default.phtml"/>

setTemplateপদ্ধতিটি ব্যবহার করার আগে যদি আপনার ব্লকটি ওভাররাইট না করা হয় তবে এটি কাজ করবে । ম্যাজেন্টো ২.২.x এবং উচ্চতর।

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