Aggiungi blocco personalizzato nella pagina di elenco: Magento2


10

Voglio aggiungere il mio blocco personalizzato nella pagina di elenco [Magento-2] ma senza alcuna modifica list.phtmlo.phtml file. C'è qualche possibilità usando il xmlfile?

inserisci qui la descrizione dell'immagine

Qualsiasi aiuto sarà apprezzato.


Ottimo articolo Espanderesti maggiori dettagli su test.phtml per sovrascrivere la pagina di elenco originale? Come sono un nuovo arrivato su Magento 2.

Come posso usare la funzione getProductDetailsHtml () per aggiungere il blocco 'etichetta' NOVITÀ sulla griglia in test.phtml?
Kllee,

Risposte:


10

Puoi farlo se crei un nuovo modulo per sovrascrivere questo blocco: vendor\magento\module-catalog\Block\Product\ListProduct.php

per sovrascrivere questo blocco, è necessario creare di.xmlaapp\code\Vendor\Module_Name\etc

di.xml soddisfare:

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

Crea un nuovo nome file ListProduct.phpsuapp\code\Vendor\Module_Name\Block\Product

ListProduct.php soddisfare:

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

Puoi cambiare blocco Magento\Framework\View\Element\Templatein blocco

crea il test.phtmlfile inapp\code\Vendor\Module_Name\view\frontend\templates


Grazie per le informazioni +1 da parte mia ... Ma possiamo ottenere senza override?
Keyur Shah,

@KeyurShah, è sopra il metodo migliore finora in Mage 2.0 per aggiungere il tuo blocco personalizzato nella pagina di elenco? Concordo anche con Kandy poiché l'output del prodotto è codificato in list.phtml.
Slimshadddyyy,

@Vikram fino ad ora, penso che questo sia il metodo migliore finora e funziona anche bene per me ..
Keyur Shah

@KeyurShah, l'ho già annullato con l' di.xmlutilizzo del metodo sopra. Ora come visualizzare il valore del mio attributo personalizzato nella pagina di elenco?
Slimshadddyyy,

@Vikram puoi usare il codice Mageev2 per visualizzare il tuo attributo personalizzato. Voglio dire in test.phtml puoi ottenere $ product object e da $ product object puoi ottenere facilmente il suo valore di attributo.
Keyur Shah,

4

Attualmente non è possibile farlo perché tutta la logica dell'output del prodotto è codificata nel list.phtmlmodello.


Sì, lo so ,, Ma c'è qualche gancio o qualche trucco disponibile per quello? A proposito, grazie per l'informazione.
Keyur Shah,

0

Ecco la mia opinione sulla soluzione, ma è necessario modificare il list.phtmlmodello:

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>

In custom-block.phtmlpuoi ottenere il prodotto in questo modo:

$_product = $block->getProduct();

Dovrai sovrascrivere il list.phtmlmodello però ... Aggiungi questo dove vuoi che il tuo blocco personalizzato mostri:

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

Se vuoi davvero evitare di modificare il list.phtmlmodello, potresti essere in grado di fare una cosa simile ma in un modello diverso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.