Чтобы добавить фильтр по умолчанию для сетки в Magento2?

12

Я создал один пользовательский модуль с атрибутом title & status field в сетке администратора.

Сетки коллекций в 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

DRAJI
источник

Ответы:

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();
    }   
}
Канди
источник
Привет Канди, это не работает для меня. Не могли бы вы помочь мне разобраться?
Vigna S
5
Любой, кто найдет этот ответ, учтите, что он применим только к устаревшим сеткам. Не основанные на пользовательском интерфейсе сетки.
Андре Кланг
Итак, как мы можем применить этот тип фильтров к сетке на основе компонентов?
Knight017
Для сетки на основе компонентов пользовательского интерфейса это можно сделать с помощью того же подхода, что и 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
возможно, вам следует добавить больше кода к вопросу, чтобы получить более полное представление.
Мариус
Я обновил свой вопрос с помощью кода фильтра, который я добавил
DRAJI
Отлично. Я возьму новый взгляд и вернусь с результатом.
Мариус
Привет Мариус, я попробовал это, но это не работает, ты нашел какое-нибудь решение?
Vigna S
0

вот ссылка на devdocs:

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

Если вам нужна дополнительная информация по этому вопросу - вы можете создать запрос на удаление или проблему через страницу документов - просто нажмите ссылку «Изменить эту страницу на GitHub». Документы постоянно обновляются и улучшаются.

EquinoxBlack
источник
1
ссылка, которую вы упомянули, показывает, как добавить фильтры в сетку, которая использует компоненты пользовательского интерфейса. Я думаю, что вопрос об изменении сетки, которая расширяется Magento\Backend\Block\Widget\Grid. Но я могу ошибаться.
Мариус
Привет @ EquinoxBlack Спасибо за ваш ответ. Но это с помощью компонента пользовательского интерфейса
DRAJI
0

Попробовав множество кодов, которые не работают, наконец, найдите способ, который не требует кодирования - используйте функцию сохранения пользовательских представлений, которая может сохранять настройки фильтра и столбцов.

Конкретные шаги

После настройки фильтра и параметров столбца, нажмите на Default Viewкнопку со значком глаза, затем нажмите, Save View As…чтобы ввести имя для вашего вида. Затем вы можете щелкнуть пользовательский вид в любое время, чтобы получить сетку, как вам нравится, и вы можете сохранить пользовательский вид столько раз, сколько захотите.

Вы также можете вернуться назад и использовать значок редактирования, чтобы переименовать или удалить его позже, или чтобы вернуться к виду по умолчанию.

Я думаю, что это очень хорошая функция в Magento 2 :)

введите описание изображения здесь

Ключ Шан
источник