सूची पृष्ठ पर कस्टम ब्लॉक जोड़ें: Magento2


10

मैं सूची पृष्ठ [Magento-2] पर अपने कस्टम ब्लॉक को जोड़ना चाहता हूं, लेकिन किसी list.phtmlभी.phtml फाइल या किसी भी संशोधन के बिना । क्या xmlफ़ाइल का उपयोग करके कोई संभावना है ?

यहाँ छवि विवरण दर्ज करें

किसी भी तरह की सहायता को आभार समझेंगे।


बढ़िया लेख। क्या आप मूल सूची पृष्ठ को ओवरराइड करने के लिए test.phtml पर अधिक विवरण का विस्तार करेंगे? जैसा कि मैं Magento 2.

मैं टेस्ट get.phml में ग्रिड पर ब्लॉक 'लेबल' NEW जोड़ने के लिए फ़ंक्शन getProductDetailsHtml () का उपयोग कैसे कर सकता हूं?
क्लैली

जवाबों:


10

यदि आप इस ब्लॉक को ओवरराइड करने के लिए नया मॉड्यूल बनाते हैं, तो आप ऐसा कर सकते हैं: 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


मेरे लिए +1 की जानकारी के लिए धन्यवाद ... लेकिन क्या हम ओवरराइड के बिना हासिल कर सकते हैं?
कीयूर शाह

@KeyurShah, पेज पर अपने कस्टम ब्लॉक को जोड़ने के लिए Mage 2.0 में अब तक की सबसे अच्छी विधि है? मैं कैंडी के साथ भी सहमत हूं क्योंकि उत्पाद आउटपुट की सूची में हार्डकोड है।
स्लीमशाद्डी 13

@ विक्रम अब तक, मुझे लगता है कि यह अब तक का सबसे अच्छा तरीका है और मेरे लिए ठीक भी काम कर रहा है ..
कीयूर शाह

@KeyurShah, मैंने पहले ही ओवररिडियन किया है जो di.xmlउपरोक्त विधि का उपयोग कर रहा है । अब लिस्टिंग पृष्ठ में मेरे कस्टम विशेषता मान को कैसे प्रदर्शित किया जाए?
स्लीमशेड्डीय

@ विक्रम आप अपनी कस्टम विशेषता प्रदर्शित करने के लिए Mageev2 कोड का उपयोग कर सकते हैं। मेरा मतलब है कि test.phtml में आप $ उत्पाद वस्तु प्राप्त कर सकते हैं और $ उत्पाद वस्तु से आप आसानी से इसकी विशेषता मान प्राप्त कर सकते हैं।
कीयूर शाह

4

वर्तमान में आप ऐसा नहीं कर सकते क्योंकि उत्पाद आउटपुट के सभी तर्क list.phtmlटेम्पलेट में हार्डकोड किए गए हैं।


हाँ, मुझे पता है कि, लेकिन क्या इसके लिए कोई हुक या कोई ट्रिक उपलब्ध है? Btw, जानकारी के लिए धन्यवाद।
कीयूर शाह

0

यहाँ मेरा समाधान पर ले रहा है - लेकिन आप 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टेम्पलेट को संशोधित करने से बचना चाहते हैं , तो आप एक समान कार्य करने में सक्षम हो सकते हैं लेकिन एक अलग टेम्पलेट में।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.