Je veux ajouter mon bloc personnalisé sur la page de liste [Magento-2] mais sans aucune modification list.phtml
ni.phtml
fichier. Y a-t-il une possibilité en utilisant un xml
fichier?
Toute aide serait appréciée.
Je veux ajouter mon bloc personnalisé sur la page de liste [Magento-2] mais sans aucune modification list.phtml
ni.phtml
fichier. Y a-t-il une possibilité en utilisant un xml
fichier?
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\Template
en votre bloc
créer un test.phtml
fichier àapp\code\Vendor\Module_Name\view\frontend\templates
di.xml
utilisant 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.phtml
modèle.
Voici mon point de vue sur la solution - mais vous devez modifier le list.phtml
modè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.phtml
vous pouvez obtenir le produit comme celui - ci:
$_product = $block->getProduct();
Vous devrez cependant remplacer le list.phtml
modè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.phtml
modèle, vous pourrez peut-être faire une chose similaire mais dans un modèle différent.