मैं सूची पृष्ठ [Magento-2] पर अपने कस्टम ब्लॉक को जोड़ना चाहता हूं, लेकिन किसी list.phtml
भी.phtml
फाइल या किसी भी संशोधन के बिना । क्या xml
फ़ाइल का उपयोग करके कोई संभावना है ?
किसी भी तरह की सहायता को आभार समझेंगे।
मैं सूची पृष्ठ [Magento-2] पर अपने कस्टम ब्लॉक को जोड़ना चाहता हूं, लेकिन किसी list.phtml
भी.phtml
फाइल या किसी भी संशोधन के बिना । क्या xml
फ़ाइल का उपयोग करके कोई संभावना है ?
किसी भी तरह की सहायता को आभार समझेंगे।
जवाबों:
यदि आप इस ब्लॉक को ओवरराइड करने के लिए नया मॉड्यूल बनाते हैं, तो आप ऐसा कर सकते हैं: vendor\magento\module-catalog\Block\Product\ListProduct.php
इस ब्लॉक ओवरराइड करने के लिए, आप बनाने की आवश्यकता di.xml
परapp\code\Vendor\Module_Name\etc
di.xml
सामग्री:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Catalog\Block\Product\ListProduct" type="Vendor\Module_Name\Block\Product\ListProduct" />
</config>
नया फ़ाइल नाम बनाएँ ListProduct.php
परapp\code\Vendor\Module_Name\Block\Product
ListProduct.php
सामग्री:
namespace Vendor\Module_Name\Block\Product;
class ListProduct extends \Magento\Catalog\Block\Product\ListProduct
{
public function getProductDetailsHtml(\Magento\Catalog\Model\Product $product)
{
$html = $this->getLayout()->createBlock('Magento\Framework\View\Element\Template')->setProduct($product)->setTemplate('Vendor_ModuleName::test.phtml')->toHtml();
$renderer = $this->getDetailsRenderer($product->getTypeId());
if ($renderer) {
$renderer->setProduct($product);
return $html.$renderer->toHtml();
}
return '';
}
}
आप ब्लॉक Magento\Framework\View\Element\Template
को अपने ब्लॉक में बदल सकते हैं
test.phtml
पर फ़ाइल बनाएँapp\code\Vendor\Module_Name\view\frontend\templates
di.xml
उपरोक्त विधि का उपयोग कर रहा है । अब लिस्टिंग पृष्ठ में मेरे कस्टम विशेषता मान को कैसे प्रदर्शित किया जाए?
यहाँ मेरा समाधान पर ले रहा है - लेकिन आप list.phtml
टेम्पलेट को संशोधित करना चाहिए :
catalog_category_view.xml
<referenceBlock name="category.products.list">
<block class="Magento\Catalog\Block\Product\ProductList\Item\Container" name="custom.block.container" as="custom-block-container">
<block class="Magento\Catalog\Block\Product\ProductList\Item\Block" name="custom.block" as="custom-block"
template="Magento_Catalog::product/view/custom-block.phtml" />
</block>
</referenceBlock>
में custom-block.phtml
आप इस तरह उत्पाद प्राप्त कर सकते हैं:
$_product = $block->getProduct();
list.phtml
हालांकि आपको खाके को अधिलेखित करने की आवश्यकता होगी ... बस इसे जोड़ें जहां आप अपना कस्टम ब्लॉक दिखाना चाहते हैं:
<?php if ($customBlock = $block->getChildBlock('custom-block-container')): ?>
<?= $customBlock->setProduct($_product)->getChildHtml() ?>
<?php endif; ?>
यदि आप वास्तव में list.phtml
टेम्पलेट को संशोधित करने से बचना चाहते हैं , तो आप एक समान कार्य करने में सक्षम हो सकते हैं लेकिन एक अलग टेम्पलेट में।