Problème lors de la surcharge du fichier .phtml: module de catalogue Magento 2

8

Problème: essayer de remplacer le fichier phtml Magento par défaut, je reçois une erreur

Je dois les obtenir: (Pagination en pied de page, Trieur)

entrez la description de l'image ici

Mes modules personnalisés:

1) Vendor/TglsSearch  --> Override from Magento CatalogSearch
2) Vendor/Tglcatalog ---> from Magento Catalo

Dans l' application \ design \ frontend \ Vendor \ tag

entrez la description de l'image ici

CODE MIS À JOUR:

SUPPRIMÉ le dossier ci-dessous

Dans le dossier Magento_Catalog :

templates\product\list\toolbar.phtml
templates\product\list\toolbar\amount.phtml
templates\product\list\toolbar\limiter.phtml
templates\product\list\toolbar\sorter.phtml
templates\product\list\toolbar\viewmode.phtml

Voici ce que j'obtiens une page blanche sans résultats en première page:

entrez la description de l'image ici

Ajout du code mentionné dans le fichier Block:

Fournisseur \ Module \ Block \ Product \ ListProduct.php

class ListProduct extends \Magento\Catalog\Block\Product\ListProduct
{
    public function __construct(
    /*passing all Constructors parameters to the parent class */
    \Magento\Catalog\Block\Product\Context $context,
    \Magento\Framework\Data\Helper\PostHelper $postDataHelper,
    \Magento\Catalog\Model\Layer\Resolver $layerResolver,
     CategoryRepositoryInterface $categoryRepository,
    \Magento\Framework\Url\Helper\Data $urlHelper,

    \Vendor\Module\Helper\Data $tglssearchHelper,
    \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $catalogResourceModelProductCollectionFactory,
    \Magento\Catalog\Model\Config $catalogConfig,
    \Magento\Store\Model\StoreManagerInterface $storeManager,
    \Magento\Catalog\Model\ProductFactory $productFactory,      //Pagination
    array $data = []
) {
    $this->tglssearchHelper = $tglssearchHelper;
    $this->catalogResourceModelProductCollectionFactory = $catalogResourceModelProductCollectionFactory;
    $this->catalogConfig = $catalogConfig;
    $this->storeManager = $storeManager;

    $this->_productFactory = $productFactory;  //Pagination
    $this->urlHelper = $urlHelper;

      parent::__construct(
        $context,
        $postDataHelper,
        $layerResolver,
        $categoryRepository,
        $urlHelper,
        $data
    );
    //updated code
     $collection= $this->_getProductCollection();
    $this->setCollection($collection);

}

public function _prepareLayout(){
   parent::_prepareLayout();
    if ($this->_getProductCollection()) { 

        // create pager block for collection 

        $toolbar = $this->getToolbarBlock();  

        $pager = $this->getLayout()->createBlock(
                        'Magento\Theme\Block\Html\Pager', 'list.pager'
                )->setCollection(
                $this->_getProductCollection() // assign collection to pager
        );  
        $toolbar->setChild('product_list_toolbar_pager', $pager); // set pager block in layout
        // called prepare sortable parameters
        $collection = $this->_getProductCollection();  

        // use sortable parameters
        $orders = $this->getAvailableOrders();  

        if ($orders) {
            $toolbar->setAvailableOrders($orders);
        }
        $sort = $this->getSortBy();
        if ($sort) {
            $toolbar->setDefaultOrder($sort);
        }
        $dir = $this->getDefaultDirection();
        if ($dir) {
            $toolbar->setDefaultDirection($dir);
        }
        $modes = $this->getModes();
        if ($modes) {
            $toolbar->setModes($modes);
        }
        $toolbar->setCollection($collection);

        $this->setChild('toolbar', $toolbar);
        $this->_getProductCollection()->load();
   }
    return $this;
}

protected function _getProductCollection()
{
      $tagalys = $this->tglssearchHelper->getSearchData();

        if($tagalys == false) {
            return parent::_getProductCollection();
        } else {

        $searchResult = $tagalys;

        if(empty($searchResult)) {
            return parent::_getProductCollection();
        }

        $collection = $this->_productCollection = $this->catalogResourceModelProductCollectionFactory->create()
             ->addAttributeToSelect($this->catalogConfig->getProductAttributes())
             ->setStore($this->storeManager->getStore())
             ->addFieldToFilter('visibility', \Magento\Catalog\Model\Product\Visibility::VISIBILITY_BOTH)
             ->addAttributeToFilter( 'entity_id', array( 'in' => $searchResult['results'] ) );

        $orderString = array('CASE e.entity_id');
        foreach($searchResult['results'] as $i => $productId) {
            $orderString[] = 'WHEN '.$productId.' THEN '.$i;
        }
        $orderString[] = 'END';
        $orderString = implode(' ', $orderString);

    $collection->getSelect()->order(new \Zend_Db_Expr($orderString));

        return $this->_productCollection;

    }
}


public function getToolbarBlock()
{
    $blockName = $this->getToolbarBlockName();
    if ($blockName) {
        $block = $this->getLayout()->getBlock($blockName);
        if ($block) {
            return $block;
        }
    }
    $block = $this->getLayout()->createBlock($this->_defaultToolbarBlock, uniqid(microtime()));
    return $block;
}

public function getMode()                       //Pagination
{
    return $this->getChildBlock('toolbar')->getCurrentMode();
}

public function getToolbarHtml()        //Pagination
{
    return $this->getChildHtml('toolbar');
}

protected function getPriceRender()
{
    return $this->getLayout()->getBlock('product.price.render.default');
}

protected function _getConfig()
{
    return $this->_catalogConfig;
}
}

Pour phtml :

\ app \ design \ frontend \ Vendor \ tag \ Magento_Catalog \ templates \ product \ list.phtml

<?php
   $_productCollection = $block->getLoadedProductCollection();
   $_helper = $this->helper('Magento\Catalog\Helper\Output');
?>
 <?php if (!$_productCollection->count()): ?>
<div class="message info empty"><div><?php /* @escapeNotVerified */ echo __('We can\'t find products matching the selection.') ?></div></div>
 <?php else: ?>
   <?php echo $block->getToolbarHtml() ?>        //Have called here
     ....
     ....
    <?php echo($iterator == count($_productCollection)+1) ? '</li>' : '' ?>
        <?php endforeach; ?>
    </ol>
  </div>
  <?php echo $block->getToolbarHtml() ?>    //Have called here
    ....

C'est ce que j'obtiens si je clique sur le lien Catégorie dans le frontend.

entrez la description de l'image ici

Dans Magento_CatalogSearch :

templates\result.phtml

Dans Magento_Theme :

templates\html\pager.phtml
layout\default.html
web\images\my_logo.png

MAINTENANT, l'erreur result.phtml semble avoir disparu, mais mes produits ne s'affichent toujours pas en frontend avec pagination

Dans

Admin->Content->Design configuration-> Enabled my Custom Theme.

REMARQUE: dans mon module personnalisé, j'ai supprimé le dossier de vue qui contenait des modèles et des fichiers de mise en page.

Problème :

Je dois obtenir le pager (pagination), le trieur, etc. à partir des fichiers phtml ci-dessus.

1) Mais mes produits ne sont pas rendus à partir de result.phtml (mais mon var / log a des identifiants de produit) ... le frontend ne s'affiche pas

2) Aucune pagination ou trieur n'apparaissant

Sushivam
la source
reportez-vous à cette réponse pour résoudre votre 1er et 3e problème magento.stackexchange.com/a/86190/36463 . Dans ce lien de réponse, suivez la réponse "Mage2.PRO". kandy ne travaille pas pour moi
Bilal Usean
À partir du lien ci-dessus, dois-je donner comme mentionné par Mage2.pro dans l'application / desin / <fichier de modèle masqué>? Si c'est le cas, j'ai essayé la même chose, mais la pagination n'apparaît pas (j'ai conservé le pager phtml et toolbar.phtml ) et la page de catalogue arrive comme indiqué dans la capture d'écran ci-dessus ... Pls suggèrent
Sushivam

Réponses:

5

Il semble que vous devez définir le pager et le tri dans votre fichier phtml personnalisé.

J'ai suivi les étapes ci-dessous pour ajouter la pagination et le tri.

Dans votre fichier de bloc, ajoutez le code ci-dessous pour ajouter la pagination:

public function __construct(
    \Magento\Catalog\Block\Product\Context $context,
    \Magento\Catalog\Model\ProductFactory $productFactory,
    \Magento\Framework\Url\Helper\Data $urlHelper,
    array $data = []
) {
    $this->_productFactory = $productFactory;
    $this->urlHelper = $urlHelper;
    parent::__construct($context, $data);

    // Get your custom collection here

    $collection = $this->getCustomCollection();

    $this->setCollection($collection);
}

public function _prepareLayout()
{

    parent::_prepareLayout();
    if ($this->getCollection()) {

        // create pager block for collection 

        $toolbar = $this->getToolbarBlock();

        $pager = $this->getLayout()->createBlock(
            'Magento\Theme\Block\Html\Pager', 'list.pager'
        )->setCollection(
            $this->getCollection() // assign collection to pager
        );
        $toolbar->setChild('product_list_toolbar_pager', $pager); // set pager block in layout
        // called prepare sortable parameters
        $collection = $this->getCollection();

        // use sortable parameters
        $orders = $this->getAvailableOrders();

        if ($orders) {
            $toolbar->setAvailableOrders($orders);
        }
        $sort = $this->getSortBy();
        if ($sort) {
            $toolbar->setDefaultOrder($sort);
        }
        $dir = $this->getDefaultDirection();
        if ($dir) {
            $toolbar->setDefaultDirection($dir);
        }
        $modes = $this->getModes();
        if ($modes) {
            $toolbar->setModes($modes);
        }
        $toolbar->setCollection($collection);

        $this->setChild('toolbar', $toolbar);
        $this->getCollection()->load();
    }

    return $this;
}

public function getToolbarHtml()
{
    return $this->getChildHtml('toolbar');
}

public function getToolbarBlock()
{
    $blockName = $this->getToolbarBlockName();
    if ($blockName) {
        $block = $this->getLayout()->getBlock($blockName);
        if ($block) {
            return $block;
        }
    }
    $block = $this->getLayout()->createBlock($this->_defaultToolbarBlock, uniqid(microtime()));

    return $block;
}

public function getMode()
{
    return $this->getChildBlock('toolbar')->getCurrentMode();
}

Définissez également la propriété ci-dessous:

protected $_defaultToolbarBlock = 'Magento\Catalog\Block\Product\ProductList\Toolbar';

Dans le fichier phtml, ajoutez le code ci-dessous avant et après l'inscription:

<?php echo $block->getToolbarHtml() ?>
Jaimin Parikh
la source
Les fichiers phtml sont les mêmes que ceux du noyau collés dans le dossier mentionné ci-dessus! et j'ai ajouté la $ _defaultToolbarBlock = 'Magento \ Catalog \ Block \ Product \ ProductList \ Toolbar protégée'; dans mon ListProduct.php personnalisé
Sushivam
Tous mes fichiers phtml personnalisés semblent s'appeler, mais pas mes catégories et ma collection de produits en recherche ne se chargent pas!
Sushivam
pour la pagination, vous n'avez pas besoin d'écraser un fichier phtml. et il semble également que vous n'ayez pas défini de collection dans votre construction. et je ne suis pas sûr mais essayez votre code de barre d'outils dans la fonction _prepareLayout au lieu de _beforeToHtml
Jaimin Parikh
Pouvez-vous me donner un exemple de code pour obtenir la pagination (sans remplacer le phtml) dans mon fichier de blocage? je veux dire que j'ai besoin de quelles sont les fonctions exactes que je dois garder, je suis confus!
Sushivam
J'ai commenté -beforeToHtml () et ajouté le getToolbarBlock () dans prepareLayout () et également défini la collection dans construct (), je reçois main.CRITICAL: Illegal state [] [] in system.log
Sushivam