リストページ[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は、別のテンプレートで同様のことを実行できる場合があります。