태그 보관물: product-list

product-list

목록 페이지에 커스텀 블록 추가 : Magento2 파일을 수정하지 않고list.phtml.phtml 싶습니다 . xml파일 을

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

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

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



답변

이 블록을 무시하기 위해 새 모듈을 작성하는 경우이를 수행 할 수 있습니다. 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


답변

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


답변

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


답변