Problema al sobrescribir el archivo .phtml: módulo de catálogo de Magento 2

8

Problema: al intentar anular el archivo phtml Magento predeterminado, obtengo un error

Necesito obtener estos: (Paginación en el pie de página, Clasificador)

ingrese la descripción de la imagen aquí

Mis módulos personalizados:

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

En la aplicación \ design \ frontend \ Vendor \ tag

ingrese la descripción de la imagen aquí

CÓDIGO ACTUALIZADO:

ELIMINÓ la carpeta a continuación

En la carpeta 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

Esto es lo que obtengo una página en blanco sin resultados en la portada:

ingrese la descripción de la imagen aquí

Se agregó el código mencionado en el archivo de bloque:

Proveedor \ Módulo \ Bloque \ Producto \ ListaProducto.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;
}
}

Para 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
    ....

Esto es lo que obtengo si hago clic en el enlace Categoría en la interfaz.

ingrese la descripción de la imagen aquí

En Magento_CatalogSearch :

templates\result.phtml

En Magento_Theme :

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

AHORA el error result.phtml parece haber desaparecido, pero aún así mis productos no se procesan en la interfaz con paginación

En

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

NOTA: en mi módulo personalizado, eliminé la carpeta de vista que tenía plantillas y archivos de diseño.

Problema :

Tengo que obtener el localizador (paginación), el clasificador, etc. de los archivos phtml anteriores.

1) Pero mis productos no se procesan desde result.phtml (Pero mi var / log tiene identificadores de producto) ... la interfaz no se muestra

2) No aparece paginación o clasificador

Sushivam
fuente
consulte esta respuesta para resolver su primer y tercer problema magento.stackexchange.com/a/86190/36463 . En este enlace de respuesta, siga la respuesta "Mage2.PRO". kandy ans no funciona para mí
Bilal Usean
Desde el enlace anterior, ¿debo dar como se menciona en Mage2.pro en la aplicación / desin / <archivo de plantilla anulado>? Si es así, intenté lo mismo, pero no aparece la paginación (he mantenido el paginador phtml y toolbar.phtml ) y la página del catálogo aparece como se muestra en la captura de pantalla de arriba ... Por
favor

Respuestas:

5

Parece que debe configurar el localizador y la clasificación en su archivo phtml personalizado.

He seguido los pasos a continuación para agregar paginación y clasificación.

En su archivo de bloque, agregue el siguiente código para agregar paginación:

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();
}

Defina también a continuación la propiedad:

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

En el archivo phtml, agregue el siguiente código antes y después del listado:

<?php echo $block->getToolbarHtml() ?>
Jaimin Parikh
fuente
¡Los archivos phtml son los mismos que en el núcleo pegado en la carpeta mencionada anteriormente! y he agregado el $ _defaultToolbarBlock = 'Magento \ Catalog \ Block \ Product \ ProductList \ Toolbar' protegido; en mi ListProduct.php personalizado
Sushivam
Parece que se llaman todos mis archivos phtml personalizados, pero no se cargan mis categorías y mi colección de productos en la búsqueda.
Sushivam
para la paginación no necesita sobrescribir ningún archivo phtml. y también parece que no has configurado la colección en tu construcción. y no estoy seguro, pero intente su código de barra de herramientas en la función _prepareLayout en lugar de _beforeToHtml
Jaimin Parikh
¿Puede darme un código de ejemplo para obtener la paginación (sin anular phtml) en mi archivo de bloque? Quiero decir, necesito cuáles son las funciones exactas que tengo que mantener, ¡estoy confundido!
Sushivam
Comenté -beforeToHtml () y agregué getToolbarBlock () en prepareLayout () y también configuré la colección en construct (), obtengo main.CRITICAL: Illegal state [] [] en system.log
Sushivam