Je veux ajouter mon bloc personnalisé sur la page de liste [Magento-2] mais sans aucune modification list.phtmlni.phtml fichier. Y a-t-il une possibilité en utilisant un xmlfichier?
Toute aide serait appréciée.
Je veux ajouter mon bloc personnalisé sur la page de liste [Magento-2] mais sans aucune modification list.phtmlni.phtml fichier. Y a-t-il une possibilité en utilisant un xmlfichier?
Toute aide serait appréciée.
Réponses:
Vous pouvez le faire si vous créez un nouveau module pour remplacer ce bloc: vendor\magento\module-catalog\Block\Product\ListProduct.php
pour remplacer ce bloc, vous devez créer di.xmlàapp\code\Vendor\Module_Name\etc
di.xml contenu:
<?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>
Créez un nouveau nom de fichier ListProduct.phpàapp\code\Vendor\Module_Name\Block\Product
ListProduct.php contenu:
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 '';
}
}
Vous pouvez changer le bloc Magento\Framework\View\Element\Templateen votre bloc
créer un test.phtmlfichier àapp\code\Vendor\Module_Name\view\frontend\templates
di.xmlutilisant la méthode ci-dessus. Maintenant, comment afficher ma valeur d'attribut personnalisé dans la page de liste?
Actuellement, vous ne pouvez pas le faire car toute la logique de sortie du produit est codée en dur dans le list.phtmlmodèle.
Voici mon point de vue sur la solution - mais vous devez modifier le list.phtmlmodèle:
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>
En custom-block.phtmlvous pouvez obtenir le produit comme celui - ci:
$_product = $block->getProduct();
Vous devrez cependant remplacer le list.phtmlmodèle ... Ajoutez simplement ceci à l'endroit où vous souhaitez que votre bloc personnalisé s'affiche:
<?php if ($customBlock = $block->getChildBlock('custom-block-container')): ?>
<?= $customBlock->setProduct($_product)->getChildHtml() ?>
<?php endif; ?>
Si vous voulez vraiment éviter de modifier le list.phtmlmodèle, vous pourrez peut-être faire une chose similaire mais dans un modèle différent.