要在Magento2中向网格添加默认过滤器?


12

我在管理网格中创建了一个带有标题和状态字段属性的自定义模块。

module_test_grid_block.xml中的网格集合

        <arguments>
             <argument name="id" xsi:type="string">testGrid</argument>
             <argument name="dataSource" xsi:type="object">Namespace\Module\Model\ResourceModel\test\Collection</argument>
             <argument name="default_sort" xsi:type="string">id</argument>
             <argument name="default_dir" xsi:type="string">desc</argument>                             
             <argument name="grid_url" xsi:type="url" path="*/*/grid"><param name="_current">1</param></argument>
         </arguments>

我想显示已启用的数据。是否有任何选项可在管理网格集合中添加默认过滤器

编辑

    <block class="Namespace\Module\Block\Adminhtml\Test\Grid" name="namespace_module_test.grid" as="grid">
       <arguments>
             <argument name="id" xsi:type="string">testGrid</argument>
             <argument name="dataSource" xsi:type="object">Namespace\Module\Model\ResourceModel\test\Collection</argument>
             <argument name="default_sort" xsi:type="string">id</argument>
             <argument name="default_dir" xsi:type="string">desc</argument>                             
             <argument name="grid_url" xsi:type="url" path="*/*/grid"><param name="_current">1</param></argument>
             <argument name="default_filter" xsi:type="array">
                  <item name="status" xsi:type="string">1</item>
             </argument>
         </arguments>
        .
        .
      </block>

在块中-Grid.php

    namespace Namespace\Module\Block\Adminhtml\Test;

    use Magento\Backend\Block\Widget\Grid as WidgetGrid;

     class Grid extends WidgetGrid
        {
          public function _construct()
           {
            parent::_construct(); 
            if ($this->hasData('default_filter')) {
            // print_r($this->getData('default_filter'));die;
            $this->setDefaultFilter($this->getData('default_filter'));
           }
        }
      }

我已点击此链接在magento 2中创建管理网格

http://www.mage-world.com/blog/grid-and-form-in-magento-2-admin-panel-part-1.html

Answers:


12

如果定义网格集合的思想布局,则可以使用updater添加默认过滤器。

<argument name="dataSource" xsi:type="object">
    Tutorial\SimpleNews\Model\Resource\News\Collection
    <updater>Tutorial\SimpleNews\Model\Resource\News\Collection\Updater</updater>
</argument>

<?php
namespace Tutorial\SimpleNews\Model\Resource\News\Collection;

class CollectionUpdater implements \Magento\Framework\View\Layout\Argument\UpdaterInterface
{

    /**
     * Update grid collection according to chosen order
     *
     * @param \Tutorial\SimpleNews\Model\Resource\News\Collection $argument
     * @return \Tutorial\SimpleNews\Model\Resource\News\Collection
     */
    public function update($argument)
    {
        $argument->addFieldToFilter('you_field', 'value');

        return $argument;
    }
}

或扩展网格块

class Grid extends \Magento\Backend\Block\Widget\Grid
{
    protected function _prepareCollection()
    {
        if ($this->getCollection()) {
            foreach ($this->getDefaultFilter() as $field => $value) {
                $this->getCollection()->addFieldToFilter($field, $value);
            }
        }
        return parent::_prepareCollection();
    }   
}

嗨,安迪,它对我不起作用。您能帮我解决一下吗?
Vigna S

5
对于找到此答案的任何人,请注意,它仅适用于旧版网格。不是基于UI组件的网格。
安德烈·巴生

那么,如何将这种类型的过滤器应用于基于ui组件的网格?
Knight017'1

对于基于UI组件的网格,可以使用类似于magento.stackexchange.com/a/178663/55259
Torrey

5

您需要将此添加到arguments标签内:

<argument name="default_filter" xsi:type="array">
    <item name="field_name_here" xsi:type="string">value here</item>
</argument>

如果您的论点包含在此块中

<block class="Magento\Backend\Block\Widget\Grid" name="some.name.here" as="grid">

您需要创建自己的扩展Magento\Backend\Block\Widget\Grid如下的类:

<?php 
namespace Namespace\Module\Block\Adminhtml\Whatever;

class Grid extends \Magento\Backend\Block\Widget\Grid
{
    public function _construct()
    {
        parent::_construct(); 
        if ($this->hasData('default_filter')) {
            $this->setDefaultFilter($this->getData('default_filter'));
        }
    }
}

并将上面的block标签修改为

 <block class="Namespace\Module\Block\Adminhtml\Whatever\Grid" name="some.name.here" as="grid">

如果您已经使用自定义网格而不是默认网格,Magento\Backend\Block\Widget\Grid则无需创建类。
您只需要_construct在类中从上方复制该方法。


嗨@Marius,谢谢您的回复。在构造方法中,我得到了默认的过滤器值。但是过滤不起作用。并不是所有记录都得到
DRAJI

1
也许您应该在问题中添加更多代码,以获得更好的概述。
马吕斯

我已经用添加的过滤器代码更新了我的问题
DRAJI

大。我将焕然一新,并得到一个结果。
马里乌斯

嗨,马里乌斯,我尝试了这个,但是没有用,您找到任何解决方案了吗?
Vigna S

0

这是devdocs上的参考:

http://devdocs.magento.com/guides/v2.0/ui-components/ui-secondary-filter.html

如果您需要更多信息-您可以通过文档页面创建请求请求或问题-只需点击“在GitHub上编辑此页面”链接即可。文件会不断更新和完善。


1
您提到的链接显示了如何在使用ui组件的网格中添加过滤器。我认为问题在于更改扩展的网格Magento\Backend\Block\Widget\Grid。但是我可能是错的。
马吕斯

嗨@EquinoxBlack谢谢您的回复。但是它使用UI组件
DRAJI

0

在尝试了许多无效的代码之后,终于找到了一种不需要编码的方法 -利用保存自定义视图功能可以保存过滤器和列设置。

具体步骤

经过设置过滤条件和列设置,点击Default View与眼睛图标按钮,然后单击Save View As…为您的视图输入一个名称。然后,只要您想以自己喜欢的方式获取网格,就可以单击自定义视图,并且可以保存任意数量的自定义视图。

您也可以返回并使用编辑图标对其进行重命名或稍后将其删除,或者返回到默认视图。

我认为这是Magento 2中非常好的功能:)

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.