목록 페이지에 커스텀 블록 추가 : Magento2


10

목록 페이지 [Magento-2]에 내 사용자 지정 블록을 추가하고 싶지만 파일 이나 파일을 수정하지 않고list.phtml.phtml 싶습니다 . xml파일 을 사용하여 가능성이 있습니까?

여기에 이미지 설명을 입력하십시오

도움을 주시면 감사하겠습니다.


좋은 기사. 원래 목록 페이지를 재정의하기 위해 test.phtml에서 더 자세한 내용을 확장 하시겠습니까? 내가 Magento 2에 새로 온 사람으로서

test.phtml의 그리드에서 'label'NEW 블록을 추가하기 위해 getProductDetailsHtml () 함수를 사용하려면 어떻게해야합니까?
Kllee

답변:


10

이 블록을 무시하기 위해 새 모듈을 작성하는 경우이를 수행 할 수 있습니다. vendor\magento\module-catalog\Block\Product\ListProduct.php

이 블록을 대체 할, 당신은 만들 필요가 di.xmlapp\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에 감사드립니다 ... 그러나 우리는 재정의없이 달성 할 수 있습니까?
Keyur Shah

@KeyurShah는 Mage 2.0에서 지금까지 목록 페이지에 커스텀 블록을 추가하는 가장 좋은 방법입니다. 또한 제품 출력이 list.phtml에 하드 코딩되어 있기 때문에 Kandy에 동의합니다.
Slimshadddyyy 2016

@Vikram 지금까지, 나는 이것이 지금까지 가장 좋은 방법이라고 생각하고 나에게도 잘 작동하고 있습니다 ..
Keyur Shah

@KeyurShah, di.xml위의 방법 을 사용하여 이미 재정의했습니다 . 이제 목록 페이지에 내 사용자 정의 속성 값을 표시하는 방법은 무엇입니까?
Slimshadddyyy

@Vikram Mageev2 코드를 사용하여 사용자 정의 속성을 표시 할 수 있습니다. test.phtml에서 $ product 객체를 얻을 수 있고 $ product 객체에서 속성 값을 쉽게 얻을 수 있습니다.
Keyur Shah

4

제품 출력의 모든 논리가 list.phtml템플릿에 하드 코딩되어 있으므로 현재이 작업을 수행 할 수 없습니다 .


그래, 나도 알아 Btw, 정보 주셔서 감사합니다.
Keyur Shah

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템플릿을, 당신은 비슷한 일을 할 수 있지만, 다른 템플릿에있을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.