목록 페이지 [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
템플릿에 하드 코딩되어 있으므로 현재이 작업을 수행 할 수 없습니다 .
여기 해결책이 있습니다- 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
템플릿을, 당신은 비슷한 일을 할 수 있지만, 다른 템플릿에있을 수 있습니다.