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

답변:


12

그리드 콜렉션 씽크 레이아웃을 정의하는 경우 업데이터를 사용하여 기본 필터를 추가 할 수 있습니다.

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

안녕 KAndy, 그것은 나를 위해 작동하지 않습니다. 정렬하는 데 도움을 줄 수 있습니까 ??
Vigna S

5
이 답변을 찾는 사람은 기존 그리드에만 적용됩니다. UI 구성 요소 기반 그리드가 아닙니다 .
Andre Klang

그렇다면 이러한 유형의 필터를 UI 구성 요소 기반 그리드에 어떻게 적용 할 수 있습니까?
Knight017

들어 UI 구성 요소를 기반으로 그리드 , 그것은이 같은 동일한 방법으로 수행 할 수 있습니다 magento.stackexchange.com/a/178663/55259
토리

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 class="Namespace\Module\Block\Adminhtml\Whatever\Grid" name="some.name.here" as="grid">

기본값 Magento\Backend\Block\Widget\Grid이 아닌 사용자 지정 그리드를 이미 사용하는 경우 클래스를 만들 필요가 없습니다. 클래스에서 위
_construct메소드 를 복사하면 됩니다.


안녕하세요 @Marius, 답변 주셔서 감사합니다. 구성 방법에서 기본 필터 값을 얻었습니다. 그러나 필터링이 작동하지 않습니다. 모든 기록을 얻는 것은 아닙니다
DRAJI

1
더 나은 개요를 얻으려면 질문에 더 많은 코드를 추가해야 할 수도 있습니다.
Marius

내가 추가 한 필터 코드로 질문을 업데이트했습니다.
DRAJI

큰. 나는 새로운 모습을 취하고 결과로 돌아올 것입니다.
Marius

안녕하세요 마리우스, 나는 이것을 시도했지만 작동하지 않습니다, 어떤 해결책을 찾았습니까?
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. 그러나 나는 틀릴 수 있습니다.
Marius

안녕하세요 @EquinoxBlack 답변 주셔서 감사합니다. 그러나 UI 구성 요소를 사용하여
DRAJI

0

작동하지 않는 많은 코드를 시도한 후에 는 코딩이 필요없는 방법을 찾으십시오 . 필터 및 열 설정을 저장할 수있는 사용자 정의보기 저장 기능을 사용하십시오 .

특정 단계

필터 및 열 설정을 지정한 Default View 눈 모양 아이콘이 있는 버튼을 클릭 한 다음을 클릭 Save View As…하여보기 이름을 입력하십시오. 그런 다음 원하는대로 그리드를 원할 때마다 사용자 정의보기를 클릭하고 원하는만큼 사용자 정의보기를 저장할 수 있습니다.

다시 돌아가서 편집 아이콘을 사용하여 이름을 바꾸거나 나중에 삭제하거나 기본보기로 돌아갈 수 있습니다.

나는 이것이 Magento 2에서 매우 좋은 기능이라고 생각합니다 :)

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.