Magento 2: добавьте пейджер в пользовательскую сетку на интерфейсе


Я добавил одну сетку в учетную запись клиента и также получаю коллекцию.Но когда я хочу добавить пейджер в эту сетку, в этот раз я получаю сообщение об ошибке, например:

SQLSTATE[42S22]: Столбец не найден: 1054 Неизвестный столбец "main_table.attribute_id" в "списке полей", запрос был: ВЫБЕРИТЕ КОЛИЧЕСТВО (ОТДЕЛЬНЫЙ main_table.attribute_id) ИЗ custommodule_test КАК main_table, ГДЕ (customer_id='2') {"is_exception": false} []

На самом деле там нет никакого файла attribute_id, не так ли в моей таблице я также не фильтрую это имя файла, как вы видите.

Пожалуйста, взгляните:

Тест.phtml

<?php if ($block->getPagerHtml()): ?>
    <div class="order-products-toolbar toolbar bottom"><?php echo $block->getPagerHtml(); ?></div>
<?php endif; ?>

Block/test.php

protected function _prepareLayout()
{
    parent::_prepareLayout();
    if ($this->getCollection()) {
        $pager = $this->getLayout()->createBlock(
            'Magento\Theme\Block\Html\Pager',
            'custom.collection.test'
        )->setCollection(
            $this->getCollection()
        );
        $this->setChild('pager', $pager);
        $this->getCollection()->load();
    }
    return $this;
}
public function getPagerHtml()
{
    return $this->getChildHtml('pager');
}

public function getCollection()
{
    if (!$this->getData('collection')) {
        $this->setCollection(
            $this->_objectMangaer->get('Namespace\Modulename\Model\Test')->getCollection()->addFieldToFilter('customer_id',2)
        );
    }
    return $this->getData('collection');
}

Пожалуйста, обратите внимание: Если я напрямую позвоню

 $this->getCollection() ;
из файла phtml я получил правильную коллекцию.
Author: Rakesh Jesadiya, 2016-05-12

1 answers

Чтобы выполнить это требование, мы использовали множество подходов и нашли лучшее решение для разбиения на страницы в пользовательской коллекции Magento2. Здесь мы собираемся объяснить наилучший подход, пожалуйста, следуйте инструкциям.

Примечание: Предполагается, что Вы создали базовый модуль в Magento2. Здесь Ipragmatech - это наш пакет, а Ipreward - наш модуль. Пожалуйста, измените название своего класса соответствующим образом.

Шаг 1: Создайте контроллер с именем Myrewad, индекс действий (Myreward/Index.php) и добавить следующий код для выполнения метода

<?php
  namespace Ipragmatech\Ipreward\Controller\Myreward;
  class Index extends \Magento\Framework\App\Action\Action
     {
        public function execute()
           {
               $this->_view->loadLayout();
               $this->_view->renderLayout();
           }
    }

Шаг 2: Создайте блок (при условии, что вы уже создали модель для своей таблицы. Здесь у нас есть пользовательская таблица, и мы создали модель в качестве награды) имя Reward.php и добавьте следующий код. В этом коде мы добавили пейджер в нашу пользовательскую коллекцию.

<?php
namespace Ipragmatech\Ipreward\Block\Myreward;

use Ipragmatech\Ipreward\Block\BaseBlock;

class Reward extends BaseBlock
  {
/**
 * @var \Ipragmatech\Ipreward\Model\Reward
 */
protected $_rewardCollection;

/**
 * Reward constructor.
 * @param \Magento\Framework\App\Action\Context $context
 * @param \Ipragmatech\Ipreward\Model\Reward $rewardCollection
 */
public function __construct(
    \Ipragmatech\Ipreward\Block\Context $context,
    \Ipragmatech\Ipreward\Model\Reward $rewardCollection,
){
    $this->_rewardCollection = $rewardCollection;
    parent::__construct($context);
}

protected function _prepareLayout()
{

    parent::_prepareLayout();
    $this->pageConfig->getTitle()->set(__('My Reward History'));

    if ($this->getRewardHistory()) {
        $pager = $this->getLayout()->createBlock(
            'Magento\Theme\Block\Html\Pager',
            'reward.history.pager'
        )->setAvailableLimit(array(5=>5,10=>10,15=>15,20=>20))
            ->setShowPerPage(true)->setCollection(
            $this->getRewardHistory()
        );
        $this->setChild('pager', $pager);
        $this->getRewardHistory()->load();
    }
    return $this;
}

public function getPagerHtml()
{
    return $this->getChildHtml('pager');
}
/**
 * function to get rewards point transaction of customer
 *
 * @return reward transaction collection
 */
Public function getRewardHistory()
{
    //get values of current page
    $page=($this->getRequest()->getParam('p'))? $this->getRequest()->getParam('p') : 1;
    //get values of current limit
    $pageSize=($this->getRequest()->getParam('limit'))? $this->getRequest
    ()->getParam('limit') : 5;


    $collection = $this->_rewardCollection->getCollection();
    $collection->setPageSize($pageSize);
    $collection->setCurPage($page);
    $logger->info("Here reward collection: ".$collection->getSelect());
    $logger->info("Here reward collection: Page:".$page." Page size :"
        .$pageSize);
    return $collection;
}

} Шаг 3: Добавлен/Изменен следующий код в файле макета app/code/Ipragmatech/Ipreward/view/frontend/layout/ipreward_myreward_index.xml

  <?xml version="1.0"?>
  <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"               layout="2columns-left" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
    <update handle="customer_account"/>
      <body>
        <referenceContainer name="content">          
        <block class="Ipragmatech\Ipreward\Block\Myreward\Reward" name="myreward_reward" template="myreward/reward.phtml">
        </block>
       </referenceContainer>      
   </body>
 </page>

Шаг 4: Добавьте ваш файл phtml в качестве приложения/кода/Ipragmatech/Ipreward/просмотр/интерфейс/шаблоны/myreward/вознаграждение.phtml и добавьте следующий код

enter image description here

И результат будет выглядеть так

enter image description here

Иногда мы сталкивались с некоторыми проблемами CSS, при которых ограничение страницы не отображается, поэтому используйте следующий CSS, если у вас такая же проблема.

 .custom-pager .limiter{
      display: block !important;
  }

Надеюсь, это вам очень поможет. Пожалуйста, сообщите нам, если у вас возникнут какие-либо проблемы с Magento настройка.

 14
Author: Manish, 2016-09-07 08:49:58