Masalah overrding file .phtml: Modul katalog Magento 2

8

Masalah: Mencoba untuk mengganti file phtml Magento default, saya mendapatkan kesalahan

Saya perlu mendapatkan ini: (Pagination di footer, Sorter)

masukkan deskripsi gambar di sini

Modul khusus saya:

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

Di app \ design \ frontend \ Vendor \ tag

masukkan deskripsi gambar di sini

KODE DIPERBARUI:

MENGHAPUS folder di bawah ini

Dalam folder 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

Inilah yang saya dapatkan halaman kosong tanpa hasil di halaman depan:

masukkan deskripsi gambar di sini

Menambahkan kode yang disebutkan dalam file Blok:

Vendor \ 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;
}
}

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

Ini yang saya dapatkan jika saya mengklik tautan Kategori di halaman depan.

masukkan deskripsi gambar di sini

Di Magento_CatalogSearch :

templates\result.phtml

Dalam Magento_Tema :

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

SEKARANG kesalahan result.phtml tampaknya hilang, tapi tetap saja produk saya tidak ditampilkan di halaman depan dengan pagination

Di

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

CATATAN: Dalam modul khusus saya, saya telah menghapus folder tampilan yang memiliki template dan file tata letak.

Masalah :

Saya harus mendapatkan pager (pagination), Sorter dll dari file phtml di atas.

1) Tetapi produk saya tidak dirender dari result.phtml (Tapi var / log saya memiliki id produk) ... frontend tidak menampilkan

2) Tidak ada pagination atau sorter yang muncul

Sushivam
sumber
lihat jawaban ini untuk menyelesaikan masalah Anda 1 dan 3 magento.stackexchange.com/a/86190/36463 . Dalam tautan jawaban ini ikuti jawaban "Mage2.PRO". kandy ans not work for me
Bilal Usean
Dari tautan di atas, haruskah saya memberikan seperti yang disebutkan oleh Mage2.pro di app / desin / <file template overidden>? Jika demikian saya mencoba yang sama, tetapi Pagination tidak muncul (saya tetap menyimpan pager phtml dan toolbar.phtml ) dan halaman katalog akan datang seperti yang ditunjukkan pada gambar di atas ... Mohon saran
Sushivam

Jawaban:

5

Tampaknya Anda harus mengatur pager dan menyortir file phtml kustom Anda.

Saya telah mengikuti langkah-langkah di bawah ini untuk menambahkan pagination dan sortasi.

Dalam file blok Anda, tambahkan kode di bawah ini untuk menambahkan 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();
}

Tentukan juga properti di bawah ini:

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

Dalam file phtml tambahkan kode di bawah ini sebelum dan sesudah daftar:

<?php echo $block->getToolbarHtml() ?>
Jaimin Parikh
sumber
File-file phtml sama seperti pada inti yang disisipkan di folder yang disebutkan di atas! dan saya telah menambahkan $ _defaultToolbarBlock = 'Magento \ Catalogue \ Block \ Product \ ProductList \ Toolbar' yang dilindungi; dalam ListProduct.php kustom saya
Sushivam
Semua file phtml kustom saya tampaknya dipanggil, tetapi Anda bukan kategori dan koleksi produk saya dalam pencarian tidak memuat!
Sushivam
untuk pagination Anda tidak perlu menimpa file phtml apa pun. dan juga tampaknya Anda belum menetapkan koleksi di konstruk Anda. dan saya tidak yakin tetapi coba kode bilah alat Anda dalam fungsi _prepareLayout alih-alih _beforeToHtml
Jaimin Parikh
Bisakah Anda memberi saya contoh kode untuk mendapatkan pagination (tanpa mengganti phtml) dalam file blok saya? i mean i need apa saja fungsi yang harus saya simpan, saya bingung!
Sushivam
Aku komentar -beforeToHtml () dan menambahkan getToolbarBlock () di prepareLayout () merupakan juga mengatur koleksi di construct (), saya mendapatkan main.CRITICAL: Negara Illegal [] [] di system.log
Sushivam