Tambahkan blok khusus pada halaman daftar: Magento2

10

Saya ingin menambahkan blok khusus saya pada halaman daftar [Magento-2] tetapi tanpa modifikasi list.phtmlatau.phtml file apa pun . Apakah ada kemungkinan menggunakan xmlfile?

masukkan deskripsi gambar di sini

Bantuan apa pun akan dihargai.

Keyur Shah
sumber
Artikel bagus Apakah Anda memperluas lebih detail pada test.phtml untuk mengganti halaman daftar asli? Karena saya pendatang baru di Magento 2.
Bagaimana saya bisa menggunakan fungsi getProductDetailsHtml () untuk menambahkan blok 'label' BARU di kotak di test.phtml?
Kllee

Jawaban:

10

Anda dapat melakukannya jika membuat modul baru untuk mengganti blok ini: vendor\magento\module-catalog\Block\Product\ListProduct.php

untuk mengganti blok ini, Anda harus membuat di.xmldiapp\code\Vendor\Module_Name\etc

di.xml kandungan:

<?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>

Buat nama file baru ListProduct.phpdiapp\code\Vendor\Module_Name\Block\Product

ListProduct.php kandungan:

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 '';
    }
}

Anda dapat mengubah blok Magento\Framework\View\Element\Templateke blok Anda

buat test.phtmlfile diapp\code\Vendor\Module_Name\view\frontend\templates

Solusi Mage
sumber
Terima kasih atas informasi +1 dari saya ... Tetapi bisakah kita mencapai tanpa mengesampingkan?
Keyur Shah
@KeyurShah, apakah di atas metode terbaik sejauh ini di Mage 2.0 untuk menambahkan blok khusus Anda pada halaman daftar? Saya juga setuju dengan Kandy karena output produk di hardcoded di list.phtml.
Slimshadddyyy
@ Vikram sampai sekarang, saya pikir ini adalah metode terbaik sejauh ini dan juga berfungsi dengan baik untuk saya ..
Keyur Shah
@KeyurShah, saya sudah menimpanya dengan di.xmlmenggunakan metode di atas. Sekarang bagaimana cara menampilkan nilai atribut khusus saya di halaman daftar?
Slimshadddyyy
@ Vikram Anda dapat menggunakan kode Mageev2 untuk menampilkan atribut khusus Anda. Maksud saya di test.phtml Anda bisa mendapatkan $ objek produk dan dari $ objek produk Anda bisa dengan mudah mendapatkan nilai atributnya.
Keyur Shah
4

Saat ini Anda tidak dapat melakukan ini karena semua logika output produk di-hardcode dalam list.phtmltemplate.

KAndy
sumber
Ya saya tahu itu ,, Tapi apakah ada kait atau trik yang tersedia untuk itu? Btw, Terima kasih atas informasinya.
Keyur Shah
0

Inilah yang saya ambil solusinya - tetapi Anda harus memodifikasi list.phtmltemplat:

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>

Di dalamnya custom-block.phtmlAnda bisa mendapatkan produk seperti ini:

$_product = $block->getProduct();

Anda perlu menimpa list.phtmltemplat ... Cukup tambahkan ini di mana Anda ingin blok khusus Anda ditampilkan:

<?php if ($customBlock = $block->getChildBlock('custom-block-container')): ?>
    <?= $customBlock->setProduct($_product)->getChildHtml() ?>
<?php endif; ?>

Jika Anda benar - benar ingin menghindari memodifikasi list.phtmltemplat, maka Anda mungkin dapat melakukan hal serupa tetapi dalam templat yang berbeda.

Zankar
sumber