এটি সঠিকভাবে এবং হ্যাক ছাড়াই কীভাবে করা যায়।
আমি ওপি-র ব্যবহারের ক্ষেত্রে সন্ধান করিনি, তবে কার্টের মধ্যে রেন্ডারগুলিকে সংশোধন করতে আমার সক্ষম হওয়া দরকার। সমস্যাটি হ'ল, ওপি-র ক্ষেত্রে, Magento_Checkoutমডিউলটি রেন্ডারদের নাম সরবরাহ করে না, যার অর্থ তাদের রেফারেন্স করা যায় না এবং traditionalতিহ্যবাহী বা নথিভুক্ত পদ্ধতি ব্যবহার করে তাদের টেমপ্লেটগুলি পরিবর্তন করা যায়। যাইহোক, কিছু জঘন্যতার পরে, আমি আবিষ্কার করেছিলাম কীভাবে সরঞ্জামগুলি ব্যবহার করতে হয় তা Magento2 আমাদের সরাসরি XML বিন্যাসে সরবরাহ করে।
মনে রাখবেন যে অন্যান্য জায়গাগুলি যেখানে একই দৃষ্টিভঙ্গি কাজ করে যেমন Magento\Sales\Block\Items\AbstractItemsব্লক। Magento_Checkoutএবং Magento_Salesমডিউল, দুটি ঐ আইটেমটির রেন্ডারারগুলির অধিকাংশ ব্যবহার করতে, তাই প্রশ্নের একটি নাম ছাড়া একটি ব্লক টেম্পলেট পরিবর্তন কাউকে নেতৃত্ব অনেক এই কভার। এটি পোস্ট করার কারণ হ'ল চেকআউট বা বিক্রয় মডিউলগুলিতে কীভাবে রেন্ডারার টেম্পলেটগুলি সংশোধন করা যায় তা অন্যের অনিবার্যতার কারণে।
আমি প্রথমে সমাধানটি সরবরাহ করতে যাচ্ছি, এবং তারপরে যে কেউ এটি কেন কাজ করে তা জানতে চায় এমন ব্যক্তির জন্য এটি বিশদভাবে ব্যাখ্যা করব।
সমাধান
checkout_cart_index.xmlলেআউট ফাইলটিতে নিম্নলিখিতগুলি যুক্ত করুন:
<referenceBlock name="checkout.cart.form">
<arguments>
<argument name="overridden_templates" xsi:type="array">
<item name="default" xsi:type="string">LinusShops_Moneymaker::Magento_Checkout/cart/item/default.phtml</item>
<item name="simple" xsi:type="string">LinusShops_Moneymaker::Magento_Checkout/cart/item/simple.phtml</item>
<item name="configurable" xsi:type="string">LinusShops_Moneymaker::Magento_Checkout/cart/item/configurable.phtml</item>
</argument>
</arguments>
</referenceBlock>
নোট করুন যে আপনার কোডবেসটি প্রতিবিম্বিত করতে মডিউলটির নাম এবং পথটি সংশোধন করা দরকার।
ব্যাখ্যা
এটি overridden_templatesব্লক ডেটা লাভারেজ করে কাজ করে যা ডিফল্টরূপে সংজ্ঞায়িত হয় না।
ইন Magento_Checkout, checkout_cart_index.xmlবিন্যাস ফাইলটি নিম্নলিখিত ব্লকটি সংজ্ঞায়িত করে:
<block class="Magento\Checkout\Block\Cart\Grid" name="checkout.cart.form" as="cart-items" template="cart/form.phtml" after="cart.summary">
<block class="Magento\Framework\View\Element\RendererList" name="checkout.cart.item.renderers" as="renderer.list"/>
<block class="Magento\Framework\View\Element\Text\ListText" name="checkout.cart.order.actions"/>
</block>
এরপরে এটি checkout_cart_item_renderers.xmlলেআউট ফাইলে সেই দু'জন রেন্ডারারের সংজ্ঞা দেয় :
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<update handle="checkout_item_price_renderers"/>
<body>
<referenceBlock name="checkout.cart.item.renderers">
<block class="Magento\Checkout\Block\Cart\Item\Renderer" as="default" template="cart/item/default.phtml">
<block class="Magento\Checkout\Block\Cart\Item\Renderer\Actions" name="checkout.cart.item.renderers.default.actions" as="actions">
<block class="Magento\Checkout\Block\Cart\Item\Renderer\Actions\Edit" name="checkout.cart.item.renderers.default.actions.edit" template="Magento_Checkout::cart/item/renderer/actions/edit.phtml"/>
<block class="Magento\Checkout\Block\Cart\Item\Renderer\Actions\Remove" name="checkout.cart.item.renderers.default.actions.remove" template="Magento_Checkout::cart/item/renderer/actions/remove.phtml"/>
</block>
</block>
<block class="Magento\Checkout\Block\Cart\Item\Renderer" as="simple" template="cart/item/default.phtml">
<block class="Magento\Checkout\Block\Cart\Item\Renderer\Actions" name="checkout.cart.item.renderers.simple.actions" as="actions">
<block class="Magento\Checkout\Block\Cart\Item\Renderer\Actions\Edit" name="checkout.cart.item.renderers.simple.actions.edit" template="Magento_Checkout::cart/item/renderer/actions/edit.phtml"/>
<block class="Magento\Checkout\Block\Cart\Item\Renderer\Actions\Remove" name="checkout.cart.item.renderers.simple.actions.remove" template="Magento_Checkout::cart/item/renderer/actions/remove.phtml"/>
</block>
</block>
</referenceBlock>
</body>
</page>
দুর্ভাগ্যক্রমে, তাদের যথাক্রমে তাদের উপস্বত্ত্বগুলি defaultএবং উল্লেখ করা simpleযায় না।
যাইহোক, Magento\Checkout\Block\Cart\Gridনাম দেওয়া হয়েছে checkout.cart.formএবং এটি রেন্ডারদের পিতামাতা, সেই ব্লকটি অনুসন্ধান করে এটি লক্ষ করা যেতে পারে যে getItemHtmlসম্পর্কিত টেম্পলেটে পদ্ধতিতে একটি কল আছে cart/form.phtml,। সেই পদ্ধতিটি তখন কল করে getItemRenderer। এই দুটি পদ্ধতিই Gridএর পিতামাতার ক্লাসে সংজ্ঞায়িত করা হয় AbstractBlock,। এখানেই overridden_templatesডেটা ব্যবহৃত হয়:
/**
* Retrieve item renderer block
*
* @param string|null $type
* @return \Magento\Framework\View\Element\Template
* @throws \RuntimeException
*/
public function getItemRenderer($type = null)
{
if ($type === null) {
$type = self::DEFAULT_TYPE;
}
$rendererList = $this->_getRendererList();
if (!$rendererList) {
throw new \RuntimeException('Renderer list for block "' . $this->getNameInLayout() . '" is not defined');
}
$overriddenTemplates = $this->getOverriddenTemplates() ?: [];
$template = isset($overriddenTemplates[$type]) ? $overriddenTemplates[$type] : $this->getRendererTemplate();
return $rendererList->getRenderer($type, self::DEFAULT_TYPE, $template);
}
এই জ্ঞানের সাথে, লেআউট এক্সএমএল থেকে ডেটা সহ ব্লকটি পপুলেট করা ম্যাজেন্টো 2 এর argumentsসিনট্যাক্স ব্যবহার করে সোজা is