Magento 2网格结构

时间:2016-01-26 20:18:37

标签: grid magento2

我已经开始研究Magento 2网格了。我开发了一个简单的模块,但我不了解网格的结构。

在Magento 1.9.X中,添加网格的方式很明显,但在Magento 2中,结构有所不同。如何在Magento 2中添加网格?

5 个答案:

答案 0 :(得分:4)

在Magento 2中,您可以通过XML创建网格(请参阅here

但是,您可以通过PHP创建网格,如Magento 1:将网格类扩展为“Magento \ Backend \ Block \ Widget \ Grid \ Extended”

<tem:SubmitTestResult xmlns:tem="http://www.example.com" xmlns:acs="http://www.example.com" xmlns:acs1="http://www.example.com">   
   <tem:LabId>123</tem:LabId>
   <tem:userId>123</tem:userId>
   <tem:TestResult>
      <acs:CreatedBy>123</acs:CreatedBy>
      <acs:CreatedDate>123</acs:CreatedDate>
      <acs:LastUpdatedBy>123</acs:LastUpdatedBy>
      <acs:LastUpdatedDate>123</acs:LastUpdatedDate>
      <acs1:Capacity95FHigh>123</acs1:Capacity95FHigh>
      <acs1:Capacity95FHigh_AHRI>123</acs1:Capacity95FHigh_AHRI>
      <acs1:CondensateDisposal_AHRI>123</acs1:CondensateDisposal_AHRI>
      <acs1:DegradationCoeffCool>123</acs1:DegradationCoeffCool>
   </tem:TestResult>
</tem:SubmitTestResult>

您可以在以下网址查看更多信息:/vendor/magento/module-cms/Block/Adminhtml/Page/Grid.php。

答案 1 :(得分:1)

1:创建控制器Index.php

 <?php

 namespace Ced\Abhinay\Controller\Adminhtml\Account;

 class Index extends \Magento\Backend\App\Action {

 /**
 * @var bool|\Magento\Framework\View\Result\PageFactory
 */
 protected $resultPageFactory = false;

 /**
 * Index constructor.
 * @param \Magento\Backend\App\Action\Context $context
 * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
 */

 public function __construct(
    \Magento\Backend\App\Action\Context $context,
    \Magento\Framework\View\Result\PageFactory $resultPageFactory
 )
 {
    parent::__construct($context);
    $this->resultPageFactory = $resultPageFactory;
 }

 public function execute()
 {
    $resultPage = $this->resultPageFactory->create();
    $resultPage->getConfig()->getTitle()->prepend((__('Ced Abhinay')));

    return $resultPage;
 }

 }

2:之后为此创建布局文件

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="admin-          2columns-left" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
    <referenceContainer name="content">
        <block class="Ced\Abhinay\Block\Adminhtml\Account\ListGrid" name="ced_custom_grid"/>
    </referenceContainer>
</body>
</page>

3。之后,创建文件ListGrid.php

<?php
  namespace Ced\Abhinay\Block\Adminhtml\Account;

  class ListGrid extends \Magento\Backend\Block\Widget\Grid\Container {

  /**
  * Class ListGrid extends parent constructor \Magento\Backend\Block     \Widget\Grid
 */
 protected function _construct()
 {
    $this->_controller = 'account_index';
    $this->_blockGroup = 'Ced_Abhinay';
    $this->_addButtonLabel = __('Ced Test');
    parent::_construct();
 }
 }

4:现在终于创建了Grid.php

<?php

namespace Ced\Abhinay\Block\Adminhtml\Account\Grid;

class Grid extends \Magento\Backend\Block\Widget\Grid\Extended {

/** @var \Ced\Abhinay\Model\ListModel */
protected $listModelData;

/**
 * Grid constructor.
 * @param \Magento\Backend\Block\Template\Context $context
 * @param \Magento\Backend\Helper\Data $backendHelper
 * @param \Ced\Abhinay\Model\ListModel $listModelData
 * @param array $data
 */

public function __construct(
    \Magento\Backend\Block\Template\Context $context,
    \Magento\Backend\Helper\Data $backendHelper,
    \Ced\Abhinay\Model\ListModel $listModelData,
    array $data = []
) {
    parent::__construct($context, $backendHelper, $data);
    $this->listModelData = $listModelData;
}

protected function _construct()
{
    parent::_construct();
    $this->setId('list_grid');
    $this->setDefaultSort('list_id');
    $this->setDefaultDir('DESC');
    $this->isAjax('true');
}

protected function _prepareCollection()
{
    $collection = $this->listModelData->getCollection();
    $this->setCollection($collection);

    return parent::_prepareCollection();
}

protected function _prepareColumns()
{
    $this->addColumn(
        'post_id',
        [
            'header' => __('ID'),
            'sortable' => true,
            'index' => 'post_id',
            'type' => 'number',
            'header_css_class' => 'col-id',
            'column_css_class' => 'col-id'
        ]
    );
    $this->addColumn(
        'title',
        [
            'header' => __('Name'),
            'index' => 'name',
            'header_css_class' => 'col-name',
            'column_css_class' => 'col-name'
        ]
    );
    $this->addColumn(
        'position',
        [
            'header' => __('Position'),
            'name' => 'position',
            'width' => 60,
            'type' => 'number',
            'validate_class' => 'validate-number',
            'index' => 'position',
            'editable' => true,
        ]
    );

    return parent::_prepareColumns();
}
}

答案 2 :(得分:0)

最佳做法是通过UI组件(xml)创建所有网格。

查看 Magento_Catalog 模块并找到 product_form.xml

答案 3 :(得分:0)

现在,在adminhtml中添加网格的首选方法是使用ui组件

为什么现在最好的方法是因为在将其添加为ui组件时可以使用大量的magento 2后端功能。

但是有多种方法可以添加它。 不要在stackoverflow中重复答案和大量代码,我发现了一个mageplaza探索,它解释了网格的创建。

https://www.mageplaza.com/magento-2-module-development/create-admin-grid-magento-2.html

您还可以参考magento 2文档,了解您可以在ui组件中使用的其他组件:

https://devdocs.magento.com/guides/v2.0/ui-components/ui-component.html

您可以在网格中使用多个现有组件,您可以创建自己的组件。 Aldo复合体在设置时确实提供了很大的灵活性。当你创建一对夫妇时,你会理解他们的运作方式,并且能够轻松地与他们合作。

答案 4 :(得分:0)

我可以向您推荐T he Magento 2 grid customization module,它使您能够创建具有不同列集的自定义网格视图模板,并在网格上从一个模板切换到另一模板。此便捷的选项将帮助您根据每个管理员用户的特定需求准确地微调网格视图。